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)
Neste POST, será explicado um exemplo usando java.io.Serializable
.
A interface Java Serializable
(java.io.Serializable
é uma interface de marcador que suas classes devem implementar se forem serializadas e desserializadas. A serialização de objetos Java (escrita) é feita com o ObjectOutputStream e a desserialização (leitura) é feita com o ObjectInputStream.
Vamos ver um exemplo com uma classe Person que é serializável. Esta classe sobrescreve a função readObject, então quando qualquer objeto desta classe é desserializado, esta função será executada.
No exemplo, a função readObject da classe Person chama a função eat()
de seu animal de estimação e a função eat()
de um Dog (por algum motivo) chama um calc.exe. Vamos ver como serializar e desserializar um objeto Person para executar esta calculadora:
O seguinte exemplo é de https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Como você pode ver neste exemplo muito básico, a "vulnerabilidade" aqui aparece porque a função readObject está chamando outras funções vulneráveis.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)