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

基本信息

不同的漏洞,如 Python Format StringsClass Pollution,可能允许你 读取 Python 内部数据,但不允许你执行代码。因此,渗透测试人员需要充分利用这些读取权限,以 获取敏感权限并升级漏洞

Flask - 读取密钥

Flask 应用程序的主页面可能会有 app 全局对象,在这里 配置了这个密钥

python
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'

在这种情况下,可以使用任何小工具来访问全局对象,来自绕过 Python 沙箱页面

漏洞位于不同的 Python 文件的情况下,您需要一个小工具来遍历文件,以便到达主文件,访问全局对象 app.secret_key,以更改 Flask 秘钥并能够提升权限,知道这个密钥

像这样的有效载荷来自这篇文章

python
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key

使用此有效载荷来更改 app.secret_key(您应用中的名称可能不同),以便能够签署新的和更高权限的 flask cookies。

Werkzeug - machine_id 和 node uuid

使用此写作中的有效载荷,您将能够访问machine_iduuid节点,这些是您需要的主要秘密,以生成 Werkzeug pin,您可以在调试模式启用时使用它访问 /console 的 python 控制台:

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