Welcome to Our Website

entendendo a des-serialização Java

como visto acima,o código dá uma exceção de erro na linha “main” java.idioma.ClassCastException: testserialization.ExploitDeser não pode ser lançado para testserialization.Empregado ” o que significa que o tipo de elenco não é adequado, no entanto, o código ainda é executado. A função readObject da classe DeserializeDemo é capaz de executar a implementação personalizada do readObject da classe ExploitDeser.,

Este é que é o inseguros desserialização aqui, que, apesar de haver uma conversão de tipo de erro ainda se dados serializados de uma classe personalizada com uma implementação personalizada de readObject é fornecido como entrada, ele é executado como mostrado acima.

Isto é o que é feito pelo gadget cadeias usado por ysoserial e outras java desserialização exploração de ferramentas para onde olham para o encadeamento de classes de, finalmente, a terra, para uma implementação personalizada de readObject que pode executar no nível do sistema código fornecido como parte de entrada do usuário.,

remediação

Agora, que nós tivemos um olhar para o que é Deserialização e como ela é explorada, vamos olhar para a remediação para isso.

a remediação que vamos discutir aqui é chamada de “Validação de classe olhar para a frente”, onde em nós podemos branquear a lista de classes que queremos ser deserializados. Por exemplo. em nosso cenário, nós esperaríamos permitir que apenas os dados de objetos de classe de funcionários para ser deserializado e para permanecer ele não deve permitir a deserialização.,

assim, basicamente o que este método faz é, ele se sobrepõe à função ” resolveClass “que é uma parte da classe”ObjectInputStream” (usado durante a deserialização) e executa uma listagem branca da lista de classes que precisa ser deserializada.

Agora que terminamos com a teoria, vamos saltar para a implementação.,

Permite criar uma nova classe de “LookAheadObjectInputStream” estendê-lo para ObjectInputSteam classe, de modo que podemos substituir a função de membro resolveClass:

No código acima a linha:

if (!desc.getName().equals(Employee.class.getName())) {

é, basicamente, olhando se serializado conteúdo contém objeto da classe Funcionário mais que ela oferece de erro “não autorizado de desserialização tentativa” e impede a sua execução.,

Agora, o final código modificado para “DeserializedDemo” é como mostrado abaixo:

Modificado DeserializeDemo classe

No código acima, observar o código realçado em que, em vez de chamar a classe ObjectInputStream, LookAheadObjectInputStream classe está ficando chamado, que irá substituir o resolveClass método em tempo de execução e executar adequadamente.

agora, vamos passar o malicioso.,ser ficheiro criado anteriormente como entrada para a anulação da serialização e observe o resultado:

Erro na execução de dados serializados de classe personalizada

Como pode ser visto acima, este tempo de implementação personalizada de readObject da classe personalizada “ExploitDeser” não executadas durante a desserialização., Em vez disso, nós somos fornecidos com a mensagem de erro personalizado “tentativa de deserialização não autorizada”que foi definido na função resolveClass overridden sob a classe Lookaheadobjecttinputstream.

Este é um exemplo muito simples de usar o método de validação de classe para prevenir a deseralização insegura. Uma implementação extensiva em torno desta ideia é a biblioteca “serialKiller”. Link pode ser encontrado abaixo:

portanto, isso pode ser considerado como uma das soluções para mitigar a deserialização insegura em java.,

eu ainda estou olhando para outros métodos de mitigação que eu vou blogar mais tarde.por favor, forneça o seu valioso feedback. Até lá, continua a hackear e a aprender …

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *