Comandos SQLMap importantes

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.

Conclusão

Deixe uma resposta

O seu endereço de email não será publicado.