From 066aec4e387068bac68630d9d899cf7018586ab8 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 May 2025 03:21:43 +0000 Subject: [PATCH] Translated ['src/pentesting-web/hacking-with-cookies/README.md'] to sr --- .../hacking-with-cookies/README.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/pentesting-web/hacking-with-cookies/README.md b/src/pentesting-web/hacking-with-cookies/README.md index 430be3c14..7b74dde4b 100644 --- a/src/pentesting-web/hacking-with-cookies/README.md +++ b/src/pentesting-web/hacking-with-cookies/README.md @@ -12,25 +12,25 @@ Datum isteka kolačića određuje atribut `Expires`. Nasuprot tome, atribut `Max ### Domen -Domaćini koji primaju kolačić određeni su atributom `Domain`. Podrazumevano, ovo je postavljeno na domaćina koji je izdao kolačić, ne uključujući njegove poddomenke. Međutim, kada je atribut `Domain` eksplicitno postavljen, obuhvata i poddomenke. Ovo čini specifikaciju atributa `Domain` manje restriktivnom opcijom, korisnom za scenarije gde je deljenje kolačića preko poddomenki neophodno. Na primer, postavljanje `Domain=mozilla.org` čini kolačiće dostupnim na njegovim poddomenkama kao što je `developer.mozilla.org`. +Domaćini koji primaju kolačić su određeni atributom `Domain`. Podrazumevano, ovo je postavljeno na domaćina koji je izdao kolačić, ne uključujući njegove poddomenke. Međutim, kada je atribut `Domain` eksplicitno postavljen, obuhvata i poddomenke. Ovo čini specifikaciju atributa `Domain` manje restriktivnom opcijom, korisnom za scenarije gde je deljenje kolačića između poddomenki neophodno. Na primer, postavljanje `Domain=mozilla.org` čini kolačiće dostupnim na njegovim poddomenama kao što je `developer.mozilla.org`. ### Putanja -Specifična URL putanja koja mora biti prisutna u zahtevu URL-a da bi se `Cookie` zaglavlje poslalo označena je atributom `Path`. Ovaj atribut smatra karakter `/` kao separator direktorijuma, omogućavajući podudaranja u poddirektorijumima. +Specifična URL putanja koja mora biti prisutna u zahtevanom URL-u da bi `Cookie` zaglavlje bilo poslato označena je atributom `Path`. Ovaj atribut smatra karakter `/` kao separator direktorijuma, omogućavajući podudaranja u poddirektorijumima. ### Pravila Redosleda -Kada dva kolačića imaju isto ime, onaj koji se bira za slanje zasniva se na: +Kada dva kolačića imaju isto ime, onaj koji je izabran za slanje zasniva se na: -- Kolačiću koji se podudara sa najdužom putanjom u zahtevu URL-a. +- Kolačiću koji se podudara sa najdužom putanjom u zahtevanom URL-u. - Najnovije postavljenom kolačiću ako su putanje identične. ### SameSite -- Atribut `SameSite` određuje da li se kolačići šalju na zahteve koji potiču sa domena trećih strana. Nudi tri podešavanja: +- Atribut `SameSite` određuje da li se kolačići šalju na zahteve koji potiču sa trećih domena. Nudi tri podešavanja: - **Strict**: Ograničava kolačić da se ne šalje na zahteve trećih strana. - **Lax**: Omogućava kolačiću da se šalje sa GET zahtevima koje pokreću veb sajtovi trećih strana. -- **None**: Dozvoljava kolačiću da se šalje sa bilo kog domena treće strane. +- **None**: Dozvoljava kolačiću da se šalje sa bilo kog trećeg domena. Zapamtite, dok konfigurišete kolačiće, razumevanje ovih atributa može pomoći da se osigura da se ponašaju kako se očekuje u različitim scenarijima. @@ -47,7 +47,7 @@ Zapamtite, dok konfigurišete kolačiće, razumevanje ovih atributa može pomoć Tabela iz [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) i malo izmenjena.\ Kolačić sa _**SameSite**_ atributom će **ublažiti CSRF napade** gde je potrebna prijavljena sesija. -**\*Napomena da od Chrome80 (feb/2019) podrazumevano ponašanje kolačića bez samesite** **atributa će biti lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\ +**\*Napomena da od Chrome80 (feb/2019) podrazumevano ponašanje kolačića bez SameSite** **atributa će biti lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\ Napomena da će privremeno, nakon primene ove promene, **kolačići bez SameSite** **politike** u Chrome-u biti **tretirani kao None** tokom **prvih 2 minuta, a zatim kao Lax za POST zahtev na vrhunskom nivou između sajtova.** ## Zastavice Kolačića @@ -59,10 +59,10 @@ Ovo sprečava **klijenta** da pristupi kolačiću (putem **JavaScript-a**, na pr #### **Obilaženja** - Ako stranica **šalje kolačiće kao odgovor** na zahteve (na primer, na **PHPinfo** stranici), moguće je zloupotrebiti XSS da se pošalje zahtev na ovu stranicu i **ukrade kolačiće** iz odgovora (proverite primer u [https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/)). -- Ovo se može zaobići sa **TRACE** **HTTP** zahtevima jer će odgovor servera (ako je ova HTTP metoda dostupna) odražavati poslate kolačiće. Ova tehnika se naziva **Cross-Site Tracking**. +- Ovo se može zaobići sa **TRACE** **HTTP** zahtevima jer će odgovor servera (ako je ova HTTP metoda dostupna) odražavati poslata kolačiće. Ova tehnika se naziva **Cross-Site Tracking**. - Ova tehnika se izbegava od strane **modernih pretraživača koji ne dozvoljavaju slanje TRACE** zahteva iz JS-a. Međutim, neka obilaženja su pronađena u specifičnom softveru kao što je slanje `\r\nTRACE` umesto `TRACE` u IE6.0 SP2. -- Drugi način je iskorišćavanje zero/day ranjivosti pretraživača. -- Moguće je **prepisati HttpOnly kolačiće** izvođenjem napada na Cookie Jar overflow: +- Drugi način je iskorišćavanje zero-day ranjivosti pretraživača. +- Moguće je **prepisati HttpOnly kolačiće** izvođenjem napada Cookie Jar overflow: {{#ref}} cookie-jar-overflow.md @@ -111,7 +111,7 @@ Ovaj napad uključuje krađu korisničkog kolačića kako bi se dobio neovlašć ### Fiksacija Sesije -U ovom scenariju, napadač prevari žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeli novi kolačić prilikom prijave, napadač, koji poseduje originalni kolačić, može se predstaviti kao žrtva. Ova tehnika se oslanja na to da se žrtva prijavi sa kolačićem koji je obezbedio napadač. +U ovom scenariju, napadač prevari žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeli novi kolačić prilikom prijave, napadač, posedujući originalni kolačić, može se predstaviti kao žrtva. Ova tehnika se oslanja na to da žrtva prijavi sa kolačićem koji je obezbedio napadač. Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte: @@ -165,21 +165,21 @@ document.cookie = "\ud800=meep" ``` Ovo rezultira time da `document.cookie` ispisuje prazan string, što ukazuje na trajnu korupciju. -#### Prevara sa kolačićima zbog problema sa parsiranjem +#### Krađa kolačića zbog problema sa parsiranjem -(Pogledajte dalje detalje u[originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Nekoliko veb servera, uključujući one iz Jave (Jetty, TomCat, Undertow) i Pythona (Zope, cherrypy, web.py, aiohttp, bottle, webob), pogrešno obrađuju stringove kolačića zbog zastarele podrške za RFC2965. Oni čitaju vrednost kolačića u dvostrukim navodnicima kao jednu vrednost čak i ako uključuje tačke-zareze, koje bi obično trebale da razdvajaju parove ključ-vrednost: +(Pogledajte dalje detalje u[originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Nekoliko veb servera, uključujući one iz Jave (Jetty, TomCat, Undertow) i Pythona (Zope, cherrypy, web.py, aiohttp, bottle, webob), pogrešno obrađuju stringove kolačića zbog zastarele podrške za RFC2965. Oni čitaju vrednost kolačića u dvostrukim navodnicima kao jednu vrednost čak i ako uključuje tačke i zareze, koji bi obično trebali da razdvajaju parove ključ-vrednost: ``` RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; ``` #### Cookie Injection Vulnerabilities -(Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) Neispravno parsiranje kolačića od strane servera, posebno Undertow, Zope, i onih koji koriste Pythonov `http.cookie.SimpleCookie` i `http.cookie.BaseCookie`, stvara prilike za napade putem injekcije kolačića. Ovi serveri ne uspevaju da pravilno odvoje početak novih kolačića, omogućavajući napadačima da lažiraju kolačiće: +(Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) Neispravno parsiranje kolačića od strane servera, posebno Undertow, Zope, i onih koji koriste Pythonov `http.cookie.SimpleCookie` i `http.cookie.BaseCookie`, stvara mogućnosti za napade putem injekcije kolačića. Ovi serveri ne uspevaju pravilno da odvoje početak novih kolačića, omogućavajući napadačima da lažiraju kolačiće: - Undertow očekuje novi kolačić odmah nakon citirane vrednosti bez tačke-zareza. - Zope traži zarez da započne parsiranje sledećeg kolačića. -- Pythonove klase kolačića započinju parsiranje na razmaku. +- Pythonove klase kolačića započinju parsiranje na razmak. -Ova ranjivost je posebno opasna u web aplikacijama koje se oslanjaju na CSRF zaštitu zasnovanu na kolačićima, jer omogućava napadačima da ubace lažirane CSRF-token kolačiće, potencijalno zaobilazeći bezbednosne mere. Problem se dodatno pogoršava načinom na koji Python obrađuje duple nazive kolačića, gde poslednja pojava preuzima prethodne. Takođe, postavlja zabrinutosti za `__Secure-` i `__Host-` kolačiće u nesigurnim kontekstima i može dovesti do zaobilaženja autorizacije kada se kolačići proslede back-end serverima koji su podložni lažiranju. +Ova ranjivost je posebno opasna u web aplikacijama koje se oslanjaju na CSRF zaštitu zasnovanu na kolačićima, jer omogućava napadačima da ubace lažirane CSRF-token kolačiće, potencijalno zaobilazeći bezbednosne mere. Problem se dodatno pogoršava načinom na koji Python obrađuje duple nazive kolačića, gde poslednja pojava preuzima prethodne. Takođe, postavlja zabrinutosti za `__Secure-` i `__Host-` kolačiće u nesigurnim kontekstima i može dovesti do zaobilaženja autorizacije kada se kolačići proslede back-end serverima podložnim lažiranju. ### Cookies $version @@ -212,18 +212,18 @@ Proverite prethodnu sekciju. #### Bypassing value analysis with quoted-string encoding -Ova analiza ukazuje na to da se neizbežene vrednosti unutar kolačića moraju osloboditi, tako da "\a" postaje "a". Ovo može biti korisno za zaobilaženje WAFS-a kao: +Ova analiza ukazuje na to da se neizbežene vrednosti unutar kolačića moraju ponovo obraditi, tako da "\a" postaje "a". Ovo može biti korisno za zaobilaženje WAFS-a kao: - `eval('test') => forbidden` - `"\e\v\a\l\(\'\t\e\s\t\'\)" => allowed` #### Bypassing cookie-name blocklists -U RFC2109 je naznačeno da se **zarez može koristiti kao razdvojnik između vrednosti kolačića**. Takođe je moguće dodati **razmake i tabove pre i posle znaka jednakosti**. Stoga kolačić poput `$Version=1; foo=bar, abc = qux` ne generiše kolačić `"foo":"bar, admin = qux"` već kolačiće `foo":"bar"` i `"admin":"qux"`. Obratite pažnju na to kako su generisana 2 kolačića i kako je adminu uklonjen razmak pre i posle znaka jednakosti. +U RFC2109 je naznačeno da se **zarez može koristiti kao razdvojnik između vrednosti kolačića**. Takođe je moguće dodati **razmake i tabove pre i posle znaka jednakosti**. Stoga kolačić poput `$Version=1; foo=bar, abc = qux` ne generiše kolačić `"foo":"bar, admin = qux"` već kolačiće `foo":"bar"` i `"admin":"qux"`. Obratite pažnju na to kako su generisana 2 kolačića i kako je admin uklonio razmak pre i posle znaka jednakosti. #### Bypassing value analysis with cookie splitting -Na kraju, različiti backdoor-i bi se spojili u string različitih kolačića prosleđenih u različitim zaglavljima kolačića kao u: +Na kraju, različiti backdoor-ovi bi se spojili u string različitih kolačića prosleđenih u različitim zaglavljima kolačića kao u: ``` GET / HTTP/1.1 Host: example.com @@ -254,7 +254,7 @@ Resulting cookie: name=eval('test//, comment') => allowed Ako kolačić ostaje isti (ili gotovo isti) kada se prijavite, to verovatno znači da je kolačić povezan sa nekim poljem vašeg naloga (verovatno korisničkim imenom). Tada možete: - Pokušajte da kreirate mnogo **naloga** sa korisničkim imenima vrlo **sličnim** i pokušajte da **pogodite** kako algoritam funkcioniše. -- Pokušajte da **bruteforce-ujete korisničko ime**. Ako kolačić služi samo kao metoda autentifikacije za vaše korisničko ime, onda možete kreirati nalog sa korisničkim imenom "**Bmin**" i **bruteforce**-ovati svaki pojedinačni **bit** vašeg kolačića jer će jedan od kolačića koje ćete pokušati biti onaj koji pripada "**admin**". +- Pokušajte da **bruteforce-ujete korisničko ime**. Ako se kolačić čuva samo kao metoda autentifikacije za vaše korisničko ime, onda možete kreirati nalog sa korisničkim imenom "**Bmin**" i **bruteforce-ovati** svaki pojedinačni **bit** vašeg kolačića jer će jedan od kolačića koje ćete pokušati biti onaj koji pripada "**admin**". - Pokušajte **Padding** **Oracle** (možete dekriptovati sadržaj kolačića). Koristite **padbuster**. **Padding Oracle - Padbuster primeri** @@ -275,7 +275,7 @@ Ako je napad uspešno izveden, onda možete pokušati da enkriptujete string po ``` padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator ``` -Ova izvršenja će vam dati kolačić ispravno enkriptovan i kodiran sa stringom **user=administrator** unutra. +Ova izvršavanje će vam dati kolačić ispravno enkriptovan i kodiran sa stringom **user=administrator** unutra. **CBC-MAC** @@ -296,11 +296,11 @@ Kada se prijavite, kolačić koji dobijate mora uvek biti isti. Kreirajte 2 korisnika sa gotovo istim podacima (korisničko ime, lozinka, email, itd.) i pokušajte da otkrijete neki obrazac unutar datog kolačića. -Kreirajte korisnika pod imenom "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" i proverite da li postoji neki obrazac u kolačiću (pošto ECB enkriptuje sa istim ključem svaki blok, isti enkriptovani bajtovi mogu se pojaviti ako je korisničko ime enkriptovano). +Kreirajte korisnika nazvanog, na primer, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" i proverite da li postoji neki obrazac u kolačiću (pošto ECB enkriptuje sa istim ključem svaki blok, isti enkriptovani bajtovi mogu se pojaviti ako je korisničko ime enkriptovano). -Trebalo bi da postoji obrazac (sa veličinom korišćenog bloka). Tako, znajući kako je gomila "a" enkriptovana, možete kreirati korisničko ime: "a"\*(veličina bloka)+"admin". Tada biste mogli da obrišete enkriptovani obrazac jednog bloka "a" iz kolačića. I imaćete kolačić korisničkog imena "admin". +Trebalo bi da postoji obrazac (sa veličinom korišćenog bloka). Tako, znajući kako je gomila "a" enkriptovana, možete kreirati korisničko ime: "a"\*(veličina bloka)+"admin". Tada biste mogli da obrišete enkriptovani obrazac bloka "a" iz kolačića. I imaćete kolačić korisničkog imena "admin". -## Reference +## References - [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/) - [https://www.linkedin.com/posts/rickey-martin-24533653_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)