Cross-Site Scripting ou ataque XSS

Existem muitos ataques de computador diferentes aos quais estamos expostos, neste tutorial vamos falar sobre o Ataque cibernético de Cross-Site Scripting (XSS). Esse ataque consiste em injetar código indesejado em aplicativos da web. Com isso, um invasor pode alterar o comportamento do aplicativo, que pode corromper dados, perder informações, negar serviço (DoS), etc.

Por exemplo, um invasor pode fazer com que uma página da Web vulnerável redirecione o tráfego para a sua própria, com consequências negativas para o proprietário da página e para os usuários.

Que consequências isso poderia ter?

Variada e séria, mas imagine que o Facebook tenha uma vulnerabilidade desse tipo, o invasor a explora e, ao falsificar a página original, cria-se um clone dessa página, emulando assim o Facebook. Os usuários fazem login e o invasor mantém suas credenciais e, em seguida, simplesmente os redireciona para a página oficial, de forma que o usuário raramente descubra.

Onde podemos verificar se um site é vulnerável?

Você pode fazer isso de várias maneiras, mas a mais comum é em fóruns ou locais onde são permitidos comentários no caso de um ataque persistente, ou nas URLs no caso de um não persistente.

Qual é a causa desta vulnerabilidade?

Porque as páginas não verificam corretamente as entradas de dados feitas pelos usuários, e também a saída não é codificada. Então se você tem uma página web sempre desconfie dos usuários validando seus dados, as linguagens de programação já trazem funções que permitem, por exemplo a função strip_tag O PHP remove as tags HTML (mas olhe as advertências que ele tem).

Tipos de ataque XSSTipo não persistente ou espelhadoNesse ataque, a vítima recebe como parâmetro uma URL manipulada, que conterá o código a ser injetado.

Tipo persistente ou diretoOs dados inseridos pelo usuário serão armazenados no servidor, afetando todos os usuários que se conectarem à web.

Vamos ver exemplos de como o ataque seria realizado a partir de agora.

ObservaçãoO objetivo do tutorial é que você possa testar os aplicativos da web que você cria ou das pessoas que lhe dão permissão, não para que você cometa atos "maliciosos".

1. Exemplo de XSS não persistente


Queremos redirecionar uma pessoa para uma página que controlamos, mas fazendo-a acreditar que está visitando a página original, podemos enviar-lhe um e-mail com o link abreviado (ou não), que tem o seguinte conteúdo:
 http://www.paginadeseada.com/?search=
Com este exemplo, fica claro como é fácil explorar uma vulnerabilidade desse tipo.

2. Exemplo de XSS persistente


Em um comentário podemos colocar um código HTML ou JavaScript, que é salvo no servidor, e que toda vez que a página contendo o comentário é carregada ele redireciona para nossa página web, para este exemplo o seguinte código HTML pode ser inserido:
 
Voltamo-nos para um exemplo diferente dos que vimos agora. Agora veremos exemplos usando DVWA, um aplicativo da web desenvolvido com PHP e MySQL. Este aplicativo já vem no Metasploitable 2, que você pode montá-lo em uma máquina virtual.

Isso nos permitirá testar vários ataques da web, e podemos modificar o grau de segurança (para os exemplos usamos o baixo), também seremos capazes de ver os códigos PHP que estão sendo atacados, então você pode ver o que não para usar em seus códigos.

3. Exemplos XSS refletido DVWA


Nesta seção, veremos vários exemplos, vamos começar. Se colocarmos um nome normal, mesmo Teste, o aplicativo funciona bem, vamos ver a imagem:

PROLONGAR

Se inserirmos o seguinte código como um nome:

 Teste
Vemos que o nome fica em negrito (talvez na imagem não seja muito apreciado):

PROLONGAR

E se colocarmos uma entrada, vai funcionar? Para testá-lo, inserimos o seguinte código:

 
E vemos na imagem a seguir que funcionou:

PROLONGAR

Vamos prosseguir para XSS armazenado (armazenado).

4. Exemplos de DVWA armazenado de XSS


Vamos realizar várias provas de conceito, a primeira coisa que faremos é inserir um pequeno texto acompanhado de um roteiro como comentário, vamos ver o que acontece, o roteiro é o mais fácil possível, é o seguinte:
 Oi e tchau.

PROLONGAR

Quando entramos como na foto anterior, clicamos em Assinar Livro de Visitas, o comentário é enviado, nada de estranho acontece, o texto é visto, não há sinais do script, como podemos ver abaixo:

PROLONGAR

Então, nada aconteceu? Bem, vamos verificar, atualizar a página, e vemos que o alerta salta:

PROLONGAR

Você também pode perceber que o comentário tem apenas Hello, é por isso que o script foi colocado entre o texto, para que você veja que ele o lê, ele para no alerta e quando você clicar em OK você terá o resto do texto e o resto da página que estava faltando (assim como os links verdes que estavam abaixo da parte dos comentários).

Agora vamos inserir um formulário no comentário, você pode ver que o número de caracteres que se pode inserir é limitado a 50, porque vamos inspecionar o código HTML da área de texto do comentário (clique com o botão direito, Inspecionar):

PROLONGAR

Nós vemos maxlength = ”50”, vamos adicionar mais um 0 ao final, permanecendo em 500, como vemos abaixo:

PROLONGAR

E agora vamos comentar o seguinte código HTML:

 Escreva seu nome:
Vemos que ele já aceita, então damos para Assinar Livro de Visitas e vemos o seguinte:

PROLONGAR

O formulário foi inserido, conforme verificamos. Finalmente, se você deseja praticar com o nível médio em XSS armazenado, tente o seguinte:

Altere o número máximo de caracteres que o campo Nome aceita, assim como fizemos antes.

Adicione o seguinte nome:

 Teste 

3º. Como comentário, coloque o que quiser.

4º. Envie o comentário e atualize a tela, você verá que está salvo.

Se você quisesse remover o Cookie, eu mudaria o script para o seguinte:

 
Você verá o seguinte:

Em seguida, deixo o link para um framework chamado XSSer que nos ajudará a detectar, explorar e relatar vulnerabilidades XSS.

Em sua página vem como está instalado (no Kali Linux 2016 já vem) e exemplos de uso.

Vimos as possibilidades que um invasor tem quando apresentado a uma página da web vulnerável, evitar esses ataques não é difícilHoje, em qualquer linguagem de programação, temos funções que tornam nossa vida mais fácil. É importante que antes de lançar uma página web você verifique esses erros, pois podem arruinar o seu negócio.

Se você quiser ver um tutorial em que este aplicativo é usado, mas outros tipos de ataques são realizados: Pentesting com DVWA.

Por fim, será fornecido um link, caso você queira ver outro tipo de ataque, que também trata de injeção de código: injeção de SQL.

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave