Python——flask漏洞探究
python的用途是真的多,就连网站也能做,这个有点像Java的Servlet
1|0flask基础
1|1hello world
我们先从基础的开始,在网页上打出hello world
,python代码如下:
其中@app.route
就有点类似于Java的@WebServlet
了,上述代码中,当你在浏览器访问127.0.0.1:5000/
时就能够看到输出了,5000是flask的默认端口
1|2模板
flask使用的渲染引擎是Jinja2
,我们可以直接return一些HTML代码来实现网页的格式化,但是这样会导致XSS漏洞,如下
methods
传参表示/
仅接受GET,POST
类型的传参,这里我们接受了名为test
的GET
传参然后替换了html
中的%s,当我们在网页中传参<script>alert(1)</script>
就可以看到引起了XSS注入
render_template_string
为了避免XSS,可以使用render_tempplate_string对输入的文本进行渲染,代码如下
{{}}
为变量包裹标示符,在render_template_string
传参即可替换{{var}}
为GET传参变量test
,再次进行XSS实验,可以看到已经被转义了
render_template
在py文件中写HTML有点麻烦,不直观。在flask中就有一种叫做模板的东西,我们可以借助render_template
从templates文件夹中加载我们想要的html文件,然后对里面的内容进行修改输出。首先我在templates中放入这样的一个index.html
:
index.py
代码如下:
可以理解为我使用render_template
函数引用了templates
文件夹下面的index.html
模板,然后传入一个参数var
,用来控制模板中的{{var}},我们再到浏览器中看看
可以看到{{var}}已经被替换成了test
,当我们传入XSS语句时是不会执行的,他同样会自动渲染
1|3SSTI文件读取/命令执行
SSTI(Server-Side Template Injection) 服务端模板注入,就是服务器模板中拼接了恶意用户输入导致各种漏洞。通过模板,Web应用可以把输入转换成特定的HTML文件或者email格式
在Jinja2引擎中,{{}}
不仅仅是变量标示符,也能执行一些简单的表达式,产生该漏洞的代码如下
当我们传入?test={{7*7}},神奇的事情发生了
接下来我在演示介绍一下如何利用这个漏洞实现文件读写和命令执行,其大致思路如下
读取文件
- 获取
’‘
的类对象
- 追溯继承树
可以看到object
已经出来了
- 继而向下查找
object
的子类
耐心找一下,可以找到第40个为<type> 'file'
- 执行命令
执行完这条命令就能得到passwd
文件了
写入文件
写入文件的方法和上面类似
执行命令
执行命令有很多种方法,这里要找的是<class 'site._Printer'>
,找一下,在第71个,那么我们执行命令
这样就可以加载到os模块并执行ls命令,命令执行结果方法不唯一,payload也不一定一致,但思路大体就是这样了
__EOF__

本文链接:https://www.cnblogs.com/Rasang/p/12181654.html
关于博主:立志用功,如种树然。方其根芽,犹未有干;及其有干,尚未有枝。枝而后叶,叶而后花、实。初种根时,只管栽培灌溉,勿作枝想,勿作叶想,勿作花想,勿作实想。悬想何益?但不忘栽培之功,怕没有枝叶花实?
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通