mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
39 lines
3.8 KiB
Markdown
39 lines
3.8 KiB
Markdown
# Python Internal Read Gadgets
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## Основна інформація
|
||
|
||
Різні вразливості, такі як [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) або [**Class Pollution**](class-pollution-pythons-prototype-pollution.md), можуть дозволити вам **читати внутрішні дані python, але не дозволять виконувати код**. Тому, пентестер повинен максимально використати ці дозволи на читання, щоб **отримати чутливі привілеї та ескалувати вразливість**.
|
||
|
||
### Flask - Читання секретного ключа
|
||
|
||
Головна сторінка додатку Flask, ймовірно, міститиме глобальний об'єкт **`app`**, де цей **секрет налаштовано**.
|
||
```python
|
||
app = Flask(__name__, template_folder='templates')
|
||
app.secret_key = '(:secret:)'
|
||
```
|
||
У цьому випадку можливо отримати доступ до цього об'єкта, просто використовуючи будь-який гаджет для **доступу до глобальних об'єктів** з [**сторінки обходу пісочниць Python**](bypass-python-sandboxes/index.html).
|
||
|
||
У випадку, коли **вразливість знаходиться в іншому файлі python**, вам потрібен гаджет для переходу між файлами, щоб дістатися до основного, щоб **отримати доступ до глобального об'єкта `app.secret_key`**, щоб змінити секретний ключ Flask і мати можливість [**підвищити привілеї** знаючи цей ключ](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
|
||
|
||
Пейлоад, подібний до цього [з цього опису](https://ctftime.org/writeup/36082):
|
||
```python
|
||
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
|
||
```
|
||
Використовуйте цей payload, щоб **змінити `app.secret_key`** (ім'я у вашому додатку може бути іншим), щоб мати можливість підписувати нові та більш привілейовані flask cookies.
|
||
|
||
### Werkzeug - machine_id та node uuid
|
||
|
||
[**Використовуючи ці payload з цього опису**](https://vozec.fr/writeups/tweedle-dum-dee/) ви зможете отримати доступ до **machine_id** та **uuid** node, які є **основними секретами**, необхідними для [**генерації Werkzeug pin**](../../network-services-pentesting/pentesting-web/werkzeug.md), який ви можете використовувати для доступу до python консолі в `/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.
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|