Basic Java Deserialization (ObjectInputStream, readObject)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
У цьому ПОСТІ буде пояснено приклад використання java.io.Serializable
.
Java Serializable
інтерфейс (java.io.Serializable
є маркерним інтерфейсом, який ваші класи повинні реалізувати, якщо вони повинні бути серіалізовані та десеріалізовані. Серіалізація об'єктів Java (запис) виконується за допомогою ObjectOutputStream, а десеріалізація (читання) виконується за допомогою ObjectInputStream.
Давайте розглянемо приклад з класом Person, який є серіалізованим. Цей клас перезаписує функцію readObject, тому коли будь-який об'єкт цього класу буде десеріалізований, ця функція буде виконана.
У прикладі функція readObject класу Person викликає функцію eat()
його домашньої тварини, а функція eat()
собаки (з якоїсь причини) викликає calc.exe. Ми побачимо, як серіалізувати та десеріалізувати об'єкт Person, щоб виконати цей калькулятор:
Наступний приклад з https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Як ви можете бачити в цьому дуже простому прикладі, "вразливість" тут виникає через те, що функція readObject викликає інші вразливі функції.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)