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.060 ]

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


Exemplo de script - Testes



Um exemplo de script

Vou agora mostrar a vocês, um script que eu fiz em HTML (formulário) e o script PHP.

"Let's make these codes." :-)

- index.html:

<html>
<title> .:: Pentest 4 SegurancaLinux.com ::. </title>
<center>


<br><br>
<h1><storng>Entre com tais dados:</h1></strong>
<form method = "GET" action ="dados.php">
Nome: <br>
<input type ="textArea" name="nome">
<br>
Sobrenome: <br>
<input type = "textArea" name="sobrenome">
<br>
<br>
<input type="submit" value="Enviar dados">
<input type = "reset" value="Apagar">
</center>
<br>
<br>
<br>
<center>
<strong> You are secure ? </strong>
<br>
<img src='http://www.vivaolinux.com.br/imagens/dicas/comunidade/glider.png' alt='hacker emblem' title ="Juni0r_L1nuX are here :)"/>
</center>
</form>
</html>

- dados.php:

<?php

/*
* # #
# # #### # # ## ##### ######
# # # # # # # # # # #
# # # # # # # # # #####
# # # # # #### ## ## ### #
# # # # # # # # # #
# #### ### # # # # # ######

###### #####
# # # # # # # # #####
# # # # ## # # # #
###### # # # # # ##### # #
# # ## # # # # # # #
# # # ## # ## # # # #
# # # # # ##### #####

*
*
*/

$nome = $_GET['nome'];
$sobrenome = $_GET['sobrenome'];

echo "Nome completo: <strong>$nome $sobrenome </strong>";


?>

Pronto! Não entrarei em detalhes no script, pois não é um artigo sobre programação.

Enfim, o que eu fiz foi criar o formulário no index.html e como eu havia dito, envio estes dados pelo botão "Enviar dados". No script PHP, criei uma variável chamada "nome", que pega o valor do campo "nome".

$nome = $_GET['nome'];

E como vocês podem ver, fiz a mesma coisa com o campo "sobrenome".

$sobrenome = $_GET['sobrenome'];

Logo após, imprimi ambos:

echo "Nome completo: <strong>$nome $sobrenome"</strong>;

A tag strong não tem nada a ver, ela apenas deixa em negrito. :)

Vamos realizar os testes em seguida.

Let's play with hacking. ;)

Realizando os testes

Bom, para começo de conversa, vamos começar testando pacificamente, para ver se tudo está funcionando como deveria.

Temos a seguinte página rodando na rede local (localhost):
Ok, preencha com seus dados, ou dados quaisquer, e clique em: "Enviar dados".

Você deve ter uma saída parecida com esta:
Como pode ser visto, ele fez como proposto, só que tem um probleminha... reparem na URL:
http://127.0.0.1/dados.php?nome=Andre&sobrenome=Junior


Ué? Então se eu por: http://127.0.0.1/dados.php?nome=Jose&sobrenome=Couves

Ele imprimirá:
"Nome completo: Jose Couves " ???


Opa! Vamos tentar fazer melhor então, vamos tentar adicionar tags na URL...

Ponha, por exemplo: http://127.0.0.1/dados.php?nome=%3Ch1%3EJose%3C/h1%3E&sobrenome=Couves

E olhe a saída:
Crash total. Não é mesmo ?!

Ok, agora que sabemos que está vulnerável, vamos voltar à página principal (index.html) e vamos tentar injetar códigos nos campos de texto.

No campo "nome", coloque o seguinte script:

<script>alert("XSS Own You :) ") </script>

No campo "sobrenome", você pode deixar vazio. Agora clique em: "Enviar dados".

E veja, colocamos um alert. :)
Agora que sabemos que está vulnerável, podemos começar a estudar formas de nos beneficiarmos através desta vulnerabilidade, para ver até aonde o blackhat chegaria.

É aonde você deve ter a cabeça de um blackhat.

Let's hack it. :)

Página anterior     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 ao Fortran (parte 1)

A profissão: Programador

SDL e C - Uma dupla sensacional

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

Programando em Perl (parte 1)

Leitura recomendada

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

Vulnerabilidade em formulário PHP

Segurança em PHP

Instalações PHP não seguras

Criptografia do método GET 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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts