DEV Community

José Vitor Alves Pignataro
José Vitor Alves Pignataro

Posted on

Write-up: Git Exposed, weak password reset and account takeover.

Image description

Olá, primeiramente antes de mais nada e não menos importante, me chamo José Vitor, trabalho atualmente como desenvolvedor de software, automação de processos e desenvolvimento de bots.

Sou entusiasta em Segurança da Informação e é nela em que aplico meus estudos, então sempre que possível estou dedicando meu tempo em me desenvolver cada vez mais nesta área, e quando possível realizo testes de seguranças como um trabalho extra.

Este write-up é referente a um teste que realizei em um sistema o qual me foi solicitado, onde mostro os métodos aplicados para realizar o teste e falo um pouco sobre a importância de saber programação dentro da área de segurança.

Buscando ser breve, não irei me aprofundar em cada tópico abaixo, e sim mostrar o processo e explicar o básico do que está acontecendo para melhor seguirmos durante o write-up.

  1. Reconhecimento
  2. Exploração
  3. Explorando um pouco mais a fundo

Reconhecimento.
Nesta etapa iniciei o reconhecimento geral do sistema, enumerando portas, tecnologias, arquivos, diretórios etc...

Mas neste caso vou focar na enumeração de diretórios em que nos leva a falha de git exposed. Utilizando uma ferramenta autoral que desenvolvi para realizar o fuzzing em aplicações Web, obtive a seguinte saída

Image description

Aqui temos o resultado da enumeração e um possível git exposto na aplicação, verificando manualmente conseguimos ver mais a fundo os repositórios abertos.

.git/HEAD
Image description

.git/config
Image description

.gitignore
Image description

Exploração.
Confirmando então que os repositórios estão abertos, podemos realizar o dump do git explorando a falha de git exposed, para isso costumo utilizar a ferramenta git-dumper que pode ser acessada através do link: https://github.com/arthaud/git-dumper

Image description

Com isso já foi possível explorar a vulnerabilidade e dumpar o repositório da aplicação em minha máquina.

Image description

Explorando um pouco mais a fundo.
Aqui entramos na importância de ter uma boa base em programação, explorando um pouco os arquivos da aplicação me deparei com uma função que fazia o reset de senha do usuário em caso de esquecimento de senha, basicamente a função criava um hash para a nova senha e utilizava os 8 primeiros dígitos deste mesmo hash para gerar a nova senha.

Image description

Reproduzindo a mesma lógica em minha máquina com seguinte código:

<?php

$randomPassword = uniqid(rand());
$emailPassword = substr($randomPassword, 0, 8);

echo "HASH: $randomPassword | PasswordReset: $emailPassword"

?>
Enter fullscreen mode Exit fullscreen mode

Resultando na seguinte saída:
Image description

Confirmando então, ele utiliza sempre os oito primeiros dígitos gerados inicialmente para criar a nova senha, levando em conta isso temos então um weak password reset que podemos explorar elevando para um possível Account Takeover.

Sabendo então que a nova senha terá sempre um tamanho único e utiliza números, podemos realizar um ataque de brute force.

Primeiramente realizo o reset em uma conta disponibilizada para os testes.

Image description

Então simulo um login e faço a interceptação utilizando um proxy para capturar os parâmetros passados para executar o login de um usuário.

Image description

Agora utilizando a ferramenta wfuzz, realizei o brute force na aplicação com o seguinte comando:

wfuzz -c -z file,passwordlist.txt --hw 262 -d "empEmail=***@***.com.br&password=FUZZ&submit=signIn" https://***/login.php 
Enter fullscreen mode Exit fullscreen mode

Após algum tempo temos o retorno da possível senha encontrada.

Image description

Então bastou realizar a tentativa de login e garantir o acesso a conta, realizando então o Account Takeover.

Image description

Conclusão

Este é meu primeiro write-up publicado oficialmente, tendo em vista que todo processo de teste é sempre carregado de um enorme aprendizado, agregando sempre experiência a cada processo, espero ter conseguido transmitir um pouco de todo este aprendizado neste artigo.

Fique a vontade para entrar em contato a qualquer momento, você pode encontrar minhas redes sociais no meu site logo abaixo:

https://vitorpignataro.github.io/Portfolio-Jose-Vitor/homepage.html

Até a próxima.
José.

Top comments (0)