Python Internal Read Gadgets

Reading time: 3 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Основна інформація

Різні вразливості, такі як Python Format Strings або Class 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

Використовуйте цей payload, щоб змінити app.secret_key (ім'я у вашому додатку може бути іншим), щоб мати можливість підписувати нові та більш привілейовані flask cookies.

Werkzeug - machine_id та node uuid

Використовуючи ці payload з цього опису ви зможете отримати доступ до machine_id та uuid node, які є основними секретами, необхідними для генерації Werkzeug pin, який ви можете використовувати для доступу до 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.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks