hacktricks/pentesting-web/deserialization/basic-java-deserialization-objectinputstream-readobject.md

114 lines
5.7 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>AWS hacklemeyi sıfırdan kahramanla öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* **Şirketinizi HackTricks'te reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **Hacking hilelerinizi paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek**.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
Bu gönderide, `java.io.Serializable` kullanarak bir örnek açıklanacak.
2022-05-01 12:41:36 +00:00
# Serializable
2024-02-10 18:14:16 +00:00
Java `Serializable` arayüzü (`java.io.Serializable`), sınıflarınızın **serileştirilmesi** ve **serileştirilmesi** gerekiyorsa uygulamanız gereken bir işaretleyici arayüzdür. Java nesne serileştirme (yazma) işlemi [ObjectOutputStream](http://tutorials.jenkov.com/java-io/objectoutputstream.html) ile yapılır ve deserializasyon (okuma) işlemi [ObjectInputStream](http://tutorials.jenkov.com/java-io/objectinputstream.html) ile yapılır.
2024-02-10 18:14:16 +00:00
Bir **Person sınıfı** örneğiyle bir örnek görelim. Bu sınıf **serileştirilebilir**. Bu sınıfın **readObject** işlevi üzerine yazılmıştır, bu nedenle bu **sınıfın herhangi bir nesnesi deserializasyon** yapıldığında bu **işlev** çalıştırılacaktır.\
Örnekte, Person sınıfının readObject işlevi, evcil hayvanının `eat()` işlevini ve bir Köpeğin `eat()` işlevini (bir nedenle) çağırır ve **calc.exe** çağırır. **Bu hesap makinesini çalıştırmak için bir Person nesnesini serileştirmeyi ve deserializasyon yapmayı göreceğiz:**
2024-02-05 02:28:59 +00:00
2024-02-10 18:14:16 +00:00
**Aşağıdaki örnek, [https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649](https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649) adresinden alınmıştır**
```java
import java.io.Serializable;
import java.io.*;
public class TestDeserialization {
2024-02-10 18:14:16 +00:00
interface Animal {
public void eat();
}
//Class must implements Serializable to be serializable
public static class Cat implements Animal,Serializable {
@Override
public void eat() {
System.out.println("cat eat fish");
}
}
//Class must implements Serializable to be serializable
public static class Dog implements Animal,Serializable {
@Override
public void eat() {
try {
Runtime.getRuntime().exec("calc");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("dog eat bone");
}
}
//Class must implements Serializable to be serializable
public static class Person implements Serializable {
private Animal pet;
public Person(Animal pet){
this.pet = pet;
}
//readObject implementation, will call the readObject from ObjectInputStream and then call pet.eat()
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException {
pet = (Animal) stream.readObject();
pet.eat();
}
}
public static void GeneratePayload(Object instance, String file)
throws Exception {
//Serialize the constructed payload and write it to the file
File f = new File(file);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
out.writeObject(instance);
out.flush();
out.close();
}
public static void payloadTest(String file) throws Exception {
//Read the written payload and deserialize it
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
Object obj = in.readObject();
System.out.println(obj);
in.close();
}
public static void main(String[] args) throws Exception {
// Example to call Person with a Dog
Animal animal = new Dog();
Person person = new Person(animal);
GeneratePayload(person,"test.ser");
payloadTest("test.ser");
// Example to call Person with a Cat
//Animal animal = new Cat();
//Person person = new Person(animal);
//GeneratePayload(person,"test.ser");
//payloadTest("test.ser");
}
}
```
2024-02-10 18:14:16 +00:00
## Sonuç
2024-02-10 18:14:16 +00:00
Bu çok temel örnekte görebileceğiniz gibi, buradaki "zayıflık", **readObject** fonksiyonunun **diğer zayıf fonksiyonları çağırması** nedeniyle ortaya çıkmaktadır.
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'i desteklemenin diğer yolları:
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* Şirketinizi HackTricks'te **reklamınızı görmek** veya HackTricks'i **PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'da** takip edin.
* Hacking hilelerinizi **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek paylaşın.
2022-04-28 16:01:33 +00:00
</details>