Como encontrar uma falha de Git Exposed.
O que é Git | ||
O Git é uma ferramenta de versionamento de código muito utilizada no desenvolvimento de aplicações. Ela permite que desenvolvedores mantenham sempre uma cópia atualizada do código e tenham um controle maior sobre mudanças realizadas. Eu mesmo utilizo o Git para versionar e atualizar esse blog. Sempre que crio uma nova página, realizo a atualização para meu repositório com os novos arquivos e modificações. | ||
Exatamente por ser muito utilizada no desenvolvimento de aplicações é que alguns problemas podem ocorrer, como a vulnerabilidade que vou descrever. | ||
Git Exposed | ||
Git Exposed pode ser definido como uma falha de configuração ou uma vulnerabilidade, dependendo do quão critica é a informação contida no arquivos do repositório. | ||
Por um breve descuido, uma aplicação que utiliza o Git para versionamento pode vir a expor o diretório “.git”. Esse diretório possui arquivos com os logs de todas as mudanças realizadas ao longo do desenvolvimento. | ||
Então, digamos que um desenvolvedor em fase de testes da aplicação acabou utilizando algumas credenciais de acesso, como um usuário e senha por exemplo, e para controle de versões da aplicação utilizou o Git. Em dado momento, obviamente as credenciais foram removidas. Entretanto, as versões criadas ainda constam nos logs do diretório “.git”. | ||
Com esse diretório exposto, é possível realizar o download de todos os arquivos relacionados e acessar os logs de todas as modificações realizadas ao longo do desenvolvimento. | ||
Como encontrar | ||
Google Dorks | ||
Para que possamos realizar as pesquisas de uma forma refinada no Google é possível informar ao buscador alguns comandos. Nesses comandos, podemos informar termos que, combinados, formam os dorks. Neste exemplo, vou demonstrar uma pesquisa em que no título da página conste “Index of /.git” e na página em si “parent directory”. Detalhe, nesse tipo de pesquisas só vão constar páginas indexadas pelo Google, ou seja, em que o diretório “.git” esteja explicitamente exposto, ou seja, é possível navegar dentro do diretório sem restrição de acesso alguma. | ||
Extensão DotGit. | ||
Existe uma extensão para Firefox e Chrome chamada DotGit. Como a própria descrição diz “É uma extensão para verificar se em um site acessado pelo usuário o mesmo possui um repositório .git exposto”. Utilizando o endereço anterior, acessei um dos sites retornados na pesquisa e a extensão já acusou um problema na página. | ||
Dirb | ||
Nem sempre o diretório estará acessível como no exemplo anterior. Pode ser que, ao acessar o diretório “/.git” seja retornado um erro 403, o que significa que o diretório está disponível no servidor, entretanto, não é permitida sua listagem ou acesso direto. Neste caso, é possível realizar o “fuzzing”, uma consulta de diretórios à partir de uma wordlist. Utilizei como exemplo a própria VM do desafio da TryHackMe | ||
Nmap | ||
O nmap possui um script para detectar e testar diversas vulnerabilidades conhecidas, chamado vuln. Utilizei como exemplo a própria VM do desafio da TryHackMe | ||
Gitdumper | ||
Como a própria descrição da ferramenta já diz, com ela é possível realizar um “dump” do repositório na máquina onde está sendo realizado o download. Irei utilizar a ferramenta no CTF da TryHackMe | ||
[CTF] Git Happens - TryHackMe | ||
Resumo | ||
| ||
Questões | ||
Find the Super Secret Password | ||
Th1s_1s_4_L0ng_4nd_S3cur3_P4ssw0rd! | ||
Abri o navegador para verificar se era exibido alguma informação: | ||
Fiz um teste manualmente a procura do diretório “.git” por já saber que o escopo era esse e obtive a listagem de diretórios: | ||
Realizei o download da ferramenta Git-dumper e executei com o comando abaixo: | ||
| ||
Acessei o diretório criado e constatei os arquivos baixados: | ||
Com o comando “git log” verifiquei se o repositório possuia histórico de commits: | ||
Ao analisar os logs, encontrei alguns interessantes, conforme abaixo. Para consultar o log, utilizei o comando “git show {ID_LOG}": | ||
Ao analisar o arquivo, encontrei uma senha que possívelmente foi utilizada em dado momento do desenvolvimento e depois foi excluída: | ||
E obtive a flag: | ||
Links | ||
https://tryhackme.com/room/githappenshttps://github.com/arthaud/git-dumper |