hacktricks/generic-methodologies-and-resources/python/python-internal-read-gadgets.md

4.4 KiB
Raw Blame History

Python内部读取工具

{% hint style="success" %} 学习并练习AWS黑客技术HackTricks培训AWS红队专家ARTE
学习并练习GCP黑客技术HackTricks培训GCP红队专家GRTE

支持HackTricks
{% endhint %}

基本信息

不同的漏洞,如Python格式字符串类污染可能允许您读取Python内部数据但不允许您执行代码。因此,渗透测试人员需要充分利用这些读取权限来获取敏感权限并升级漏洞

Flask - 读取密钥

Flask应用程序的主页可能有**app全局对象,其中配置了密钥**。

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

在这种情况下,可以使用任何小工具来从Bypass Python sandboxes page访问全局对象。

漏洞存在于不同的Python文件中的情况下,您需要一个小工具来遍历文件以找到主文件,以访问全局对象app.secret_key从而更改Flask密钥并能够利用此密钥升级权限

像这样的有效负载来自这篇解密文章:

{% code overflow="wrap" %}

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

{% endcode %}

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

Werkzeug - machine_id 和 node uuid

使用此 writeup 中的有效负载,您将能够访问 machine_iduuid 节点,这是您需要的主要秘密,以便生成 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}

{% hint style="warning" %} 请注意,您可以通过在网页中生成一些错误来获取app.py服务器本地路径,这将提供给您路径。 {% endhint %}

如果漏洞存在于不同的Python文件中请检查以前的Flask技巧以访问主Python文件中的对象。

{% hint style="success" %} 学习并实践AWS HackingHackTricks培训AWS红队专家ARTE
学习并实践GCP HackingHackTricks培训GCP红队专家GRTE

支持HackTricks
{% endhint %}