mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/domain-subdomain-takeover.md', 'src/pent
This commit is contained in:
parent
ab6f356daf
commit
16ad08d5da
@ -1,15 +1,15 @@
|
||||
# Preuzimanje domena/subdomena
|
||||
# Domain/Subdomain takeover
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Preuzimanje domena
|
||||
## Domain takeover
|
||||
|
||||
Ako otkrijete neku domenu (domain.tld) koja se **koristi od strane neke usluge unutar opsega** ali je **kompanija** **izgubila** **vlasništvo** nad njom, možete pokušati da je **registrujete** (ako je dovoljno jeftina) i obavestite kompaniju. Ako ova domena prima neku **osetljivu informaciju** poput sesijskog kolačića putem **GET** parametra ili u **Referer** headeru, to je sigurno **ranjivost**.
|
||||
Ako otkrijete neki domen (domain.tld) koji se **koristi od strane neke usluge unutar opsega** ali je **kompanija** **izgubila** **vlasništvo** nad njim, možete pokušati da ga **registrujete** (ako je dovoljno jeftin) i obavestite kompaniju. Ako ovaj domen prima neku **osetljivu informaciju** poput sesijskog kolačića putem **GET** parametra ili u **Referer** headeru, to je sigurno **ranjivost**.
|
||||
|
||||
### Preuzimanje subdomena
|
||||
### Subdomain takeover
|
||||
|
||||
Subdomena kompanije pokazuje na **uslugu treće strane sa imenom koje nije registrovano**. Ako možete **napraviti** **nalog** u ovoj **usluzi treće strane** i **registrujete** **ime** koje se koristi, možete izvršiti preuzimanje subdomena.
|
||||
Subdomen kompanije pokazuje na **uslugu treće strane sa imenom koje nije registrovano**. Ako možete **napraviti** **nalog** u ovoj **usluzi treće strane** i **registrujete** **ime** koje se koristi, možete izvršiti preuzimanje subdomena.
|
||||
|
||||
Postoji nekoliko alata sa rečnicima za proveru mogućih preuzimanja:
|
||||
|
||||
@ -27,55 +27,72 @@ Postoji nekoliko alata sa rečnicima za proveru mogućih preuzimanja:
|
||||
- [https://github.com/Stratus-Security/Subdominator](https://github.com/Stratus-Security/Subdominator)
|
||||
- [https://github.com/NImaism/takeit](https://github.com/NImaism/takeit)
|
||||
|
||||
### Generisanje preuzimanja subdomena putem DNS Wildcard
|
||||
### Subdomain Takeover Generation via DNS Wildcard
|
||||
|
||||
Kada se koristi DNS wildcard u domeni, svaka tražena subdomena te domene koja nema drugačiju adresu eksplicitno će biti **rešena na iste informacije**. Ovo može biti A IP adresa, CNAME...
|
||||
Kada se koristi DNS wildcard u domenu, svaki traženi subdomen tog domena koji nema drugačiju adresu eksplicitno će biti **rešavan na iste informacije**. Ovo može biti A IP adresa, CNAME...
|
||||
|
||||
Na primer, ako je `*.testing.com` wildcardovan na `1.1.1.1`. Tada će `not-existent.testing.com` pokazivati na `1.1.1.1`.
|
||||
|
||||
Međutim, ako umesto da pokazuje na IP adresu, sistemski administrator usmeri na **uslugu treće strane putem CNAME**, kao što je G**ithub subdomena** na primer (`sohomdatta1.github.io`). Napadač može **napraviti svoju stranicu treće strane** (u Gihubu u ovom slučaju) i reći da `something.testing.com` pokazuje tamo. Zato, **CNAME wildcard** će omogućiti napadaču da **generiše proizvoljne subdomene za domenu žrtve koje pokazuju na njegove stranice**.
|
||||
Međutim, ako umesto da pokazuje na IP adresu, sysadmin usmeri na **uslugu treće strane putem CNAME**, kao što je G**ithub subdomen** na primer (`sohomdatta1.github.io`). Napadač može **napraviti svoju stranicu treće strane** (u Gihubu u ovom slučaju) i reći da `something.testing.com` pokazuje tamo. Zato, **CNAME wildcard** će omogućiti napadaču da **generiše proizvoljne subdomene za domen žrtve koji pokazuju na njegove stranice**.
|
||||
|
||||
Možete pronaći primer ove ranjivosti u CTF izveštaju: [https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
|
||||
|
||||
## Iskorišćavanje preuzimanja subdomena
|
||||
## Exploiting a subdomain takeover
|
||||
|
||||
Preuzimanje subdomena je u suštini DNS spoofing za specifičnu domenu širom interneta, omogućavajući napadačima da postave A zapise za domenu, što dovodi do toga da pregledači prikazuju sadržaj sa napadačevog servera. Ova **transparentnost** u pregledačima čini domene podložnim phishingu. Napadači mogu koristiti [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) ili [_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) u tu svrhu. Posebno su ranjive domene gde URL u phishing emailu izgleda legitimno, obmanjujući korisnike i izbegavajući spam filtere zbog inherentnog poverenja domene.
|
||||
Preuzimanje subdomena je u suštini DNS spoofing za određeni domen širom interneta, omogućavajući napadačima da postave A zapise za domen, što dovodi do toga da pregledači prikazuju sadržaj sa napadačevog servera. Ova **transparentnost** u pregledačima čini domene podložnim phishingu. Napadači mogu koristiti [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) ili [_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) u tu svrhu. Posebno su ranjivi domeni gde URL u phishing emailu izgleda legitimno, obmanjujući korisnike i izbegavajući spam filtere zbog inherentnog poverenja domena.
|
||||
|
||||
Proverite ovaj [post za dalje detalje](https://0xpatrik.com/subdomain-takeover/)
|
||||
|
||||
### **SSL Sertifikati**
|
||||
### **SSL Certificates**
|
||||
|
||||
SSL sertifikati, ako ih generišu napadači putem usluga poput [_Let's Encrypt_](https://letsencrypt.org/), dodaju legitimitet ovim lažnim domenama, čineći phishing napade uverljivijim.
|
||||
SSL sertifikati, ako ih generišu napadači putem usluga poput [_Let's Encrypt_](https://letsencrypt.org/), dodaju legitimitet ovim lažnim domenima, čineći phishing napade uverljivijim.
|
||||
|
||||
### **Bezbednost kolačića i transparentnost pregledača**
|
||||
### **Cookie Security and Browser Transparency**
|
||||
|
||||
Transparentnost pregledača se takođe proteže na bezbednost kolačića, kojom upravljaju politike poput [Same-origin policy](https://en.wikipedia.org/wiki/Same-origin_policy). Kolačići, često korišćeni za upravljanje sesijama i čuvanje tokena za prijavu, mogu biti iskorišćeni putem preuzimanja subdomena. Napadači mogu **prikupiti sesijske kolačiće** jednostavno usmeravajući korisnike na kompromitovanu subdomenu, ugrožavajući podatke i privatnost korisnika.
|
||||
Transparentnost pregledača se takođe proteže na sigurnost kolačića, kojom upravljaju politike poput [Same-origin policy](https://en.wikipedia.org/wiki/Same-origin_policy). Kolačići, koji se često koriste za upravljanje sesijama i čuvanje tokena za prijavu, mogu biti iskorišćeni putem preuzimanja subdomena. Napadači mogu **prikupiti sesijske kolačiće** jednostavno usmeravajući korisnike na kompromitovani subdomen, ugrožavajući podatke i privatnost korisnika.
|
||||
|
||||
### **Emailovi i preuzimanje subdomena**
|
||||
### CORS Bypass
|
||||
|
||||
Još jedan aspekt preuzimanja subdomena uključuje email usluge. Napadači mogu manipulisati **MX zapisima** da primaju ili šalju emailove sa legitimne subdomene, povećavajući efikasnost phishing napada.
|
||||
Može biti moguće da svaki subdomen ima dozvolu za pristup CORS resursima iz glavnog domena ili drugih subdomena. Ovo bi napadač mogao iskoristiti da **pristupi osetljivim informacijama** zloupotrebljavajući CORS zahteve.
|
||||
|
||||
### **Rizici višeg reda**
|
||||
### CSRF - Same-Site Cookies bypass
|
||||
|
||||
Dalji rizici uključuju **preuzimanje NS zapisa**. Ako napadač stekne kontrolu nad jednim NS zapisom domene, može potencijalno usmeriti deo saobraćaja na server pod svojom kontrolom. Ovaj rizik se pojačava ako napadač postavi visoki **TTL (Time to Live)** za DNS zapise, produžavajući trajanje napada.
|
||||
Može biti moguće da subdomen ima dozvolu da šalje kolačiće na domen ili druge subdomene što je sprečeno atributom `Same-Site` kolačića. Međutim, imajte na umu da će anti-CSRF tokeni i dalje sprečiti ovaj napad ako su pravilno implementirani.
|
||||
|
||||
### Ranjivost CNAME zapisa
|
||||
### OAuth tokens redirect
|
||||
|
||||
Napadači bi mogli iskoristiti nepreuzete CNAME zapise koji pokazuju na spoljne usluge koje više nisu korišćene ili su ukinute. Ovo im omogućava da kreiraju stranicu pod poverenom domenom, dodatno olakšavajući phishing ili distribuciju malvera.
|
||||
Može biti moguće da se kompromitovani subdomen može koristiti u `redirect_uri` URL-u OAuth toka. Ovo bi napadač mogao iskoristiti da **ukrade OAuth token**.
|
||||
|
||||
### **Strategije ublažavanja**
|
||||
### CSP Bypass
|
||||
|
||||
Može biti moguće da se kompromitovani subdomen (ili svaki subdomen) može koristiti, na primer, za `script-src` CSP. Ovo bi napadač mogao iskoristiti da **ubaci zlonamerne skripte** i zloupotrebi potencijalne XSS ranjivosti.
|
||||
|
||||
### **Emails and Subdomain Takeover**
|
||||
|
||||
Još jedan aspekt preuzimanja subdomena uključuje email usluge. Napadači mogu manipulisati **MX zapisima** da primaju ili šalju emailove sa legitimnog subdomena, povećavajući efikasnost phishing napada.
|
||||
|
||||
### **Higher Order Risks**
|
||||
|
||||
Dalji rizici uključuju **NS record takeover**. Ako napadač dobije kontrolu nad jednim NS zapisom domena, može potencijalno usmeriti deo saobraćaja na server pod svojom kontrolom. Ovaj rizik se povećava ako napadač postavi visoki **TTL (Time to Live)** za DNS zapise, produžavajući trajanje napada.
|
||||
|
||||
### CNAME Record Vulnerability
|
||||
|
||||
Napadači bi mogli iskoristiti neizdane CNAME zapise koji pokazuju na spoljne usluge koje više nisu korišćene ili su ukinute. Ovo im omogućava da kreiraju stranicu pod poverenim domenom, dodatno olakšavajući phishing ili distribuciju malvera.
|
||||
|
||||
### **Mitigation Strategies**
|
||||
|
||||
Strategije ublažavanja uključuju:
|
||||
|
||||
1. **Uklanjanje ranjivih DNS zapisa** - Ovo je efikasno ako subdomena više nije potrebna.
|
||||
2. **Preuzimanje imena domene** - Registracija resursa kod odgovarajućeg provajdera u oblaku ili ponovna kupovina istekao domene.
|
||||
1. **Uklanjanje ranjivih DNS zapisa** - Ovo je efikasno ako subdomen više nije potreban.
|
||||
2. **Pribavljanje imena domena** - Registracija resursa kod odgovarajućeg provajdera u oblaku ili ponovna kupovina istekao domen.
|
||||
3. **Redovno praćenje ranjivosti** - Alati poput [aquatone](https://github.com/michenriksen/aquatone) mogu pomoći u identifikaciji podložnih domena. Organizacije bi takođe trebale revidirati svoje procese upravljanja infrastrukturom, osiguravajući da kreiranje DNS zapisa bude poslednji korak u kreiranju resursa i prvi korak u uništavanju resursa.
|
||||
|
||||
Za provajdere u oblaku, verifikacija vlasništva nad domenom je ključna za sprečavanje preuzimanja subdomena. Neki, poput [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/), su prepoznali ovaj problem i implementirali mehanizme verifikacije domena.
|
||||
Za provajdere u oblaku, verifikacija vlasništva domena je ključna za sprečavanje preuzimanja subdomena. Neki, poput [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/), su prepoznali ovaj problem i implementirali mehanizme verifikacije domena.
|
||||
|
||||
## Reference
|
||||
## References
|
||||
|
||||
- [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/)
|
||||
- [https://www.stratussecurity.com/post/subdomain-takeover-guide](https://www.stratussecurity.com/post/subdomain-takeover-guide)
|
||||
- [https://www.hackerone.com/blog/guide-subdomain-takeovers-20](https://www.hackerone.com/blog/guide-subdomain-takeovers-20)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,24 +1,24 @@
|
||||
# Hacking sa kolačićima
|
||||
# Hacking sa Kolačićima
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Atributi kolačića
|
||||
## Atributi Kolačića
|
||||
|
||||
Kolačići dolaze sa nekoliko atributa koji kontrolišu njihovo ponašanje u korisnikovom pretraživaču. Evo pregleda ovih atributa u pasivnijem tonu:
|
||||
|
||||
### Ističe i Maksimalna starost
|
||||
### Expires i Max-Age
|
||||
|
||||
Datum isteka kolačića određuje atribut `Expires`. Nasuprot tome, atribut `Max-age` definiše vreme u sekundama do brisanja kolačića. **Izaberite `Max-age` jer odražava modernije prakse.**
|
||||
|
||||
### Domen
|
||||
|
||||
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 poddomene. Međutim, kada je atribut `Domain` eksplicitno postavljen, obuhvata i poddomene. Ovo čini specifikaciju atributa `Domain` manje restriktivnom opcijom, korisnom za scenarije gde je deljenje kolačića preko poddomena neophodno. Na primer, postavljanje `Domain=mozilla.org` čini kolačiće dostupnim na njegovim poddomenama kao što je `developer.mozilla.org`.
|
||||
Domaćini koji primaju kolačić su određeni atributom `Domain`. Po defaultu, ovo je postavljeno na domaćina koji je izdao kolačić, ne uključujući njegove poddomene. Međutim, kada je atribut `Domain` eksplicitno postavljen, obuhvata i poddomene. Ovo čini specifikaciju atributa `Domain` manje restriktivnom opcijom, korisnom za scenarije gde je deljenje kolačića preko poddomena 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 traženom URL-u da bi se `Cookie` zaglavlje poslalo označena je atributom `Path`. Ovaj atribut smatra karakter `/` kao separator direktorijuma, omogućavajući podudaranja u poddirektorijumima.
|
||||
|
||||
### Pravila redosleda
|
||||
### Pravila Redosleda
|
||||
|
||||
Kada dva kolačića imaju isto ime, onaj koji se bira za slanje zasniva se na:
|
||||
|
||||
@ -34,7 +34,7 @@ Kada dva kolačića imaju isto ime, onaj koji se bira za slanje zasniva se na:
|
||||
|
||||
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.
|
||||
|
||||
| **Tip zahteva** | **Primer koda** | **Kolačići poslati kada** |
|
||||
| **Tip Zahteva** | **Primer Koda** | **Kolačići Se Šalju Kada** |
|
||||
| ---------------- | ---------------------------------- | --------------------- |
|
||||
| Link | \<a href="...">\</a> | NotSet\*, Lax, None |
|
||||
| Prerender | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
||||
@ -50,7 +50,7 @@ Kolačić sa _**SameSite**_ atributom će **ublažiti CSRF napade** gde je potre
|
||||
**\*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 zahteve na vrhunskim stranicama.**
|
||||
|
||||
## Zastavice kolačića
|
||||
## Zastavice Kolačića
|
||||
|
||||
### HttpOnly
|
||||
|
||||
@ -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 ovoj stranici i **ukrade kolačiće** iz odgovora (proverite primer u [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/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 poslata kolačiće. Ova tehnika se naziva **Cross-Site Tracking**.
|
||||
- Ova tehnika se izbegava od strane **modernih pretraživača ne dozvoljavajući 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` za IE6.0 SP2.
|
||||
- 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**.
|
||||
- Ova tehnika se izbegava od strane **modernih pretraživača ne dozvoljavajući 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 prelivanje kolačića:
|
||||
- Moguće je **prepisati HttpOnly kolačiće** izvođenjem napada Cookie Jar overflow:
|
||||
|
||||
{{#ref}}
|
||||
cookie-jar-overflow.md
|
||||
@ -70,11 +70,11 @@ cookie-jar-overflow.md
|
||||
|
||||
- Moguće je koristiti [**Cookie Smuggling**](#cookie-smuggling) napad za eksfiltraciju ovih kolačića.
|
||||
|
||||
### Sigurno
|
||||
### Secure
|
||||
|
||||
Zahtev će **samo** poslati kolačić u HTTP zahtevu samo ako je zahtev prenet preko sigurnog kanala (tipično **HTTPS**).
|
||||
|
||||
## Prefiksi kolačića
|
||||
## Prefiksi Kolačića
|
||||
|
||||
Kolačići sa prefiksom `__Secure-` moraju biti postavljeni zajedno sa `secure` zastavicom sa stranica koje su zaštićene HTTPS-om.
|
||||
|
||||
@ -85,11 +85,11 @@ Za kolačiće sa prefiksom `__Host-`, mora biti ispunjeno nekoliko uslova:
|
||||
- Zabranjeno im je da specificiraju domen, sprečavajući njihovu transmisiju na poddomene.
|
||||
- Putanja za ove kolačiće mora biti postavljena na `/`.
|
||||
|
||||
Važno je napomenuti da kolačići sa prefiksom `__Host-` ne smeju biti poslati na superdomenima ili poddomenima. Ova restrikcija pomaže u izolaciji aplikacionih kolačića. Stoga, korišćenje `__Host-` prefiksa za sve aplikacione kolačiće može se smatrati dobrom praksom za poboljšanje sigurnosti i izolacije.
|
||||
Važno je napomenuti da kolačići sa prefiksom `__Host-` ne smeju biti poslati superdomenima ili poddomenama. Ova restrikcija pomaže u izolaciji aplikacionih kolačića. Stoga, korišćenje `__Host-` prefiksa za sve aplikacione kolačiće može se smatrati dobrom praksom za poboljšanje sigurnosti i izolacije.
|
||||
|
||||
### Prepisivanje kolačića
|
||||
|
||||
Dakle, jedna od zaštita kolačića sa prefiksom `__Host-` je sprečavanje da budu prepisani sa poddomena. Sprečavanje, na primer, [**Cookie Tossing napada**](cookie-tossing.md). U razgovoru [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**rad**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) predstavljeno je da je bilo moguće postaviti kolačiće sa prefiksom \_\_HOST- sa poddomena, varajući parser, na primer, dodavanjem "=" na početak ili na kraj...:
|
||||
Dakle, jedna od zaštita kolačića sa prefiksom `__Host-` je sprečavanje da budu prepisani iz poddomena. Sprečavanje, na primer, [**Cookie Tossing napada**](cookie-tossing.md). U predavanju [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**rad**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) je predstavljeno da je bilo moguće postaviti kolačiće sa prefiksom \_\_HOST- iz poddomena, prevarom parsera, na primer, dodavanjem "=" na početak ili na kraj...:
|
||||
|
||||
<figure><img src="../../images/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -97,49 +97,49 @@ Ili u PHP-u je bilo moguće dodati **druge karaktere na početak** imena kolači
|
||||
|
||||
<figure><img src="../../images/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
|
||||
## Napadi na kolačiće
|
||||
## Napadi na Kolačiće
|
||||
|
||||
Ako prilagođeni kolačić sadrži osetljive podatke, proverite ga (posebno ako učestvujete u CTF-u), jer može biti ranjiv.
|
||||
|
||||
### Dekodiranje i manipulacija kolačićima
|
||||
### Dekodiranje i Manipulacija Kolačićima
|
||||
|
||||
Osjetljivi podaci ugrađeni u kolačiće uvek treba da budu pažljivo ispitani. Kolačići kodirani u Base64 ili sličnim formatima često se mogu dekodirati. Ova ranjivost omogućava napadačima da izmene sadržaj kolačića i da se predstavljaju kao drugi korisnici kodiranjem svojih izmenjenih podataka nazad u kolačić.
|
||||
|
||||
### Otimanje sesije
|
||||
### Otimanje Sesije
|
||||
|
||||
Ovaj napad uključuje krađu kolačića korisnika kako bi se dobio neovlašćen pristup njihovom nalogu unutar aplikacije. Korišćenjem ukradenog kolačića, napadač može da se predstavi kao legitimni korisnik.
|
||||
Ovaj napad uključuje krađu korisnikovog kolačića kako bi se dobio neovlašćen pristup njihovom nalogu unutar aplikacije. Korišćenjem ukradenog kolačića, napadač može da se predstavi kao legitimni korisnik.
|
||||
|
||||
### Fiksacija sesije
|
||||
### Fiksacija Sesije
|
||||
|
||||
U ovom scenariju, napadač vara žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeljuje 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č.
|
||||
U ovom scenariju, napadač prevari žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeljuje 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 poddomen**, pročitajte:
|
||||
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
|
||||
|
||||
{{#ref}}
|
||||
cookie-tossing.md
|
||||
{{#endref}}
|
||||
|
||||
### Donacija sesije
|
||||
### Donacija Sesije
|
||||
|
||||
Ovde, napadač ubeđuje žrtvu da koristi napadačev kolačić sesije. Žrtva, verujući da je prijavljena na svoj nalog, nenamerno će izvršiti radnje u kontekstu napadačevog naloga.
|
||||
|
||||
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomen**, pročitajte:
|
||||
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
|
||||
|
||||
{{#ref}}
|
||||
cookie-tossing.md
|
||||
{{#endref}}
|
||||
|
||||
### [JWT kolačići](../hacking-jwt-json-web-tokens.md)
|
||||
### [JWT Kolačići](../hacking-jwt-json-web-tokens.md)
|
||||
|
||||
Kliknite na prethodni link da biste pristupili stranici koja objašnjava moguće nedostatke u JWT.
|
||||
Kliknite na prethodni link da biste pristupili stranici koja objašnjava moguće slabosti u JWT.
|
||||
|
||||
JSON Web Tokens (JWT) korišćeni u kolačićima takođe mogu predstavljati ranjivosti. Za detaljne informacije o potencijalnim nedostacima i kako ih iskoristiti, preporučuje se pristup povezanom dokumentu o hakovanju JWT.
|
||||
JSON Web Tokens (JWT) korišćeni u kolačićima takođe mogu predstavljati ranjivosti. Za detaljne informacije o potencijalnim slabostima i kako ih iskoristiti, preporučuje se pristup povezanom dokumentu o hakovanju JWT.
|
||||
|
||||
### Cross-Site Request Forgery (CSRF)
|
||||
|
||||
Ovaj napad prisiljava prijavljenog korisnika da izvrši neželjene radnje na veb aplikaciji u kojoj su trenutno autentifikovani. Napadači mogu iskoristiti kolačiće koji se automatski šalju sa svakim zahtevom na ranjivu stranicu.
|
||||
|
||||
### Prazni kolačići
|
||||
### Prazni Kolačići
|
||||
|
||||
(Proverite dalje detalje u [originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Pregledači dozvoljavaju kreiranje kolačića bez imena, što se može demonstrirati putem JavaScript-a na sledeći način:
|
||||
```js
|
||||
@ -163,42 +163,67 @@ U Chrome-u, ako je Unicode zamenska kodna tačka deo postavljenog kolačića, `d
|
||||
```js
|
||||
document.cookie = "\ud800=meep"
|
||||
```
|
||||
Ovo rezultira time da `document.cookie` ispisuje prazan string, što ukazuje na trajnu korupciju.
|
||||
Ovo rezultira time da `document.cookie` vraća 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 web 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 web 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. Č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:
|
||||
```
|
||||
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 pravilno da odrede početak novih kolačića, što omogućava 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 prilike za napade putem injekcije kolačića. Ovi serveri ne uspevaju pravilno da odrede 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 razmak.
|
||||
- Pythonove klase kolačića započinju parsiranje na razmaku.
|
||||
|
||||
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 sigurnosne mere. Problem se dodatno pogoršava načinom na koji Python obrađuje duple nazive kolačića, gde poslednja pojava prepisuje ranije. Takođe, postavlja se pitanje 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.
|
||||
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 injektiraju 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.
|
||||
|
||||
### Cookies $version and WAF bypasses
|
||||
### Cookies $version
|
||||
|
||||
#### WAF Bypass
|
||||
|
||||
Prema [**ovom blogu**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), može biti moguće koristiti atribut kolačića **`$Version=1`** da se backend koristi starom logikom za parsiranje kolačića zbog **RFC2109**. Štaviše, druge vrednosti kao što su **`$Domain`** i **`$Path`** mogu se koristiti za modifikaciju ponašanja backenda sa kolačićem.
|
||||
|
||||
#### Cookie Sandwich Attack
|
||||
|
||||
Prema [**ovom blogu**](https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique), moguće je koristiti tehniku kolačić sendviča za krađu HttpOnly kolačića. Ovo su zahtevi i koraci:
|
||||
|
||||
- Pronađite mesto gde se očigledno beskoristan **kolačić odražava u odgovoru**
|
||||
- **Kreirajte kolačić pod nazivom `$Version`** sa vrednošću `1` (to možete uraditi u XSS napadu iz JS) sa specifičnijim putem kako bi dobio početnu poziciju (neki okviri poput Pythona ne zahtevaju ovaj korak)
|
||||
- **Kreirajte kolačić koji se odražava** sa vrednošću koja ostavlja **otvorene dvostruke navodnike** i sa specifičnim putem kako bi bio pozicioniran u bazi kolačića nakon prethodnog (`$Version`)
|
||||
- Tada će legitiman kolačić ići sledeći u redu
|
||||
- **Kreirajte lažni kolačić koji zatvara dvostruke navodnike** unutar svoje vrednosti
|
||||
|
||||
Na ovaj način, kolačić žrtve se zarobljava unutar novog kolačića verzije 1 i biće odražen kad god se odražava.
|
||||
```javascript
|
||||
document.cookie = `$Version=1;`;
|
||||
document.cookie = `param1="start`;
|
||||
// any cookies inside the sandwich will be placed into param1 value server-side
|
||||
document.cookie = `param2=end";`;
|
||||
```
|
||||
### WAF bypasses
|
||||
|
||||
#### Cookies $version
|
||||
|
||||
Proverite prethodnu sekciju.
|
||||
|
||||
#### Bypassing value analysis with quoted-string encoding
|
||||
|
||||
Ovo parsiranje ukazuje na to da se neizbežene vrednosti unutar kolačića, 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 pretvaraju, 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 separator između vrednosti kolačića**. Takođe, moguće je 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 se generišu 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, moguće je dodati **prostore 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 prostor 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 header-ima kolačića kao u:
|
||||
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:
|
||||
```
|
||||
GET / HTTP/1.1
|
||||
Host: example.com
|
||||
@ -242,11 +267,11 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
|
||||
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
|
||||
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
|
||||
```
|
||||
Padbuster će napraviti nekoliko pokušaja i pitaće vas koja je greška (ona koja nije validna).
|
||||
Padbuster će napraviti nekoliko pokušaja i pitaće vas koja je greška (uslov koji nije validan).
|
||||
|
||||
Zatim će početi da dekriptuje kolačić (može potrajati nekoliko minuta)
|
||||
Zatim će početi da dekriptuje kolačić (može potrajati nekoliko minuta).
|
||||
|
||||
Ako je napad uspešno izvršen, možete pokušati da enkriptujete string po vašem izboru. Na primer, ako želite da **enkriptujete** **user=administrator**
|
||||
Ako je napad uspešno izveden, možete pokušati da enkriptujete string po vašem izboru. Na primer, ako želite da **enkriptujete** **user=administrator**
|
||||
```
|
||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||
```
|
||||
@ -273,7 +298,7 @@ Kreirajte 2 korisnika sa gotovo istim podacima (korisničko ime, lozinka, email,
|
||||
|
||||
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 su enkriptovani niz "a", 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 jednog bloka "a" iz kolačića. I imaćete kolačić korisničkog imena "admin".
|
||||
|
||||
## References
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user