[GWCTF 2019]你的名字 - SSTI注入(waf绕过)

[GWCTF 2019]你的名字

  • 1 解题流程
    • 1.1 分析
    • 1.2 解题
  • 2 思考总结

[GWCTF 2019]你的名字 - SSTI注入(waf绕过)_第1张图片

1 解题流程

1.1 分析

1、页面只有一个输入框,输入什么回显什么
2、根据特性应该是SSTI注入

1.2 解题

  1. 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,则返回空,说明全被过滤了,这也印证了我的猜测。
  2. 构造ssti代码
    采用最后一种形式去过滤,因为比较简单
    {%print().__clconfigass__.__baconfigse__.__subclaconfigsses__()[250].__inconfigit__.__globalconfigs__['oconfigs'].poconfigpen('env').read()%}
    [GWCTF 2019]你的名字 - SSTI注入(waf绕过)_第2张图片

2 思考总结

1、这题的开头,如果class是以’'或""来取基类的话,那么后续只会存在unicode回显;所以采用()或[]来取。
2、这题python版本是2.7.18,这版本直接在globals下用popen是非法的
3、这题flag存在env中,我只是直接列出了最终的payload,此前还包括ls /cat /f*等操作

你可能感兴趣的:(CTF-WEB,web安全,安全,ctf,SSTI,flask,python)