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