101 — Insecure PHP Deserialization

Pensei em escrever esse post após brincar um pouco em um dos laboratórios de desserialização insegura do portswigger, vocês vão perceber que não foi nada tão mirabolante assim mas o fato de ter chegado na solução de outra maneira me fez pensar o quanto é bom tentar e insistir. Então vamos lá!

Essa exploração consiste em escalar de um usuário comum para o administrador e apagar um dos usuários do sistema.

De inicio o próprio burp acusou a existencia de um objeto serializado encodado em base64 até ai tudo bem porque decodar um base64 e ver o seu conteúdo é relativamente fácil mas e depois? Qual campo manipular? Como descobrir de qual forma escalar para o administrador sendo que eu não sabia quase nada sobre ele, só o seu nome. Ai que começamos com a tentativa e persistência.

Primeiro: Decodar o base64 e ver o que continha e sendo bem sugestivo existia um campo chamado access_token, guardei essa informação.

Token em base64 decodado

Segundo: Sabendo que existe um campo relacionado ao token tentei colocar o nome “administrator”, vai que cola né?

Alteração do conteúdo de um dos campos do objeto serializado

Terceiro: Após a alteração do campo no objeto serializado eu consegui notar que a aplicação trigava um erro e o melhor do erro é que estava expondo 3 tokens, olha só! Acho que temos um caminho ;-D

Mensagem de erro exibindo os tokens

Quarto e último: Após saber que tokens eram leakados na mensagem de erro fiz tentativas até descobrir qual o token do administrador e ao encontrar, consegui escalar e apagar o usuário indicado, chegando ao final do desafio.

OBS: Existe uma solução no próprio desafio que é muito mais interessante do que o jeito que eu acabei encontrando mas vou deixar essa curiosidade pra vocês ;D