Flask 内存马从初识到进阶 - 兼容新版 Flask 的内存马打法

💡 原文中文,约7000字,阅读约需17分钟。
📝

内容提要

本文探讨了如何利用 Flask 中的 SSTI 漏洞动态添加后门路由以执行命令。通过分析不同版本的 Flask,提供了兼容新版的 payload,简化了攻击过程,避免了反弹 shell 的复杂性,并使用 eval 执行代码注册后门路由。

🔎

延伸解读

Flask 版本兼容性问题

在使用 Flask 内存马时,需注意不同版本之间的兼容性。新版 Flask 对 app.add_url_rule 的调用限制,要求在处理第一个请求前完成路由注册。这意味着攻击者需要对 Flask 的内部机制有深入了解,以避免因版本不兼容而导致的攻击失败。

动态路由的风险

动态添加后门路由虽然简化了攻击过程,但也带来了潜在风险。攻击者必须确保 payload 的有效性和隐蔽性,避免被 WAF 等安全机制检测到。此外,使用 eval 执行代码可能引发安全隐患,需谨慎处理输入参数,防止注入攻击。

环境限制与反弹 shell 的复杂性

反弹 shell 的实现通常受到网络环境和服务器配置的限制,尤其是在 Docker 等隔离环境中。因此,利用内存马的方式可以绕过这些限制,直接在 Flask 应用中执行命令,降低了攻击的复杂性和失败风险。

Q&A

Flask 中的 SSTI 漏洞是什么?

SSTI 漏洞是指在 Flask 应用中,攻击者可以利用模板引擎的特性执行任意代码,从而动态添加后门路由以执行命令。

如何在 Flask 中动态添加后门路由?

可以通过 SSTI 或其他 RCE 漏洞,使用 eval 执行代码,调用 app.add_url_rule 动态添加后门路由。

新版 Flask 中使用内存马的限制是什么?

在新版 Flask 中,app.add_url_rule 不能在处理第一个请求后调用,需要将 app._got_first_request 修改为 False 才能继续添加新的路由。

如何编写兼容新版 Flask 的 payload?

可以使用 gc 模块遍历 Python 中的所有对象找到 app 对象,并通过 eval 执行代码注册后门路由,确保 payload 兼容性。

使用内存马的主要优势是什么?

使用内存马可以避免反弹 shell 的复杂性,不需要公网服务器,直接在 Flask 服务端执行命令。

如何绕过 WAF 生成 payload?

可以使用 fenjing 工具生成绕过 WAF 的 payload,通过定义黑名单关键字来避免被检测。

🏷️

标签

➡️

继续阅读