CSAW CTF 2017-Shia Labeouf-off-writeup
SSTI Django-debug
根据wp复现。
Task
|
|
Solution
用awvs扫了一下,发现Django的debug模式没有关闭
比如访问: http://web.chal.csaw.io:5487/polls/4/ ,给出的DEBUG页面里有很多重要的信息。
./polls/views.py
:
./polls/templatetags/pools_extras.py
:
在 http://web.chal.csaw.io:5487/ad-lib/ 页面存在SSTI漏洞。由于Django的DEBUG模式开启,模板会存在内置的tab;\{\% debug \%\}
:
它会输出页面的debug信息,包括当前的上下文和导入的模块。
对比前面的:
会注意到一个与众不同的变量/模块mrpoopy
。
考虑到前面我们通过报错获取到的部分代码,在./polls/templatetags/pools_extras.py
中,有这样一个过滤器:
当我们传入的变量为:mrpoopy | listme
,
后端会调用dir(mrpoopy)
并返回。
在./polls/templatetags/pools_extras.py
,还有另外一个过滤器:
当我们传入:\{\{mrpoopy|getme:"__flag__"\}\}
,
经过过滤器,会调用getme(mrpoopy,"__flag__")
,也就是调用getattr(mrpoopy,"__flag__")
,从而返回mrpoopy的__flag__
属性的值。