EZ_AD
题目描述:
安全研究员小张在集团办公内网捕获到一份异常流量,请你帮助小张分析,找到其中的可疑内容。
参考自:https://1cepeak.cn/posts/yqds2024-writeup/
首先我看到有三个流量包,先合并了它们,命名为all.pcap
一共要解密三种协议的流量
- SharpADWS 的流量(包裹在 NMF 中的 GSS-API 流量)
- SMB2(通过 Kerberos 申请 cifs 的票据)
- DCERPC
第一步先提取NTLM v2数据爆破用户密码,有一个很好用的一键提取工具NTLMRawUnHide
python3 NTLMRawUnHide.py -i xxx.pcapng
sk::sk.com:77534d575de5f632:83889cdf4d1336bd3cc92f23c94f1f6d:010100000000000080a6da2b0464db012ad8e6c2d43a869c000000000200040053004b00010004004400430004000c0073006b002e0063006f006d0003001200440043002e0073006b002e0063006f006d0005000c0073006b002e0063006f006d00070008009dafb62b0464db01090036006c006400610070002f003100390032002e003100360038002e003100370039002e00310033003100400073006b002e0063006f006d000000000000000000
爆出来密码是!@#123QWEqwe
hashcat -m 5600 -a 0 "sk::sk.com:77534d575de5f632:83889cdf4d1336bd3cc92f23c94f1f6d:010100000000000080a6da2b0464db012ad8e6c2d43a869c000000000200040053004b00010004004400430004000c0073006b002e0063006f006d0003001200440043002e0073006b002e0063006f006d0005000c0073006b002e0063006f006d00070008009dafb62b0464db01090036006c006400610070002f003100390032002e003100360038002e003100370039002e00310033003100400073006b002e0063006f006d000000000000000000" rockyou.txt
SK::sk.com:77534d575de5f632:83889cdf4d1336bd3cc92f23c94f1f6d:010100000000000080a6da2b0464db012ad8e6c2d43a869c000000000200040053004b00010004004400430004000c0073006b002e0063006f006d0003001200440043002e0073006b002e0063006f006d0005000c0073006b002e0063006f006d00070008009dafb62b0464db01090036006c006400610070002f003100390032002e003100360038002e003100370039002e00310033003100400073006b002e0063006f006d000000000000000000:!@
手动提取过程:
-
筛选数据包
- 通过“ntlmssp”这一字符串进行数据包筛选,以获得身份验证的握手包。
-
查找NTLMSSP_AUTH包
- 在筛选后的数据包中,查找NTLMSSP_AUTH包。这通常是包含NTLM v2响应的数据包。
-
深入查找NTLM响应部分
- 在NTLMSSP_AUTH包中,深入查找NTLM响应部分。找到NTProofStr字段和NTLMv2的响应。
-
复制字段值
-
将以下信息复制到文本文档中:
SK
sk.com
- NTLM Server Challenge字段(通常位于NTLM_Auth数据包之前,可以通过搜索过滤器“ntlmssp.ntlmserverchallenge”找到)
NTLM Server Challenge: 77534d575de5f632
83889cdf4d1336bd3cc92f23c94f1f6d
- 修改后的NTLMv2响应(从NTLMv2的响应中删除ntlmProofStr后的部分)
010100000000000080a6da2b0464db012ad8e6c2d43a869c000000000200040053004b00010004004400430004000c0073006b002e0063006f006d0003001200440043002e0073006b002e0063006f006d0005000c0073006b002e0063006f006d00070008009dafb62b0464db01090036006c006400610070002f003100390032002e003100360038002e003100370039002e00310033003100400073006b002e0063006f006d000000000000000000
将密码导入NTLMSSP
在最后一个GSS-API的Payload中可以看到是在修改Administrator的密码。结合编码规则:https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/6e803168-f140-4d23-b2d3-c3a8ab5917d2
得到账户的密码是02)78M5CcE=+
0df]&CN=Administrator,CN=Users,DC=sk,DC=com0301
0,
unicodePwd1"02)78M5CcE=+"
这样就拿到了用户Administrator的密码,之后都是使用Administrator用户进行Kerberos认证的。那我们制作Administrator用户的keytab就可以解密DCERPC流量了。 这里使用Create-KeyTab工具制作。
将制作完的keytab导入krb5即可解密DCERPC流量
找到TGS-REP里面的SessionKey和SMB2 Response里面的SessionID
这里需要对Kerberos协议认证过程非常之熟悉。
上边这一步有些坑,要复制16进制流,不能复制它显示出来的值
找到的sessionkey和sessionid如下
Session ID |
Session Key |
帧 |
5100000800180000 |
38da7bd9fdba2dd52ce2d670e59d4984 |
65 |
5500000800180000 |
78e3e3f1559813f7286374a816b99862 |
219 |
5900000800180000 |
438eb94d0c8dc85f658edefd2470197f |
263 |
6500000800180000 |
b97c4cc93e3a424aacccd4dafba3ceca |
310 |
6900000800180000 |
b40ccbe618c34a3c54716ac5ba14408d |
375 |
1100000c00180000 |
3c4276a33a529832163bb2b7d7e3db87 |
565 |
导入Wireshark解密SMB2协议流量
再导出SMB协议传输的文件
看到了心仪的对象“flag.zip”
导出来 发现有密码
继续往下看流量
发现了TaskSchedulerService 协议
导出这个xml
\NGNhFjsY<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<Triggers>
<CalendarTrigger>
<StartBoundary>2015-07-15T20:35:13.2757294</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="LocalSystem">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>true</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="LocalSystem">
<Exec>
<Command>cmd.exe</Command>
<Arguments>/C C:\Windows\7z.exe x -pwvnNDOLkjyXZ925aJ32x822dEe C:\Windows\flag.zip -y > %windir%\Temp\NGNhFjsY.tmp 2>&1</Arguments>
</Exec>
</Actions>
</Task>
发现其中存在一行命令
cmd.exe /C C:\Windows\7z.exe x -pwvnNDOLkjyXZ925aJ32x822dEe C:\Windows\flag.zip -y > %windir%\Temp\NGNhFjsY.tmp 2>&1
看到了压缩包密码wvnNDOLkjyXZ925aJ32x822dEe