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

➡️

继续阅读