javascript injection tutorial
O que é injeção de Javascript?
Javascript é uma das tecnologias mais populares e mais amplamente usada para páginas e aplicativos da web.
Ele pode ser usado para realizar diferentes funcionalidades do site. No entanto, essa tecnologia pode trazer alguns problemas de segurança, sobre os quais o desenvolvedor e testador devem estar cientes.
Javascript pode ser usado não apenas para bons propósitos, mas também para alguns ataques maliciosos. Uma delas é a injeção de JavaScript. A essência do JS Injection é injetar o código Javascript, que será executado do lado do cliente.
Neste tutorial, aprenderemos mais sobre como verificar se a injeção de Javascript é possível, como a injeção de JS pode ser realizada e quais são as consequências que a injeção de JS pode trazer.
O que você aprenderá:
- Riscos de injeção de JavaScript
- Por que é importante testar a injeção JS?
- Comparação com outros ataques
- Verificando injeção de JavaScript
- Modificação de Parâmetros
- Modificação do design do site
- Como testar contra injeção de JavaScript
- Possível proteção contra este ataque
- Conclusão
- Leitura recomendada
Riscos de injeção de JavaScript
JS Injection traz muitas possibilidades para um usuário malicioso modificar o design do site, obter informações do site, alterar as informações do site exibido e manipular os parâmetros (por exemplo, cookies). Portanto, isso pode causar sérios danos ao site, vazamento de informações e até hack.
O principal objetivo do JS Injection é alterar a aparência do site e manipular os parâmetros. As consequências da injeção de JS podem ser muito diferentes - desde danificar o design do site até acessar a conta de outra pessoa.
Por que é importante testar a injeção JS?
Muitos perguntariam se o teste de injeção JS é realmente necessário.
A verificação de vulnerabilidades do JS Injection faz parte dos testes de segurança. O teste de segurança geralmente é realizado apenas se ele foi incluído no planejamento do projeto, pois requer tempo, muita atenção e verificação de múltiplos detalhes.
Percebi que, durante a realização do projeto, é bastante comum pular o teste contra quaisquer ataques possíveis - incluindo JS Injection. Dessa forma, as equipes tentam economizar tempo do projeto. No entanto, esta prática muitas vezes termina com reclamações do cliente.
Deve-se saber que o teste de segurança é altamente recomendado, mesmo que não esteja incluído nos planos do projeto. A verificação dos principais ataques possíveis deve ser realizada - ao mesmo tempo, deve-se verificar as possíveis vulnerabilidades do JS Injection.
Saindo do Javascript simples Vulnerabilidades de injeção no produto pode custar a qualidade do produto e a reputação da empresa. Sempre que aprendi a testar contra possíveis ataques e em testes de segurança em geral, nunca pulo esta parte do teste. Assim, fico mais seguro quanto à qualidade do produto.
Comparação com outros ataques
Deve ser mencionado que JS Injection não é tão arriscado quanto Injeção SQL , uma vez que é executado no lado do cliente e não atinge o banco de dados do sistema como acontece durante o ataque de injeção SQL. Além disso, não é tão arriscado quanto um ataque XSS.
Durante esse ataque, às vezes, apenas a aparência do site pode ser alterada, enquanto o principal objetivo do ataque XSS é hackear os dados de login de outros.
No entanto, o JS Injection também pode causar sérios danos ao site. Ele pode não apenas destruir a aparência do site, mas também se tornar uma boa base para hackear os dados de login de outras pessoas.
Verificando injeção de JavaScript
Quando você está começando a testar o JS Injection, a primeira coisa que você deve fazer é verificar se o JS Injection é possível ou não. Verificar a possibilidade deste tipo de injeção é muito fácil - ao navegar para o site, você deve digitar o código de barras do endereço do navegador como este:
javascript: alert (‘Executado!’);
Se uma janela pop-up com uma mensagem ‘Executado!’ For exibida, o site está vulnerável a JS Injection.
Em seguida, na barra de endereço do site, você pode tentar vários comandos Javascript.
Deve ser mencionado que o JS Injection não é possível apenas a partir da barra de endereços do site. Existem vários outros elementos do site, que podem ser vulneráveis a JS Injection. O mais importante é saber exatamente as partes do site que podem ser afetadas pela injeção de Javascript e como verificá-las.
Os alvos de injeção JS típicos são:
- Vários fóruns
- Campos de comentários do artigo
- Livros de visitas
- Quaisquer outros formulários onde o texto pode ser inserido.
Para testar se este ataque é possível para o formulário de salvamento de texto, apesar de fornecer texto normal, digite o código Javascript conforme mencionado abaixo e salve o texto no formulário e atualize a página.
javascript: alert (‘Executado!’);
Se a página recém-aberta incluir uma caixa de texto com a mensagem ‘Executado!’, Então este tipo de ataque de injeção é possível para o formulário testado.
Se em ambas as formas uma caixa de texto com a mensagem aparecer, você pode tentar quebrar o site com métodos mais complicados de JS Injection. Então você pode tentar diferentes tipos de injeção - modificação de parâmetros ou modificação de projeto.
Obviamente, a modificação dos parâmetros é considerada mais arriscada do que a modificação do projeto. Portanto, durante o teste, mais atenção deve ser dedicada à modificação dos parâmetros.
Além disso, deve-se ter em mente que as partes mais vulneráveis do site para injeção de Javascript são campos de entrada, onde qualquer tipo de dados é salvo.
Modificação de Parâmetros
Como mencionado anteriormente, um dos possíveis danos da injeção de Javascript é a modificação de parâmetros.
Durante este ataque de injeção, um usuário malicioso pode obter informações de parâmetros ou alterar qualquer valor de parâmetro( Exemplo ,configurações de cookies). Isso pode causar riscos bastante graves, pois um usuário mal-intencionado pode obter conteúdo confidencial. Esse tipo de injeção pode ser executado usando alguns comandos Javascript.
Vamos lembrar, que o comando Javascript que retorna o cookie da sessão atual é escrito de acordo:
javascript: alert (document.cookie);
Inserido na barra de URL do navegador, ele retornará uma janela pop-up com os cookies da sessão atual.
Se o site estiver usando cookies, podemos ler informações como id de sessão do servidor ou outros dados do usuário armazenados nos cookies.
Deve ser mencionado que em vez de alert (), qualquer outra função Javascript pode ser usada.
Por exemplo ,se encontrarmos um site vulnerável, que armazena a id de sessão no parâmetro de cookie ‘session_id’. Então, podemos escrever uma função, que altera o ID da sessão atual:
javascript: void (document.cookie = “session_id =<>');
Desta forma, o valor do id da sessão será alterado. Além disso, quaisquer outras maneiras de alterar os parâmetros também são possíveis.
Por exemplo, um usuário mal-intencionado deseja fazer login como outra pessoa. Para realizar o login, o usuário malicioso primeiro alterará as configurações do cookie de autorização para verdadeiro. Se as configurações de cookies não forem definidas como 'verdadeiras', o valor do cookie pode ser retornado como 'indefinido'.
c ++ data e hora
Para alterar esses valores de cookie, um usuário mal-intencionado executará de acordo com o comando Javascript da barra de URL do navegador:
javascript: void (document.cookie = “autorização = true“);
No resultado, o parâmetro de cookies atual autorização = falso será alterado para autorização = verdadeiro. Desta forma, um usuário malicioso poderá obter acesso ao conteúdo confidencial.
Além disso, deve ser mencionado que às vezes o código Javascript retorna informações bastante sensíveis.
javascript: alert (document.cookie);
Por exemplo, se o desenvolvedor de um site não for cauteloso o suficiente, ele pode retornar nomes e valores de parâmetros de nome de usuário e senha também. Então, essas informações podem ser usadas para hackear o site ou apenas alterar o valor do parâmetro confidencial.
Por exemplo, com o código abaixo, podemos alterar o valor do nome de usuário:
javascript: void (document.cookie = ”username = otherUser”);
Desta forma, qualquer outro valor de parâmetro também pode ser modificado.
Modificação do design do site
Javascript também pode ser usado para modificar a forma de qualquer site e, em geral, o design do site.
Por exemplo, com Javascript você pode alterar qualquer informação exibida no site:
- Texto exibido.
- Plano de fundo do site.
- Aparência do formulário do site.
- Aparência da janela pop-up.
- A aparência de qualquer outro elemento do site.
Por exemplo, para alterar o endereço de e-mail exibido no site, o comando Javascript apropriado deve ser usado:
javascript: void (document.forms (0) .email.value = ”Test@test.com”) ;
Algumas outras manipulações complicadas com o design do site também são possíveis. Com esse ataque, podemos acessar e alterar a classe CSS do site também.
Por exemplo, se quisermos mudar a imagem de fundo do site com JS Injection, o comando deve ser executado de acordo:
javascript: void (document. background-image: url (“other-image.jpg“);
Além disso, um usuário mal-intencionado pode escrever o código de injeção de JavaScript mencionado abaixo no formulário de inserção de texto e salvá-lo.
javascript: void (alert („Hello!“));
Então, sempre que uma página for aberta, uma caixa de texto com a mensagem “Olá!“ Aparecerá.
O design do site alterado com injeção de Javascript é menos arriscado do que a modificação de parâmetros. No entanto, se o design do site for alterado de forma maliciosa, isso pode custar a reputação da empresa.
Como testar contra injeção de JavaScript
Ele pode ser testado das seguintes maneiras:
- Manualmente
- Com ferramentas de teste
- Com plug-ins de navegador
Possíveis vulnerabilidades de Javascript podem ser verificadas manualmente se você tiver um bom conhecimento de como isso deve ser executado. Além disso, pode ser testado com várias ferramentas de automação.
Por exemplo, se você automatizou seus testes no nível da API com a ferramenta SOAP UI, também é possível executar testes de injeção de Javascript com SOAP UI .
No entanto, só posso comentar por experiência própria, que você realmente deveria ter um bom conhecimento sobre a ferramenta SOAP UI para testar com ela para JS Injection, já que todas as etapas do teste devem ser escritas sem erros. Se qualquer etapa do teste for escrita incorretamente, isso também pode causar resultados de teste de segurança errados.
Além disso, você pode encontrar vários plug-ins do navegador para verificar possíveis ataques. No entanto, é recomendável não se esquecer de verificar o ataque manualmente, pois ele geralmente retorna resultados mais precisos.
Eu gostaria de dizer que testar manualmente a injeção de Javascript me deixa mais confiante e seguro sobre a segurança do site. Desta forma, você pode ter certeza de que nenhum formulário foi perdido durante o teste e todos os resultados estão visíveis para você.
Para testar a injeção de Javascript, você deve ter conhecimento geral sobre Javascript e deve saber quais partes do site são mais vulneráveis. Além disso, você deve se lembrar que o site pode ser protegido contra JS Injection e durante o teste, você deve tentar quebrar essa proteção.
Desta forma, você terá certeza se a proteção contra este ataque é forte o suficiente ou não.
Possível proteção contra este ataque
Em primeiro lugar, para prevenir este ataque, todas as entradas recebidas devem ser validadas. A entrada deve ser validada sempre, e não apenas quando os dados são inicialmente aceitos.
É altamente recomendável não confiar na validação do lado do cliente. Além disso, é recomendável executar uma lógica importante no lado do servidor.
Muitos tentam se proteger contra a injeção de Javascript alterando as aspas para duplas e o código Javascript não deve ser executado dessa forma.
Por exemplo, se você escrever no campo de comentário qualquer coisa com aspas ..., essas aspas serão substituídas por - duplo -<>...<>. Desta forma, o código Javascript inserido não será executado.
Percebi que substituir as aspas por aspas duplas é uma prática bastante comum para evitar possíveis ataques de injeção de JS. No entanto, existem algumas maneiras de codificar as aspas para executar o código de injeção JS. Portanto, alterar aspas para o dobro não é uma forma perfeita de proteção contra esse ataque.
Conclusão
Deve-se ter sempre em mente que a injeção de Javascript é um dos ataques possíveis contra sites, visto que Javascript é uma das tecnologias mais utilizadas para os sites. Portanto, ao testar sites ou quaisquer outras tecnologias da web, não deve ser esquecido de testar contra esse ataque.
Ao realizar testes de segurança, JS Injection não deve ser esquecido. Algumas pessoas consideram este teste como um ataque menos arriscado, pois é realizado no lado do cliente.
No entanto, é a abordagem errada e devemos sempre lembrar que a injeção de Javascript pode causar sérios danos ao site, como vazamento de informações confidenciais, alteração de parâmetros ou invasão de contas de usuário.
Portanto, devemos considerar isso como uma parte importante do teste e é uma parte do investimento para bons produtos e reputação da empresa.
O teste de injeção JS não é muito difícil. Em primeiro lugar você deve ter conhecimentos gerais sobre Javascript e deve saber verificar se este ataque é possível para a solução web atual ou não.
Além disso, durante o teste, você deve se lembrar que um site pode ter proteção contra esse tipo de ataque, mas pode ser muito fraca - também deve ser verificado. Outra coisa importante a lembrar é que existem diferentes tipos de ataques de injeção de Javascript e nenhum deles deve ser esquecido de testar.
Você realizou testes de injeção de Javascript? Ficaríamos felizes em ouvir de você, fique à vontade para compartilhar suas experiências na seção de comentários abaixo.
Leitura recomendada
- Tutoriais detalhados do Eclipse para iniciantes
- Como configurar a estrutura de teste do Node.js: tutorial do Node.js.
- 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)
- Tutorial de reflexão Java com exemplos
- Tutorial SVN: Gerenciamento de código-fonte usando Subversion
- Tutorial Python DateTime com exemplos
- Tutorial do Tortoise SVN: revisões no repositório de código