AWS Hacking'i öğrenin ve pratik yapın:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
Bu sınıfın **meraklı bir davranışı** var. Belgede: “**İki ana bilgisayar, her iki ana bilgisayar adı da aynı IP adreslerine çözümlenebiliyorsa eşdeğer kabul edilir**.”\
Bu nedenle, bir URL nesnesi **`equals`** veya **`hashCode`** fonksiyonlarından **herhangi birini** çağırdığında, IP adresini almak için bir **DNS isteği****gönderilecektir**.
Bir **URL** nesnesinden **`hashCode`** fonksiyonunu **çağırmak** oldukça kolaydır, bu nesneyi deseralize edilecek bir `HashMap` içine yerleştirmek yeterlidir. Bunun nedeni, `HashMap`'in **`readObject`** fonksiyonunun sonunda bu kodun çalıştırılmasıdır:
Gözlemleyebileceğiniz gibi, **deserialization** sırasında bir **`HashMap`** için `hash` fonksiyonu **her nesne ile birlikte****çalıştırılacak** ve **`hash`** çalıştırılması sırasında **nesnenin**`.hashCode()`**çalıştırılacak**. Bu nedenle, eğer bir **`HashMap`** **içinde** bir **URL** nesnesi **deserialization** ederseniz, **URL nesnesi**`.hashCode()`**çalıştıracaktır**.
Aşağıda görebileceğiniz gibi, bir `URLObject``.hashCode()` çalıştırdığında `hashCode(this)` olarak çağrılır. Devamında bu fonksiyonun kodunu görebilirsiniz:
Bu nedenle, bu sınıf **istismar edilebilir** ve **deserialization**'ın mümkün olduğunu **göstermek** veya hatta **bilgi sızdırmak** için **bir DNS sorgusu başlatmak** amacıyla kullanılabilir (bir komut yürütme çıktısını alt alan adı olarak ekleyebilirsiniz).
[URDNS yük kodunu ysoserial'den burada bulabilirsiniz](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java). Ancak, kodlamayı anlamayı kolaylaştırmak için kendi PoC'mi oluşturdum (ysoserial'den alınan birine dayalı):
* Orijinal fikirde commons collections yükü, bir DNS sorgusu gerçekleştirmek için değiştirildi, bu önerilen yöntemden daha az güvenilir, ancak bu gönderi: [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**, sunucunun Java sınıfında bazı**Java sınıflarının var olup olmadığını** anlamaya çalışacak, böylece **eğer** bilinen bir istismara **duyarlı** olup olmadığını bilebilirsiniz.
**GadgetProbe**, önceki bölümün aynı**DNS yükünü** kullanacak, ancak DNS sorgusunu çalıştırmadan önce **rastgele bir sınıfı deseralize etmeye** çalışacak. Eğer **rastgele sınıf mevcutsa**, **DNS sorgusu****gönderilecek** ve GadgetProbe bu sınıfın mevcut olduğunu not edecektir. Eğer **DNS** isteği **asla gönderilmezse**, bu, **rastgele sınıfın başarıyla deseralize edilmediği** anlamına gelir, yani ya mevcut değildir ya da **serileştirilebilir/istismar edilebilir** değildir.
GitHub içinde, [**GadgetProbe bazı kelime listelerine**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) sahiptir ve Java sınıflarının test edilmesi için kullanılabilir.
Varsayılan olarak, **Java serileştirilmiş sihirli baytları** aramak için gönderilen tüm istekleri ve yanıtları**pasif olarak kontrol eder** ve herhangi bir bulursa bir güvenlik açığı uyarısı sunar:
Bir isteği seçebilir, sağ tıklayıp `DS'ye istek gönder - Manuel Test` seçeneğini tıklayabilirsiniz.\
Ardından, _Deserialization Tarayıcı Sekmesi_ --> _Manuel test sekmesi_ içinde **ekleme noktasını** seçebilirsiniz. Ve **testi başlatın** (Kullanılan kodlamaya bağlı olarak uygun saldırıyı seçin).
Bu "Manuel test" olarak adlandırılsa da, oldukça **otomatikleştirilmiştir**. **Deserialization**'ın **herhangi bir ysoserial yüküne****duyarlı** olup olmadığını kontrol edecek ve web sunucusunda mevcut olan kütüphaneleri kontrol ederek duyarlı olanları vurgulayacaktır. **Duyarlı kütüphaneleri** kontrol etmek için **Java Sleeps**, **CPU** tüketimi yoluyla **sleeps** veya daha önce bahsedildiği gibi **DNS** kullanarak başlatmayı seçebilirsiniz.
Duyarlı bir kütüphaneyi tanımladıktan sonra isteği _İstismar Sekmesine_ gönderebilirsiniz.\
Bu sekmede, **enjekte etme noktasını** tekrar **seçmeniz**, oluşturmak istediğiniz **duyarlı kütüphaneyi** ve **komutu** yazmanız gerekir. Ardından, uygun **Saldırı** butonuna basın.
AWS Hacking öğrenin ve pratik yapın:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**