Write-up: Git Exposed, weak password reset and account takeover.
Tags: security, cybersecurity, hacking, informationsecurity
Published: 2022-08-02 14:39:06


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/plntsh7sqdybvpxgtl6u.jpg)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nqe9nvcuuyaopj1qa7or.png)
 
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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vwqdeifqs4aq2t9cygzl.png)
 

**.git/config**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wj47xrzib34bral72fu1.png)
 
**.gitignore**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/utobo8acw697o9s6ifvl.png)


**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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6at4czl75852tn55kf4.png)
 
Com isso já foi possível explorar a vulnerabilidade e dumpar o repositório da aplicação em minha máquina.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/01heey5mb3k7ad4m6te7.png)

**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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3umn9d0kk1bw2i5yuzp5.png)

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"
 
?>
```
Resultando na seguinte saída:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2vwyekfas0bdmur6l8c.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gtnqdzz5vsmdsip4tcfg.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3vf1po24xcjke99kxgxi.png)

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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1khxv3f15whbh1x08f39.png)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0s9w78v8tez67c99g5og.png)
 
**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é.