mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
39 lines
2.6 KiB
Markdown
39 lines
2.6 KiB
Markdown
# Python Internal Read Gadgets
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## Osnovne informacije
|
|
|
|
Različite ranjivosti kao što su [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) ili [**Class Pollution**](class-pollution-pythons-prototype-pollution.md) mogu vam omogućiti da **pročitate interne podatke u Pythonu, ali neće vam omogućiti da izvršite kod**. Stoga, pentester će morati da iskoristi ova prava čitanja da **dobije osetljive privilegije i eskalira ranjivost**.
|
|
|
|
### Flask - Pročitajte tajni ključ
|
|
|
|
Glavna stranica Flask aplikacije verovatno će imati **`app`** globalni objekat gde je ovaj **tajni ključ konfigurisan**.
|
|
```python
|
|
app = Flask(__name__, template_folder='templates')
|
|
app.secret_key = '(:secret:)'
|
|
```
|
|
U ovom slučaju je moguće pristupiti ovom objektu koristeći bilo koji gadget za **pristup globalnim objektima** sa [**strane za zaobilaženje Python sandboxes**](bypass-python-sandboxes/index.html).
|
|
|
|
U slučaju kada **je ranjivost u drugom python fajlu**, potreban vam je gadget za pretraživanje fajlova kako biste došli do glavnog da **pristupite globalnom objektu `app.secret_key`** kako biste promenili Flask tajni ključ i mogli da [**povećate privilegije** znajući ovaj ključ](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
|
|
|
|
Payload poput ovog [iz ovog izveštaja](https://ctftime.org/writeup/36082):
|
|
```python
|
|
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
|
|
```
|
|
Koristite ovaj payload da **promenite `app.secret_key`** (ime u vašoj aplikaciji može biti drugačije) kako biste mogli da potpišete nove i privilegovanije flask kolačiće.
|
|
|
|
### Werkzeug - machine_id i node uuid
|
|
|
|
[**Koristeći ove payload-ove iz ovog izveštaja**](https://vozec.fr/writeups/tweedle-dum-dee/) moći ćete da pristupite **machine_id** i **uuid** node, koji su **glavne tajne** koje su vam potrebne da [**generišete Werkzeug pin**](../../network-services-pentesting/pentesting-web/werkzeug.md) koji možete koristiti za pristup python konzoli u `/console` ako je **debug mode omogućen:**
|
|
```python
|
|
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
|
|
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
|
|
```
|
|
> [!WARNING]
|
|
> Imajte na umu da možete dobiti **lokalnu putanju servera do `app.py`** generišući neku **grešku** na veb stranici koja će **dati putanju**.
|
|
|
|
Ako je ranjivost u drugom python fajlu, proverite prethodni Flask trik za pristup objektima iz glavnog python fajla.
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|