O SQLMap é um script de exploração de falhas de SQL Injection. Já postamos bastante material sobre o assunto no blog, e até como identificar essas falhas manualmente e com scripts automatizados como o Uniscan, Arachni, Nikto e etc, além do mais, um dos primeiros posts do blog foi sobre exploração de falhas de SQL Injection via GET. Recomendo que estude esses exemplos primeiro para entender melhor o que se passa aqui.
Realizando o Teste Automatizado
Primeiro vamos varrer a aplicação em busca de falhas.
# uniscan -qdws testphp.vulnweb.com/
Após o termino da varredura, o uniscan irá nos apresentar um relatório com as vulnerabilidades e informações encontradas na URL que estamos a analisar. Você pode aprender mais sobre o Uniscan lendo uma postagem que eu fiz há um tempo, você poderá encontrá-la clicando aqui.
Realizando o teste manualmente
O teste automatizado é conhecido por gerar muito ruido no servidor, sendo facilmente detectável. Eu sei que é possível realizá-lo por meio de Proxy. Efetuamos um artigo explicando como, mas não é disso que estou falando, é de o alvo saber que há alguém atacando a aplicação e podendo tomar medidas preventivas que podem retardar ou prejudicar o ataque.
O melhor modo possível é fazer manualmente, explorando os forms do site manualmente realizando ataques de SQL Injection na mão.
Setup do Proxy Burp suite
Primeiramente vamos abrir o Burpsuite.O Burpsuite é um proxy que nos auxilia com as respostas do servidor ao navegador e vice e versa, gerando um histórico para análise de tudo que enviamos e recebemos via POST e GET,
Link do Projeto: https://portswigger.net/burp/
Agora vamos precisar abrir o Burpsuite e o Firefox (Ou Iceweasel).
Com o BURP SUITE aberto, vá nas configurações de rede do navegador, aponte o proxy para o seu localhost na porta 8080. Deste modo, ele vai encaminhas todas as requisições e respostas para a porta 8080 da nossa máquina que será analisada pelo Burp Suite.
Vamos efetuar a análise em um formulário de cadastro
http://testphp.vulnweb.com/signup.php
Vamos inserir dados booleanos nos campos do formulário para tentar gerar alguns erros de SQL para identificarmos uma falha exposta.
Podemos testar todos os campos, um a um ou todos de uma vez explorando os campos para que eles nos retornem erros de sintaxe SQL
Realizando a exploração via POST Data
Diferente de interpretar a resposta inteira do HTTP e colocá-lo em um arquivo texto, vamos pegar somente o post data, ou seja, as informações que enviamos para o servidor, e realizar o injection somente com essa informação. Em alguns casos, essa tecnica pode evitar um desperdício de performance.Agora abra vá até a aba Proxy do Burpsuite aberto e selecione HTTP History. Aqui ele vai marcar todas as requisições que o software capturou e irá interpretar se é POST ou GET.
Vamos nessa primeira requisição via método POST e vamos analisá-la. Ela foi a que enviamos por meio do navegador para o servidor, clicando em cima dela podemos retirar informações importantes sobre o que foi enviado e interpretado.
Nela podemos identificar que o formulário localizado na página /signup.php foi enviado via post para a o arquivo /newuser.php, no caso é esse arquivo que causou o erro, e é nele que devemos efetuar os ataques via POST com o SQLmap
Vemos que enviamos um punhado de informações, as que geraram o erro de SQL na página. Mais precisamente
uuname=nanoshots+%27or+1+%3D+%271%27&upass=&upass2=&urname=&ucc=&uemail=&uphone=&uaddress=&signup=signup
Então é esse punhado de informações enviadas que causou o erro, e é ele que vamos utilizar para efetuar o ataque, para isso iremos colocá-lo no parâmetro --data na sintaxe do SQLmap
Vamos lá
#sqlmap -u http://testphp.vulnweb.com/secured/newuser.php --data="uuname=nanoshots+%27or+1+%3D+%271%27&upass=&upass2=&urname=&ucc=&uemail=&uphone=&uaddress=&signup=signup" --dbs
Prossiga com as torinas normais do SQLmap optando ou não pelo teste das demais variáveis além da uuname que aplicamos a injeção, no final ele vai te retornar as databases encontradas.
Agora vamos explorar:
Primeiro vamos efetuar um Dump de todas as tabelas existentes no banco "acuart" que encontramos, para isso vamos especificar o banco com o parâmetro -D e fazer o dump das tabelas com --tables
sqlmap -u http://testphp.vulnweb.com/secured/newuser.php --data="uuname=nanoshots+%27or+1+%3D+%271%27&upass=&upass2=&urname=&ucc=&uemail=&uphone=&uaddress=&signup=signup" -D acuart --tables
Vamos verificar a tabela users, fazendo o dump das colunas da tabela
sqlmap -u http://testphp.vulnweb.com/secured/newuser.php --data="uuname=nanoshots+%27or+1+%3D+%271%27&upass=&upass2=&urname=&ucc=&uemail=&uphone=&uaddress=&signup=signup" -D acuart -T users --columns
Agora finalmente vamos realizar o dump das informações das colunas, name, uname e pass
sqlmap -u http://testphp.vulnweb.com/secured/newuser.php --data="uuname=nanoshots+%27or+1+%3D+%271%27&upass=&upass2=&urname=&ucc=&uemail=&uphone=&uaddress=&signup=signup" -D acuart -T users -C 'name,uname,pass' --dump
Realizando ataque via resposta do HTTP
Novamente no Burp Suite, vamos até a o request POST que efetuamos para o servidor. Copie todo o conteúdo do request e cole dentro de um arquivo chamado post.txt. Esse método é útil quando o navegador envia, recebe e valida vários tipos de informação, no caso de cookies e sessões. Todo o conteúdo enviado, incluindo as informações de cookies, sessões, informações, horários, niveis de permissão vão ser enviadas.
Detalhe: Por mais que esse seja o método mais fácil, vale ressaltar que é bom utilizá-lo somente quando for realmente necessário, ou seja, quando o envio por POST data não for o suficiente, pois a performance dele tente a ser mais inferior e tende a gerar quase o triplo de ruido na aplicação.
Copie todo o conteúdo da Requisição POST
E com seu editor de texto favorito, crie um arquivo chamado post.txt e cole o conteúdo copiado dentro dele. Em seguida feche o arquivo.
# vim post.txt
Agora vamos efetuar o ataque tendo como referência somente este arquivo. Se o analisarmos bem, ele contem todas as informações necessárias para realizar o ataque manualmente. Temos a página de origem, a página alvo, o tipo de método utilizado e as variáveis utilizadas para explorar a falha de SQL Injection.
Vamos executar o SQL map com o parâmetro -r, que é o parâmetro de leitura e apontar o arquivo que criamos anteriormente
root@fidelis:/home/matheus# sqlmap -r post.txt --dbs
Leia também: Explorando falhas de SQL Injection via GET com SQLmap
:)
Nenhum comentário