cross site scripting attack tutorial with examples
Um guia completo para ataque de cross Site Scripting (XSS), como evitá-lo e teste de XSS.
Cross Site Scripting (XSS) é um dos ataques mais populares e vulneráveis, conhecido por todos os testadores avançados. É considerado um dos ataques mais arriscados para as aplicações web e também pode trazer consequências danosas.
O XSS é frequentemente comparado a ataques semelhantes do lado do cliente, pois as linguagens do lado do cliente são usadas principalmente durante esse ataque. No entanto, o ataque XSS é considerado mais arriscado, devido à sua capacidade de danificar tecnologias ainda menos vulneráveis.
Neste tutorial de ataque XSS, daremos uma visão geral completa de seus tipos, ferramentas e medidas preventivas com exemplos perfeitos em termos simples para seu fácil entendimento.
O que você aprenderá:
- Introdução ao ataque XSS
- Como o XSS está sendo executado?
- Tipos de ataques de script entre sites
- Como testar o XSS?
- Ferramentas de teste XSS
- Comparação com outros ataques
- Maneiras de prevenir XSS
- Prevenção de acordo com tecnologias
- Folhas de dicas de XSS
- Conclusão
- Leitura recomendada
Introdução ao ataque XSS
O ataque Cross Site Scripting é uma injeção de código malicioso, que será executado no navegador da vítima. O script malicioso pode ser salvo no servidor da web e executado sempre que o usuário chamar a funcionalidade apropriada. Também pode ser executado com os outros métodos - sem nenhum script salvo no servidor da web.
O principal objetivo deste ataque é roubar os dados de identidade do outro usuário - cookies, tokens de sessão e outras informações. Na maioria dos casos, esse ataque está sendo usado para roubar os cookies de outra pessoa. Como sabemos, os cookies nos ajudam a fazer o login automaticamente. Portanto, com cookies roubados, podemos fazer o login com as outras identidades. E esta é uma das razões pelas quais este ataque é considerado um dos ataques mais arriscados.
O ataque XSS está sendo executado no lado do cliente. Ele pode ser executado com diferentes linguagens de programação do lado do cliente. No entanto, na maioria das vezes, esse ataque é realizado com Javascript e HTML.
Leitura recomendada=> Tutorial de injeção de HTML
Como o XSS está sendo executado?
Ataque Cross Site Scripting significa enviar e injetar código ou script malicioso. O código malicioso geralmente é escrito com linguagens de programação do lado do cliente, como Javascript, HTML, VBScript , Flash, etc. No entanto, Javascript e HTML são usados principalmente para executar este ataque.
Este ataque pode ser executado de diferentes maneiras. Dependendo do tipo de ataque XSS, o script malicioso pode ser refletido no navegador da vítima ou armazenado no banco de dados e executado todas as vezes, quando o usuário chama a função apropriada.
A principal razão para este ataque é a validação de entrada do usuário inadequada, onde entradas maliciosas podem entrar na saída. Um usuário malicioso pode inserir um script, que será injetado no código do site. Então o navegador não consegue saber se o código executado é malicioso ou não.
Portanto, um script malicioso está sendo executado no navegador da vítima ou qualquer formulário falso está sendo exibido para os usuários. Existem várias formas nas quais o ataque XSS pode ocorrer.
As principais formas de Cross Site Scripting são as seguintes:
- Cross Site Scripting pode ocorrer no script malicioso executado no lado do cliente.
- Página ou formulário falso exibido para o usuário (onde a vítima digita credenciais ou clica em um link malicioso).
- Nos sites com anúncios exibidos.
- Emails maliciosos enviados para a vítima.
Esse ataque ocorre quando o usuário malicioso encontra as partes vulneráveis do site e as envia como entrada maliciosa apropriada. Um script malicioso está sendo injetado no código e enviado como saída para o usuário final.
Vamos analisar um exemplo simples: Considere que temos um site com um campo de pesquisa.
Se o campo de pesquisa estiver vulnerável, quando o usuário inserir qualquer script, ele será executado.
Considere que um usuário insere um script muito simples, conforme mostrado abaixo:
alert(‘XSS’)
Depois de clicar no 'Procurar' botão, o script inserido será executado.
Como vemos no Exemplo ,o script digitado no campo de pesquisa é executado. Isso apenas mostra a vulnerabilidade do ataque XSS. No entanto, um script mais prejudicial também pode ser digitado.
Muitos testadores confundem ataque Cross Site Scripting com Injeção de Javascript , que também está sendo executado no lado do cliente. Em ambos, o script malicioso do ataque está sendo injetado. No entanto, no caso de ataque XSS, as tags não são necessárias para executar o script.
Por exemplo :
;
Além disso, pode ser um script executado no outro evento.
Por exemplo:Em um passe do mouse.
Vamos analisar outro exemplo:Considere, nós temos uma página, onde a última resenha do livro está sendo exibida no site.
O código desta página terá a seguinte aparência:
print '' print '. If this vulnerability is present in the web application, an indicated text will be inserted intags. Trying to pass some code through HTTP request as this is also a method to check if this attack is possible.
Generally, while testing for possible XSS attack, input validation should be checked and the tester should be conscious while checking the website’s output. Also if a code review is being performed, it is important to find how input can get into the output.
XSS Testing Tools
As Cross Site Scripting attack is one of the most popular risky attacks, there are a plenty of tools to test it automatically. We can find various scanners to check for possible XSS attack vulnerabilities – like, Nesus and Nikto. Both of which are considered as quite reliable.
From my software testing career, I would like to mention SOAP UI tool. SOAP UI can be considered as a quite strong tool for checking against the possible XSS attacks. It contains ready templates for checking against this attack. It really simplifies the testing process.
However, in order to test for this vulnerability with SOAP UI tool, API level testing should already be automated with that tool. Another solution to test against XSS can be browser plugins. However, plugins are considered as quite a weak tool to check against this type of attack.
Even while testing automatically, the tester should have good knowledge of this attack type and should be able to analyze the results appropriately.
Good knowledge is also helpful while selecting the testing tool. Also, it is important to know, that while performing scanning for security vulnerabilities with an automatic tool, testing manually is also a good practice and this way the tester will be able to see the results and analyze them.
Recommended Tool:
#1) Kiuwan
Find and fix vulnerabilities in your code at every stage of the SDLC.
Kiuwan is compliant with the most stringent security standards including OWASP, CWE, SANS 25, HIPPA, and more. Integrate Kiuwan in your IDE for instant feedback during development.
Kiuwan supports all major programming languages and integrates with leading DevOps tools.
=> Scan your code for free
Comparison with Other Attacks
XSS is considered to be one of the riskiest attacks, as its main purpose is to steal the website’s or system’s user identities. Also, XSS attack can be performed with different client-side languages like Javascript, HTML, VBScript, Flash, etc. And this makes it more harmful and widespread than the other possible attacks.
Testing for XSS attack is quite similar to testing for the other possible client-side attacks. However, it is important to remember what additional cases should be checked while testing for XSS.
Another thing, that makes this attack riskier is the possibility to be stored in the web service – this way it can affect many users for a longer period of time. XSS sometimes can be performed to even less vulnerable systems and its vulnerabilities are sometimes difficult to be found.
Also, while comparing with the other attacks, XSS has many ways to be performed and affect the website as well.
Ways to Prevent XSS
Though this type of attack is considered to be one of the most dangerous and risky one, still a preventing plan should be prepared. Because of the popularity of this attack, there are quite many ways to prevent it.
Commonly used main prevention methods include:
- Data validation
- Filtering
- Escaping
The first step in the prevention of this attack is Input validation . Everything, that is entered by the user should be precisely validated, because the user’s input may find its way to the output. Data validation can be named as the basis for ensuring the system’s security. I would remind, that the idea of validation is not to allow inappropriate input.
Therefore it just helps to reduce the risks, but may not be enough to prevent the possible XSS vulnerability.
Another good prevention method is user’s input filtering. The idea of the filtering is to search for risky keywords in the user’s input and remove them or replace them by empty strings.
Those keywords may be:
- tags
- Javascript commands
- HTML markup
Input filtering is quite easy to practice. It can be performed in different ways too.
Like:
- By developers who have written server-side code.
- Appropriate programming language’s library is being used.
In this case, some developers write their own code to search for appropriate keywords and remove them. However, the easier way would be to select appropriate programming languages library to filter the user’s input. I would like to comment, that using libraries is a more reliable way, as those libraries were used and tested by many developers.
Another possible prevention method is characters escaping . In this practice, appropriate characters are being changed by special codes. For Example, Meanwhile, good testing should not be forgotten as well. It should be invested in good software testers knowledge and reliable software testing tools. This way good software quality will be better assured.
Prevention According to Technologies
As already discussed, filtering and characters escaping are the main prevention methods. However, it can be performed differently in different programming languages. Some programming languages have appropriate filtering libraries and some do not.
It should be mentioned, that filtering can be performed quite easily in Java and PHP programming languages, as they have appropriate libraries for it.
Java technology is quite widely used, therefore there are many solutions to it. If you are using Spring technology and if you would like to escape HTML for the whole application, then you have to write the appropriate code in the project’s web.xml file.
defaultHtmlEscape true
Este código mudará o escape de HTML para todo o aplicativo.
Se você quiser mudar o escape de HTML para os formulários da página apropriada, o código deve ser escrito da seguinte maneira:
Existem muitos filtros XSS prontos na forma de um arquivo .jar. Gostaria de lembrar que esse arquivo .jar deve ser adicionado ao seu projeto e só assim suas bibliotecas poderão ser utilizadas. Um desses filtros XSS é xssflt.jar, que é um filtro de servlet. Este arquivo .jar pode ser facilmente baixado da Internet e adicionado ao seu projeto.
Esse filtro verifica todas as solicitações enviadas ao aplicativo e as limpa de uma possível injeção.
ferramentas de teste de estresse para aplicação web
Quando um arquivo external.jar é adicionado ao projeto, ele também deve ser descrito no arquivo web.xml:
XSSFilter com.cj.xss.XSSFilter
Outra solução possível é a biblioteca ESAPI. A biblioteca ESAPI é compatível com muitas linguagens de programação. Você pode encontrar bibliotecas ESAPI para linguagens de programação Java e PHP. É uma biblioteca de código aberto e gratuita, que ajuda a controlar a segurança do aplicativo.
Folhas de dicas de XSS
As Folhas de Cheat XSS podem ser muito úteis para a prevenção de scripts entre sites. É uma orientação para os desenvolvedores sobre como prevenir ataques XSS. As regras são muito úteis e não devem ser esquecidas durante o desenvolvimento. As folhas de dicas do XSS podem ser encontradas em comunidades da Internet como o OWASP (The Open Web Application Security Project).
Diferentes tipos de folhas de referência:
- Folha de dicas de prevenção de XSS
- Folha de referências do DOM XSS
- Folha de dicas de evasão do filtro XSS
A principal diretriz seria a Folha de Dicas de Prevenção XSS, pois ela fornece regras comuns para a prevenção de ataques XSS. Se você seguiria as regras da folha de dicas do DOM XSS e da folha de dicas de evasão do filtro XSS, você ainda teria que seguir a folha de dicas da prevenção XSS.
Conforme declarado, a Folha de Dicas de Prevenção XSS pode ser encontrada na comunidade OWASP. Esta folha de dicas nos fornece uma lista de regras que nos ajudariam a reduzir os riscos de possíveis ataques XSS. Não são apenas as regras de codificação, mas também as vulnerabilidades de segurança com base na prevenção.
Algumas das regras incluem:
- Dados não confiáveis não devem ser inseridos.
- O HTML deve ser escapado antes de inserir qualquer dado não confiável.
- O atributo deve ser escapado antes de inserir os dados não confiáveis, etc.
Portanto, a Folha de Dicas pode ser muito útil na prevenção desse tipo de ataques.
Conclusão
Durante o teste, é altamente recomendável avaliar os riscos que trazem possíveis ataques XSS. O ataque XSS pode afetar aplicativos da web, que também parecem seguros.
É considerado um dos ataques mais nocivos e arriscados. Portanto, não devemos nos esquecer desse tipo de teste. Ao realizar o teste em relação ao XSS, é importante ter um bom conhecimento sobre esse ataque. E esta é a base para analisar os resultados dos testes corretamente e escolher as ferramentas de teste adequadas.
Você é um testador que já lidou com ataques XSS de script entre sites? Você tem algum fato interessante sobre os ataques XSS que também ajudaria nossos leitores? Sinta-se à vontade para compartilhar suas experiências conosco na seção de comentários abaixo !!
Leitura recomendada
- Tutoriais detalhados do Eclipse para iniciantes
- Tutorial de injeção de HTML: tipos e prevenção com exemplos
- Tutorial de teste de injeção de SQL (exemplo e prevenção de ataque de injeção de SQL)
- O que é ataque DDoS e como fazer DDoS?
- Tutorial do Selenium Grid: configuração e exemplo de teste entre navegadores
- Tutorial de reflexão Java com exemplos
- Tutorial SVN: Gerenciamento de código-fonte usando Subversion
- Tutorial Python DateTime com exemplos