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.
- Reconhecimento
- Exploração
- 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
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.
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
Com isso já foi possível explorar a vulnerabilidade e dumpar o repositório da aplicação em minha máquina.
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.
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"
?>
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.
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.
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
Após algum tempo temos o retorno da possível senha encontrada.
Então bastou realizar a tentativa de login e garantir o acesso a conta, realizando então o Account Takeover.
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)