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: 19.271 ]

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

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

Trabalhando com classes e métodos em Java (parte 2)

Variáveis, if, else e unless em Ruby

Introdução ao Anonimato na Web - Web Anonimity

Trabalhando com a interface gráfica em Java (parte 2)

Leitura recomendada

Criptografia do método GET no PHP

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

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

XSS - Um exemplo de ataque

Dicas básicas de segurança no PHP

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts