Pentesting on PHP apps: XSS

Neste artigo veremos um simples Pentest em uma aplicação PHP, onde injetamos códigos em uma aplicação, conseguindo interpretar estes mesmos códigos, podendo realizar uma possível prática de phishing.

[ Hits: 23.021 ]

Por: André em 12/09/2012 | Blog: http://127.0.0.1


Introdução



O artigo fora escrito, inicialmente, para o fork do Viva o Linux, que era o Segurança Linux. Por isso, talvez você encontre referências às informações do Segurança Linux, como endereço, nome etc; nada que comprometa a integridade do artigo.

  • Autor: André S. Rosa Junior
  • Tema: Pentest
  • Plataforma: Web

* Nota 1: Todas as informações apresentadas neste artigo foram obtidas na Internet, sendo assim, não ofereço nenhum tipo de garantia ou suporte. Não nos responsabilizamos por qualquer dano ocorrido, tanto na máquina (computador) quanto no software. Siga por sua conta e risco.

* Nota 2: Para realizar um Pentest, ou uma intrusão, você deve ter autorização. Caso contrário, tal ato pode ser considerado crime, sujeito a punições cabíveis. Todos os testes feitos neste artigo foram autorizados.

Neste artigo iremos realizar um simples pentest, onde tentaremos injetar códigos em um formulário, tentando assim, interpretar estes mesmos códigos.

Caso consigamos interpretar estes mesmos códigos, podemos "criar" nossa própria aplicação em cima disso, com o intuito de realizar phishing, ou melhor dizendo, roubar informações.

Aqui utilizaremos uma técnica chamada XSS, que junto à outras técnicas, como o Clickjacking, podemos fazer um estrago. E posso afirmar que, em 80% dos testes que eu faço neste tipo de aplicação, 90% está vulnerável.

O que é XSS

O XSS (Cross-site scripting) é uma vulnerabilidade muito comum em aplicações WEB (PHP, ASP...), onde podemos injetar códigos HTML e JavaScript nesta mesma aplicação, podendo assim, "modificar" esta página da forma que bem desejarmos.

- Mas isso é Defacement?

R: Não!

Ou melhor, depende do ponto de vista de quem está a explorar. Eu, por exemplo, não vejo o porque de usar isto apenas para "mexer" nos sites alheios para "zoar".

Pois isso é uma vulnerabilidade que permite muito mais, o que falaremos mais a frente, que são as possibilidades. :)

O ataque XSS

Vou tentar explicar a vocês como funciona esta "belezinha". Vamos supor que você tenha um pequeno formulário, escrito em HTML, um botão, que tem como ação enviar o que foi digitado para uma segunda página, a página que conterá os scripts PHP.

A única coisa que este script PHP fará, é criar uma variável pegando o método de envio do formulário (POST/GET) e criando uma variável em cima disso. Logo após, o mesmo irá retornar:
Olá $variável


Esta "variável", depois do "Olá", seria a variável contendo o que haviam digitado no campo de texto.

Agora, vamos supor que ele coloque uma tag HTML no campo de texto, o que será que nos seria retornado na página PHP ? ;*

Vamos ver isso na próxima página!

Let's hack it!

    Próxima página

Páginas do artigo
   1. Introdução
   2. Exemplo de script - Testes
   3. Vulnerabilidade - Formulários - Possibilidades
Outros artigos deste autor

Gerenciamento de programas no Ubuntu através do Synaptic

Linux e Windows: Quebrando Estereótipos

Variáveis, if, else e unless em Ruby

SDL e C - Uma dupla sensacional

Introdução a LUA, uma poderosa linguagem de programação

Leitura recomendada

Introdução a manipulação de erros em PHP

Criptografando mensagens com PHP

Dados sensíveis em arquivos com extensão .inc

Autenticação de sites com PHP e MySQL

Segurança: Autenticando o PHP com HTTP (Authentication Required)

  
Comentários
[1] Comentário enviado por andrezc em 12/09/2012 - 13:15h

Na primeira imagem, talvez pareça que cometi um erro de inglês: "You are secure?", mas esse "?" e a inversão da frase quis por em o "questionamento de uma certeza"; Estou seguro! (?).

Espero que gostem.

[2] Comentário enviado por roberto_espreto em 12/09/2012 - 20:45h

No caso do seu código ai acima, só de ver dá pra saber que pra gerar o "alerta" não necessariamente preciso utilizar as tags <script>, </script>, existem outras alternativas, por exemplo, com onload, onerror, onmouseover, etc. Cara, as que eu me lembro, tem umas 20 maneiras, mas existem bem mais, segue as que citei:

<body onload=alert('Espreto')>
<img src="http://url.para.arquivo/que.nao.existe" onerror=alert(document.cookie);>
<body onmouseover=alert('Espreto! Oops ')>click me!</b>

Outra coisa interessante é que existem classificações de Cross-Site Scripting (XSS): reflected, stored, dom-based e vai.

Não recomendo seguir este link que você postou como "possível solução" e sim o modelo que já existe a anos, que é o "XSS (Cross Site Scripting) Prevention Cheat Sheet [1]", mantido pela OWASP [2] (Open Web Application Security Project).

[1] https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet">https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
[2] https://www.owasp.org/


Abs,

[3] Comentário enviado por andrezc em 13/09/2012 - 09:06h

Valeu pelos toques, Roberto!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts