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

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

Trabalhando com classes e métodos em Java

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

Fedora 12 - instalação e uso

Operadores com a linguagem C

Computação Forense - Entendendo uma perícia

Leitura recomendada

PHP: Programando com segurança

Segurança em PHP

Instalações PHP não seguras

Autenticação de sites com PHP e MySQL

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

  
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