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

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

内容提要

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

🎯

关键要点

  • 本文探讨如何利用 Flask 中的 SSTI 漏洞动态添加后门路由以执行命令。

  • 反弹 shell 复杂性高,且需要公网服务器,常常受到环境限制。

  • 内存马是动态修改 Flask 服务端逻辑,添加后门路由以执行命令。

  • 可以通过 SSTI 或其他 RCE 漏洞,使用 eval 执行代码注册后门路由。

  • Flask 的路由表可以在运行时动态修改,使用 app.add_url_rule 添加路由。

  • 新版 Flask 中,app.add_url_rule 不能在处理第一个请求后调用。

  • 需要将 app._got_first_request 修改为 False,以便继续添加新的路由。

  • 编写 payload 时,可以使用 gc 模块遍历 Python 中的所有对象以找到 app 对象。

  • payload 可以通过 eval 执行,支持 SSTI 和其他方式。

  • 提供了一个压缩的 payload 示例,加载时会延时 3 秒以确认成功。

  • 可以使用 fenjing 生成绕过 WAF 的 payload。

  • 本文仅供技术研究与讨论,严禁用于非法用途,违者后果自负。

🔎

延伸解读

Flask 版本兼容性问题

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

动态路由的风险

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

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

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

延伸问答

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,通过定义黑名单关键字来避免被检测。

🏷️

标签

➡️

继续阅读