XSS — Cross Site Scripting
Chega de blablabla e vamos fazer algumas coisas legais!
Fala Rapeize! Como cêis tão? Eu vou muito bem, obrigado por perguntarem.
Hoje vou falar um pouco do que sei sobre o CSS ou XSS ou “Aquele coisinho que mostra o alerta”. Mas antes de começar, vamos colocar um som para tocar. Música deixa tudo mais l33t0.
https://www.youtube.com/watch?v=J5TmZ8GI0wc
Cross Site Scripting ou XSS como é conhecido NÃO é um tipo de lanche.
Do contrário do que muita gente pensa, é uma falha perigosíssima quando bem explorada.
Pois então, vamos começar do começo.
Que diabos é esse XSS?
De acordo com o Wikipedia:
Cross-site scripting (XSS) é um tipo de vulnerabilidade do sistema de segurança de um computador, encontrado normalmente em aplicações web que activam ataques maliciosos ao injectarem client-side script dentro das páginas web vistas por outros usuários. Um script de exploração de vulnerabilidade cross-site pode ser usado pelos atacantes para escapar aos controlos de acesso que usam a política de mesma origem.
Eu não consegui concluir o que é “XSS” lendo essa introdução do Wikipedia mas confesso que achei a palavra “controlos” engraçada.
Em outras palavras, XSS é uma forma de ataque onde o atacante consegue rodar códigos javascript no navegador do usuário de forma involuntária.
Acho que agora deu para entender que com XSS a gente consegue redirecionar alguém para algum site pornográfico ou até fazer um “deface”, no site do colega de trabalho. (Essa é pra você, Renan! ❤)
Já sei que posso ser “bem zoeiro” com esse tal de XSS ai… Mas me fala mais dessa parada ae
Meu próprio desejo é uma ordem!
Existem alguns tipos de XSS:
- XSS Reflected (Quando é executado pela URL)
- XSS Stored (Quando é executado ao entrar na página)
- Existe também o Dom Based XSS mas eu vou manter o foco nesses 2 para não deixar o artigo muito extenso (mais do que já está!)
Vou começar abordando o:
XSS Reflected
Vamos supor que você seja programador PHP (EU AMO ESSA LINGUAGEM ❤) e esteja fazendo um sistema revolucionário onde você exibe o nome do usuário. Temos então o seguinte cenário:
Então, meu amigo programador, we have a problem nesse código! Pode ligar para o bombeiro, a nasa, o FBI e para a pizzaria pois eu estou com fome.
Este código não está escapando NADA, isso mesmo, NADA! E nós estamos vulneráveis! Se isso estivesse rodando em produção, eu confesso que ficaria com MUITO MEDO! Mas, chega de conversa (ou leitura) fiada e vamos ver o que podemos fazer:
Por padrão, eu tenho conhecimento que o Google Chrome, Safari e o I.E. (SIM, O INTERNET EXPLORER!) possuem um filtro Anti XSS Reflected. Porém, nós podemos explorar este super website da seguinte forma:
Tendo o seguinte resultado:
Legal, não? Vamos deixar isso mais legal ainda?
E se pudéssemos redirecionar o usuário para um clipe do MC Guimê?
E nós podemos! (No Firefox. Existem algumas maneiras de burlar o filtro XSS do Google Chrome mas isso é assunto para outro dia.)
http://s1.webmshare.com/E3AwY.webm
Eis o XSS Reflected!
Deu pra entender a gravidade da situação? Ainda não???? Não acha que redirecionar o usuário para um clipe do MC Guime é ruim? Eu também não.
Maaaaaaaas, vamos para algo mais tenebroso? E se conseguíssemos roubar os cookies de um usuário?
Senhoras e senhores, vos apresento:
XSS STORED
XSS Stored é o tipo de XSS onde o usuário NÃO precisa abrir uma URL ridícula com um uns scripts doidões e você dizendo que é normal (Digamos que eu entenda de engenharia social).
Neste segundo caso, teremos um exemplo mais elaborado, onde você não terá um super sistema que exibe o seu nome, porém, um SUPER LIVRO DE VISITAS!
Vamos ao exemplo, você possui esse código:
Que retorna isso:
Bom, repararam que ali eu tenho um Cookie Secreto? (Linha 4)
Poderia muito bem ser o seu COOKIE DE LOGIN DO SISTEMA!
Lembram que o XSS Stored roda no lado do Cliente? Pois então, o Cookie também fica no lado do cliente! Entenderam o raciocínio? Vamos criar um CookieLogger, ou seja, todos que entrarem no site, vão ter os seus Cookies Raptados.
Exemplo de cookielogger:
Vamos criar um script que vai redirecionar todos os usuários que abrirem o site e vamos roubar os cookies deles!
RIPA NA CHULIPA! Todos que entrarem no site serão redirecionados para aquela página, onde vamos roubar os Cookies e então entrar na conta deles para causar discórdia!
Deu para entender o perigo?
Você só mostrou como faz para ferrar com a vida de alguém, e para arrumar?
Bom, meu jovem gafanhoto, para arrumar essa vulnerabilidade, basta que você “escape” as Tags HTML. Com PHP isso é facilmente resolvido com um: htmlentities(); — Veja a imagem.
E então temos o resultado: