<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pismeno tako i usmeno_).
**Deo ovog posta je zasnovan na sjajnom postu:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
Možete jednostavno menjati podatke ostavljajući potpis nepromenjen i proveriti da li server proverava potpis. Pokušajte da promenite svoje korisničko ime na "admin" na primer.
Koristite Burp ekstenziju "JSON Web Token" da isprobate ovu ranjivost i promenite različite vrednosti unutar JWT-a (pošaljite zahtev Repeater-u i u kartici "JSON Web Token" možete da menjate vrednosti tokena. Takođe možete odabrati da postavite vrednost polja "Alg" na "None").
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
Uputstva detaljno opisuju metod za procenu sigurnosti JWT tokena, posebno onih koji koriste "jku" zaglavlje. Ovaj zahtev treba da vodi ka JWKS (JSON Web Key Set) fajlu koji sadrži javni ključ neophodan za verifikaciju tokena.
Opcioni zaglavlje poznato kao `kid` se koristi za identifikaciju određenog ključa, što postaje posebno važno u okruženjima gde postoji više ključeva za verifikaciju potpisa tokena. Ovaj zahtev pomaže u odabiru odgovarajućeg ključa za verifikaciju potpisa tokena.
Kada je `kid` zahtev prisutan u zaglavlju, preporučuje se pretraživanje web direktorijuma za odgovarajući fajl ili njegove varijacije. Na primer, ako je `"kid":"key/12345"` naveden, fajlovi _/key/12345_ i _/key/12345.pem_ treba tražiti u web root-u.
`kid` zahtev takođe može biti iskorišćen za navigaciju kroz sistem fajlova, potencijalno omogućavajući izbor proizvoljnog fajla. Moguće je testirati konektivnost ili izvršiti Server-Side Request Forgery (SSRF) napade menjanjem vrednosti `kid` da cilja određene fajlove ili servise. Manipulisanje JWT-a za promenu vrednosti `kid` dok se zadržava originalni potpis može se postići korišćenjem `-T` zastave u jwt\_tool, kako je prikazano ispod:
Kroz ciljanje datoteka sa predvidljivim sadržajem, moguće je falsifikovati validan JWT. Na primer, datoteka `/proc/sys/kernel/randomize_va_space` u Linux sistemima, poznata po vrednosti **2**, može se koristiti u parametru `kid` sa **2** kao simetričnom lozinkom za generisanje JWT-a.
Ako se sadržaj tvrdnje `kid` koristi za dohvat lozinke iz baze podataka, SQL injection može biti olakšana modifikovanjem `kid` payload-a. Primer payload-a koji koristi SQL injection za izmenu procesa potpisa JWT-a uključuje:
Scenario u kojem parametar `kid` specificira putanju datoteke koja se koristi u kontekstu izvršavanja komande može dovesti do ranjivosti na udaljeno izvršavanje koda (RCE). Ubacivanjem komandi u parametar `kid`, moguće je otkriti privatne ključeve. Primer payload-a za postizanje RCE-a i otkrivanje ključeva je:
Ako token koristi "jku" **Header** tvrdnju, **proverite pruženi URL**. Ovaj URL bi trebalo da pokazuje ka URL-u koji sadrži JWKS datoteku koja drži javni ključ za proveru tokena. Modifikujte token da jku vrednost pokazuje ka web servisu čiji saobraćaj možete pratiti.
Zatim možete koristiti na primer [**jwt.io**](https://jwt.io) da biste kreirali novi JWT sa **kreiranim javnim i privatnim ključevima i usmerili parametar jku ka kreiranom sertifikatu.** Da biste kreirali validan jku sertifikat, možete preuzeti originalni i promeniti potrebne parametre.
X.509 URL. URI koji pokazuje na set X.509 (standard formata sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u setu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Svaki naredni sertifikat potpisuje prethodni, čime se kompletira lanac sertifikata. X.509 je definisan u RFC 52807. Potrebna je transportna sigurnost za prenos sertifikata.
Pokušajte **promeniti ovaj zaglavlje u URL pod vašom kontrolom** i proverite da li je primljen zahtev. U tom slučaju **biste mogli da manipulišete JWT-om**.
Zatim možete koristiti na primer [**jwt.io**](https://jwt.io) da biste kreirali novi JWT sa **kreiranim javnim i privatnim ključevima i usmerili parametar x5u ka sertifikatu .crt koji je kreiran**.
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novo generisanim sertifikatom i modifikuje druge parametre, tačnije n, e i x5t, tada bi lažni token biti prihvaćen od strane servera.
n ="ANQ3hoFoDxGQMhYOAc6CHmzz6_Z20hiP1Nvl1IN6phLwBj5gLei3e4e-DDmdwQ1zOueacCun0DkX1gMtTTX36jR8CnoBRBUTmNsQ7zaL3jIU4iXeYGuy7WPZ_TQEuAO1ogVQudn2zTXEiQeh-58tuPeTVpKmqZdS3Mpum3l72GHBbqggo_1h3cyvW4j3QM49YbV35aHV3WbwZJXPzWcDoEnCM4EwnqJiKeSpxvaClxQ5nQo3h2WdnV03C5WuLWaBNhDfC_HItdcaZ3pjImAjo4jkkej6mW3eXqtmDX39uZUyvwBzreMWh6uOu9W0DMdGBbfNNWcaR5tSZEGGj2divE8";
e = "AQAB";
const key = new NodeRSA();
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
Međutim, zamislite situaciju gde je maksimalna dužina ID-a 4 (0001-9999). Zahtevi 0001 i 10001 će koristiti isti ID. Dakle, ako backend inkrementira ID za svaki zahtev, možete zloupotrebiti ovo da **ponovite zahtev** (potrebno je poslati 10000 zahteva između svakog uspešnog ponavljanja).
Primećeno je da neke web aplikacije zavise od pouzdane JWT usluge za generisanje i upravljanje njihovim tokenima. Zabeleženi su slučajevi gde je token, generisan za jednog klijenta od strane JWT usluge, bio prihvaćen od strane drugog klijenta iste JWT usluge. Ako se primeti izdavanje ili obnavljanje JWT-a putem usluge treće strane, trebalo bi istražiti mogućnost registracije naloga na drugom klijentu te usluge koristeći isto korisničko ime/email. Zatim treba pokušati ponoviti dobijeni token u zahtevu ka cilju da se vidi da li je prihvaćen.
* Prihvatanje vašeg tokena može ukazivati na ozbiljan problem, potencijalno omogućavajući falsifikovanje naloga bilo kog korisnika. Međutim, treba imati na umu da bi mogla biti potrebna dozvola za širu testiranje ako se registrujete na aplikaciju treće strane, jer to može ući u pravnu sivu zonu.
Istek tokena se proverava korišćenjem tvrdnje "exp" Payload. S obzirom da se JWT-ovi često koriste bez informacija o sesiji, potrebno je pažljivo rukovanje. U mnogim slučajevima, hvatanje i ponovno reprodukovanje JWT-a drugog korisnika može omogućiti predstavljanje tog korisnika. RFC za JWT preporučuje smanjenje rizika od ponovnih napada JWT-om korišćenjem tvrdnje "exp" za postavljanje vremena isteka tokena. Nadalje, implementacija relevantnih provera od strane aplikacije kako bi se osiguralo procesiranje ove vrednosti i odbacivanje isteklih tokena je ključno. Ako token uključuje tvrdnju "exp" i vremenska ograničenja za testiranje dozvoljavaju, preporučuje se čuvanje tokena i ponovno reprodukovanje nakon što je isteklo vreme isteka. Sadržaj tokena, uključujući parsiranje vremenske oznake i proveru isteka (vremenska oznaka u UTC), može se pročitati korišćenjem zastave -R alata jwt\_tool.
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili **telegram grupi** ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.