XSS — Cross Site Scripting

Gustavo Oliveira
5 min readOct 29, 2014

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.

Sua reação ao perceber que essa “piada” foi realmente muito ruim·

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:

Seguindo todas as PSR’s

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:

http://127.0.0.1/teste.php?nome=%3Cimg%20src=%22http://static1.purebreak.com.br/articles/8/47/38/@/26393-mc-guime-diapo-2.jpg%22%20style=%22position:absolute;top:0;left:0;width:100%;height:100%;%22%20/%3E

Tendo o seguinte resultado:

Contando os plaque de 100 no seu website.

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:

Programadores, não me matem, eu sei escrever um código melhor, eu juro!

Que retorna isso:

Designers, não me matem, eu sei fazer um layout mais bonito que isso, eu juro!

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:

Mimimi, que código feio, mimimimi

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:

CHUPA ESSA MANGA SEU HACKER OTÁRIO!

--

--

Gustavo Oliveira

Desenvolvedor Web, Estudante de Segurança da Informação e Skatista nas horas vagas. Twitter: @Highustavo