Questa tecnica consiste nel dirottamento di una libreria python per eseguire comandi arbitrari. Sostanzialmente siccome python quando va a cercare una libreria nel computer utilizza un PATH (esattamente come fa Linux per cercare eseguibili) ed essendo che cerca da sinistra a destra la prima cartella in cui lo andrà a cercare sarà proprio quella in cui è presente il main del file di python in questione, quindi se noi abbiamo il permesso di scrittura in quella cartella, ma per esempio non abbiamo il permesso di scrittura sul file python possiamo ingannare python creandoci un file con il nome di una libreria del file stesso di python per esempio hashlib e all’interno di esso scrivere un codice malevolo che ci permetta di eseguire quello che vogliamo come per esempio:
import os
os.system("bash -p")Quindi siccome python andrà a cercare la libreria nel file PATH e la prima cartella nella quale cercherà sarà proprio quella dove è contenuto il file main e nella quale noi abbiamo messo il nostro file malevolo con il nome di hashlib.py python al posto che trovare la libreria corretta troverà la nostra e la eseguirà.
Questo lavoro lo si può anche fare con una cartella del PATH nella quale abbiamo permesso di scrittura a patto che sia precedente alla cartella nella quale è presente la libreria legittima, cioè deve essere più a sinistra della cartella contenente la libreria originale e siccome Linux cerca da sinistra a destra deve essere più a sinistra del file legittimo.
Per vedere le librerie presenti nella macchina possiamo utilizzare uno dei seguenti comandi:
python3
Python 3.12.6 (main, Sep 7 2024, 14:20:15) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/usr/local/lib/python3.12/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.12/dist-packages']
Oppure un oneliner:
python -c 'import sys; print(sys.path)'Come puoi vedere da questo output la prima cartella è ’ ’ proprio perchè è quella dove è contenuto il file.
Per vedere il percorso di una libreria specifica possiamo utilizzare locate con la libreria specifica come nel nostro caso:
locate hashlib.py