Cross-Site Scripting
Anotações e resumos dos meus estudos pessoais para a eWPTX

O XSS acontece quando o browser renderiza conteúdos não confiáveis em um ambiente confiável. Se o conteúdo enviado contém uma linguagem dinâmica como HTML, JavaScript ou outro, o conteúdo vai ser executado
XSS pode ser dividido em duas categorias principais:
Server-side
Client-side (impacta somente o cliente)
Reflected XSS
Ocorre quando dados não confiáveis são enviados pelo usuário para uma aplicação web e a resposta é imediatamente mostrada na tela
Exemplo de um código PHP com esse tipo de vulnerabilidade:
Normalmente para explorar essa vulnerabilidade é preciso criar links e envolve um pouco de engenharia social
Persistent XSS
Também conhecido como Stored XSS, é similar ao reflected mas o seu conteúdo fica armazenado na aplicação web, dessa forma todos os visitantes da página são atingidos
Exemplo de um código PHP com esse tipo de vulnerabilidade:
DOM XSS
É um tipo de XSS que acontece somente do lado do cliente. É muito similar ao Reflected XSS mas não interage com o servidor
Exemplo de um código vulnerável:
https://code.google.com/archive/p/domxsswiki/
Universal XSS
Diferente dos outros 3 tipos de XSS o universal XSS não explora falhas em códigos, mas em browsers, extensões e plugins
XSS Attacks
Para que o XSS pode ser usado?
Cookie Gathering
O XSS pode ser usado para obter cookies de usuários, afim de obter informações sensíveis ou realizar um roubo de sessão
Normalmente o roubo de cookies possui 3 passos:
Script Injection
Cookie recording
Logging
Script Injection
Onde é injetado o payload malicioso que vai enviar os cookies para o nosso servidor. O DOM nos permite acessar os cookies usando o document.cookie
Para realizar o roubo do cookie, é preciso enviar o conteúdo do document.cookie para algum lugar onde temos controle, isso pode ser feito usando um script como:
Opções para diferentes cenários:
Cookie Recording & Logging
São os próximos passos, nesse momento já temos uma requisição sendo feita enviando as informações para o nosso servidor, então é necessário tratar e armazenar essa informação
Seguindo o exemplo anterior, podemos supor que temos um script PHP escutando no nosso servidor e esse script vai armazenar as informações em um arquivo
Uma forma simples se fazer esse script é:
Em um cenário onde temos um único servidor recebendo informações de múltiplas páginas web que foram exploradas, é necessário deixar o código um pouco mais complexo, adicionando algumas informações a mais que ajudaram a identificar a origem
Uma forma mais avançada:
Netcat
Se precisa de uma solução rápida para receber os cookies, pode ser usado o netcat
Bypassing HTTPOnly Flag
XST (antiga)
Até agora os ataques vistos só funcionam se o cookie não estiver com a flag HTTPOnly setada.
Para burlar essa proteção foi inventado uma técnica chamada de XST (Cross-Site Tracing), mas ela não funciona mais hoje
Basicamente, essa técnica utiliza o método TRACE para enviar uma requisição contendo o cookie. Ela está descrita nesse paper: https://www.cgisecurity.com/whitehat-mirros/wh-whitepaper_xst_ebook.pdf
CVE-2012-0053
Outra forma de conseguir cookies com HTTPOnly é explorando uma vulnerabilidade no servidor. Um exemplo disso ocorre com o Apache HTTP Server 2.2.x
Essa vulnerabilidade pode ser explorada usando ferramentas como o BeEF ou a POC: https://gist.github.com/pilate/1955a1c28324d4724b7b
BeEF's Tunneling Proxy
Uma alternativa é usar o browser da vitima como um proxy. Basicamente, explorando o XSS podemos usar o browser da vitima para fazer requisições para a aplicação
Para criar esse proxy, podemos usar a ferramenta BeEF, que nos ajuda a realizar hookes no browser. Essa técnica é interessante pois nos permite bypassar não só o HTTPOnly mas todas as proteções de validações usadas pelo servidor
Defacements
O XSS também pode ser usado para fazer defacements em sites. Podemos dividir esse tipo de ataque em 2 categorias: Persistente e Não persistente. Ele também pode ser usado como parte de ataques mais sofisticados
Phishing
É possível utilizar o XSS para fazer ataques de phishing
Normalmente em um ataque de phishing, precisamos criar um site fake ou clonar algum site que será o alvo do ataque, e dentro desse site fake o atacante coloca o código que ele quer executar. Porém, se um site é vulnerável a XSS isso não é necessário, porque é possível colocar o código malicioso no próprio site alvo
Como exemplo, podemos imaginar cenário onde queremos pegar informações de um site. Esse site possui um formulário onde os usuários enviam suas informações, então podemos usar o XSS para modificar o comportamento desse formulário para enviar as informações para o atacante
Cloning a Website
Se quiser clonar um site para colocar o payload podemos usar algumas ferramentas:
Wget
BeEF
Site Cloner
Um ponto muito importante para o sucesso no ataque de phishing após clonar um site é a escolha do domínio que será usado. Quanto mais parecido com o original melhor. Um exemplo de escolha pode ser o seguinte:
Para ajudar na escolha do domínio, podemos usar a ferramenta URLCrazy
Keylogging
As vezes é interessante saber o que a vitima está digitando no site, com isso podemos, por exemplo, ler conversas, senhas, número de cartão de crédito, etc...
Existem diversas formas de se fazer isso. Podemos fazer isso com um simples JavaScript
Também é possível criar um keylogging usando ferramentas como:
BeEF (Event logger)
Metasploit (http_javascript_keylogger)
Keylogging with Metasploit
O metasploit possui o módulo auxiliar "http_javascript_keylogger", que é um script mais avançado que o mostrado acima. Ele cria o payload para ser injetado na página vulnerável
Ele também tem a opção de criar uma página demo para teste usando o:
Keylogging with BeEF
O Event Logger do BeEF é uma versão melhorada dos exemplos acima, pois ele consegue mostrar teclas especiais. Para entender a diferença, vamos imaginar que um usuário tem o login e senha iguais, então ele escreve o login copia e cola no campo de senha, normalmente no keylogger veríamos somente as teclas: acv.
Já com o BeEF conseguimos ver [Ctrl] a - [Ctrl] c - [Ctrl] v
Network Attacks
Com XSS é possível descobrir informações da rede interna explorando o navegador da vitima
IP Detection
Antes de realizar qualquer atividade na rede interna, é interessante levantar informações sobre o ambiente, como por exemplo IPs da rede interna
Existe uma abordagem usada para isso que utiliza o WebRTC do HTML5 para descobrir o endereço de IP local. Uma POC dessa técnica está aqui: http://net.ipcalf.com
Outra POC também foi criada adicionando algumas informações a mais, e pode ser encontrada aqui: https://web.archive.org/web/20160406083801/https://dl.dropboxusercontent.com/u/1878671/enumhosts.html
Essa técnica não funciona em todos os navegadores, para saber se o navegador alvo pode executar essa funcionalidade você pode fazer uma consulta aqui: http://caniuse.com/#feat=rtcpeerconnection
Ainda é possível realizar outras atividades como: descobrir hosts na rede, enumerar portas abertas nos hosts, entre outros. Porém as técnicas utilizadas variam bastante quanto a certeza do resultado
Last updated