打开题目
整理源码
代码审计: 目标 config['FLAG']
过滤了 config,self 这两个函数的过滤没看懂,总之好像也没过滤掉(应该是过滤了后面的变量),圆括号是彻底的被过滤掉了,URL编码都没用(刚开始想测试XSS来着)
做完后,拿编译器跑了一下带config的payload也没发现过滤
回归正题
2个@app.route 为路由 第一个是 / 使用URL/ 可访问index()也就是刚刚开始显示的源码
第二个为/shrine/ 这个路由用法同理 URL/shrine/payload
使用模板注入试试看会不会解析出来
可以解析到,说明存在注入
吃老本了,使用Python内置函数读取全局变量 url_for或者get_flashed_messages
url/shrine/{{url_for.__globals__}}
看到了属性的东西,代码审计的时候有 app.config['FLAG']
调用这个函数 看了其他师傅的WP对这步的解释是 :
python沙箱逃逸的方法是 利用python对象之间的引用关系来调用被禁用的函数对象
构造payloads: /shrine/{{url_for.__globals__['current_app'].config['FLAG']}}
得到flag
flag{shrine_is_good_ssti}
另外一个方法 get_flashed_messages利用信息闪现的方法构造一样(只能显示一次)
Ending