disable_functions bypass - dl function
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nota importante:
dl
è una funzione PHP che può essere utilizzata per caricare estensioni PHP. Se la funzione non è disabilitata, potrebbe essere abusata per bypassare disable_functions
ed eseguire comandi arbitrari.
Tuttavia, ha alcune limitazioni rigorose:
La funzione dl
deve essere presente nell'ambiente e non disabilitata
L'estensione PHP deve essere compilata con la stessa versione principale (versione API PHP) che il server sta utilizzando (puoi vedere queste informazioni nell'output di phpinfo)
L'estensione PHP deve trovarsi nella directory che è definita dalla direttiva extension_dir
(puoi vederla nell'output di phpinfo). È molto improbabile che un attaccante che cerca di abusare del server abbia accesso in scrittura su questa directory, quindi questo requisito probabilmente ti impedirà di abusare di questa tecnica).
Se soddisfi questi requisiti, continua a leggere il post https://antichat.com/threads/70763/ per imparare come bypassare disable_functions. Ecco un riepilogo:
La funzione dl viene utilizzata per caricare dinamicamente le estensioni PHP durante l'esecuzione dello script. Le estensioni PHP, tipicamente scritte in C/C++, migliorano la funzionalità di PHP. L'attaccante, notando che la funzione dl
non è disabilitata, decide di creare un'estensione PHP personalizzata per eseguire comandi di sistema.
Identificazione della versione PHP:
L'attaccante determina la versione PHP utilizzando uno script (<?php echo 'PHP Version is '.PHP_VERSION; ?>
).
Acquisizione del sorgente PHP:
Scarica il sorgente PHP dal sito ufficiale di PHP o dall'archivio se la versione è più vecchia.
Impostazione locale di PHP:
Estrae e installa la specifica versione di PHP sul proprio sistema.
Creazione dell'estensione:
Studia come creare estensioni PHP e ispeziona il codice sorgente di PHP.
Si concentra sulla duplicazione della funzionalità della funzione exec situata in ext/standard/exec.c
.
ZEND_MODULE_API_NO:
Il ZEND_MODULE_API_NO
in bypass.c
deve corrispondere all'attuale Build dell'estensione Zend, recuperabile con:
Modifica di PHP_FUNCTION:
Per le versioni recenti di PHP (5, 7, 8), PHP_FUNCTION(bypass_exec)
potrebbe necessitare di aggiustamenti. Il frammento di codice fornito dettaglia questa modifica.
bypass.c:
Implementa la funzionalità principale dell'estensione personalizzata.
php_bypass.h:
File di intestazione, definendo le proprietà dell'estensione.
config.m4:
Utilizzato da phpize
per configurare l'ambiente di build per l'estensione personalizzata.
Comandi di compilazione:
Utilizza phpize
, ./configure
e make
per compilare l'estensione.
Il risultato bypass.so
si trova quindi nella sottodirectory dei moduli.
Pulizia:
Esegue make clean
e phpize --clean
dopo la compilazione.
Compatibilità della versione:
Assicura che le versioni API PHP corrispondano tra i sistemi dell'attaccante e della vittima.
Caricamento dell'estensione:
Utilizza la funzione dl
, eludendo le restrizioni utilizzando percorsi relativi o uno script per automatizzare il processo.
Esecuzione dello script:
L'attaccante carica bypass.so
e uno script PHP sul server della vittima.
Lo script utilizza la funzione dl_local
per caricare dinamicamente bypass.so
e poi chiama bypass_exec
con un comando passato tramite il parametro di query cmd
.
L'attaccante può ora eseguire comandi accedendo a: http://www.example.com/script.php?cmd=<command>
Questo dettagliato walkthrough delinea il processo di creazione e distribuzione di un'estensione PHP per eseguire comandi di sistema, sfruttando la funzione dl
, che dovrebbe idealmente essere disabilitata per prevenire tali violazioni della sicurezza.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)