<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 **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](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 **Twitter-u** 🐦 [**@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.
Ova klasa ima **zanimljivo ponašanje**. Prema dokumentaciji: "**Dva hosta se smatraju ekvivalentnim ako se oba imena hosta mogu prevesti u iste IP adrese**".\
Zatim, svaki put kada objekat URL pozove **bilo koju** od funkcija **`equals`** ili **`hashCode`**, biće poslat **DNS zahtev** za dobijanje IP adrese.
**Pozivanje** funkcije **`hashCode`** iz objekta **URL** je prilično jednostavno, dovoljno je da se taj objekat ubaci u `HashMap` koji će biti deserializovan. To je zato što se na kraju funkcije **`readObject`** iz `HashMap` izvršava sledeći kod:
Izvršiće se `putVal` sa svakom vrednošću unutar `HashMap`. Međutim, još važniji je poziv funkcije `hash` sa svakom vrednošću. Ovo je kod funkcije `hash`:
Kao što možete primetiti, **prilikom de-serijalizacije**`HashMap` objekta, funkcija `hash` će biti izvršena sa svakim objektom i tokom izvršavanja `hash` funkcije će biti izvršen `.hashCode()` objekta. Dakle, ako de-serijalizujete `HashMap` koji sadrži objekat `URL`, objekat `URL` će izvršiti `.hashCode()`.
Stoga se ova klasa može **zloupotrebiti** kako bi se **pokrenuo** DNS upit kako bi se **pokazalo** da je **deserijalizacija** moguća, ili čak i za **eksfiltraciju informacija** (možete dodati kao poddomen izlaz izvršenja komande).
Možete pronaći [kod za URLDNS payload iz ysoserial-a ovde](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Međutim, samo radi lakšeg razumevanja kako ga kodirati, kreirao sam svoj PoC (baziran na onom iz ysoserial-a):
* U originalnoj ideji, payload za commons collections je promenjen kako bi izvršio DNS upit, ali to je manje pouzdano od predložene metode, ali ovo je post: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
**GadgetProbe** će pokušati da utvrdi da li neke **Java klase postoje** na Java klasi servera kako biste znali **da li** je **ranjiv** na neki poznati exploit.
**GadgetProbe** će koristiti isti **DNS payload iz prethodne sekcije**, ali **pre** pokretanja DNS upita će **pokušati da deserijalizuje proizvoljnu klasu**. Ako **proizvoljna klasa postoji**, **DNS upit** će biti **poslat** i GadgetProbe će zabeležiti da ta klasa postoji. Ako **DNS** zahtev **nikada nije poslat**, to znači da **proizvoljna klasa nije uspešno deserijalizovana**, pa je ili nije prisutna ili nije **serijalizovana/eksploatabilna**.
Unutar github-a, [**GadgetProbe ima neke liste reči**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) sa Java klasama koje se mogu testirati.
Podrazumevano **pasivno proverava** sve zahteve i odgovore poslate **tražeći Java serialized magic bytes** i prikazuje upozorenje o ranjivosti ako se pronađe:
Možete izabrati zahtev, desni klik i `Send request to DS - Manual Testing`.\
Zatim, unutar _Deserialization Scanner Tab_ --> _Manual testing tab_ možete izabrati **mesto umetanja**. I **pokrenuti testiranje** (Izaberite odgovarajući napad u zavisnosti od korišćenog kodiranja).
Iako se ovo naziva "Ručno testiranje", prilično je **automatizovano**. Automatski će proveriti da li je **deserijalizacija** ranjiva na **bilo koji ysoserial payload** proveravajući biblioteke prisutne na web serveru i istaći one koje su ranjive. Da biste **proverili** da li postoje **ranjive biblioteke**, možete izabrati da pokrenete **Javas Sleeps**, **sleeps** putem **CPU** potrošnje ili korišćenjem **DNS-a**, kako je prethodno pomenuto.
Kada identifikujete ranjivu biblioteku, možete poslati zahtev na _Exploiting Tab_.\
U ovom tabu morate ponovo **izabrati** mesto **ubacivanja**, napisati **ranjivu biblioteku** za koju želite da kreirate payload i **komandu**. Zatim, samo pritisnite odgovarajući **Attack** dugme.
<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 oglašenu na HackTricks-u** ili **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 **Twitter-u** 🐦 [**@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.