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

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


Vulnerabilidade - Formulários - Possibilidades



Explorando a vulnerabilidade

Ok, já que chegamos aqui, vamos pensar em algo que seria interessante para um blackhat, algo como o phishing. Mas como poderíamos nos usufruir do phishing através do XSS?

[+] The answer for this question are html iframes. ;)

Mas como assim, iframes HTML?

Os iframes são bem interessantes, eles permitem você "abrir" uma página dentro de outra. Quantos sites por aí você já não viu com um iframe?

Então, vamos fazer a mesma coisa! Vamos testar primeiro para ver se funciona, se funcionar, teremos uma solução bem interessante para realizar a prática do phishing.

Vamos tentar fazer um iframe através do nosso campo de texto, vamos abrir a página:
Dentro da nossa página, vamos ver?!

Coloque o script em "nome":

<br><br><center>

E em "sobrenome", coloque:

<iframe src='http://segurancalinux.com/falecom/index.php' >

A saída seria:
Beleza! Se conseguimos colocar um frame com um formulário dentro da página, podemos trabalhar nosso página com nosso próprio formulário de phishing...

Vamos ver?!

[+] Make the code in next page... :)

Criando os formulários e testando

Vamos lá...

- index.html:

<html>
<title> Login</title>
<body>
<center>
<form method="GET" ACTION="envia.php">
Usuario:
<br>
<input type="text" name="usuario">
<br>
Senha:
<br>
<input type="password" name="senha">
<br>
<br>
<input type="submit" value="Login">
<br>
</center>
<a href="/#">Esqueci minha senha</a>
<br>
<a href="/#">Cadastrar-se</a>

</body>
</form>
</html>


- envia.php:

<?php

echo "<center> Usuario ou senha invalidos !! </center>";
echo "<br><br>";

?>

<html>

<a href="./">Voltar ></a>

</html>


Vamos agora voltar à primeira página (localhost/index.html) e testar um iframe para o formulário que acabamos de criar.

No campo "nome", coloque o seguinte código:

<br><br><center><iframe src="/Pentest">

E olha só o que nós temos:
[+] Let's go to next page.

Possibilidades

Bom, como você viu, podíamos facilmente enviar esta página para uma pessoa leiga, e ela "tentar" logar, é claro que ali, eu não tinha nenhuma função que levasse os dados até mim, mas eu podia enviar esses dados para o meu e-mail através da página "envia.php".

É claro que no phishing, os blackhat utilizam uma página mais bonitinha, decorada e etc, para facilitar a engenharia social.

O blackhat poderia também "brincar" com o iframe aumentando seu tamanho e largura etc. Mas a intenção aqui é mostrar como funciona a coisa toda.

Enfim, além disso, o blackhat poderia também usar um código para roubar cookies, endereço de IP e outros tipos de informação. Poderia também linkar para o download de um possível backdoor ou trojan, uma página com um Java applet malicioso, ActiveX etc.

Possível solução

O que muitos vem fazendo, é bloquear caracteres como: ) ( > < ' " etc.

Só que existe uma solução mais interessante, algo chamado: "htmlspecialchars"

Vou copiar um pedaço do texto deste link para entenderem melhor:

Certos caracteres têm significado especial em HTML, e seriam representados pela realidade HTML se eles estão preservando seus significados.

Esta função retorna uma string com algumas destas conversões feitas. As transformações feitas são aquelas mais úteis para programação Web. Se você precisa que sejam transformados todos os caracteres da realidade HTML, use "htmlentities()" no lugar dela.

Esta função é útil na prevenção de textos fornecidos pelo usuário contendo marcação HTML, tal como um quadro de mensagens ou guest book.

O segundo argumento opcional, quote_style, conta à função o que fazer com os caracteres aspas simples e dupla.

O modo padrão, ENT_COMPAT, é o modo mais compatível com a atualidade, apenas transforma a aspas duplas e deixa a aspas simples como está.

Se ENT_QUOTES está definida, ambas transformadas e se ENT_NOQUOTES está definida nenhuma das duas são modificadas.


Fonte: htmlspecialchars « www.itmnetworks.com.br

E como referência: htmlspecialchars « php.net

Bom, é isso. Espero que tenham gostado.

André S. Rosa Junior
Meu blog (literatura): http://nocivoeostensivo.blogspot.com.br

Página anterior    

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

Recuperando arquivos em um Windows corrompido com Linux

Gerenciamento de programas no Ubuntu através do Synaptic

Introdução ao Anonimato na Web - Web Anonimity

Acessando o Linux via SSH através do Android

Computação Forense - Entendendo uma perícia

Leitura recomendada

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

Vulnerabilidade em formulário PHP

Instalações PHP não seguras

Criptografia do método GET no PHP

XSS - Um exemplo de ataque

  
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