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__属性的值。