send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Tutorial] XSS a ciegas

  • 2 Respuestas
  • 4181 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado arthusu

  • *
  • Underc0der
  • Mensajes: 525
  • Actividad:
    0%
  • Reputación 2
  • Yo solo se que no se nada - Socrátes
    • Ver Perfil
    • Arthusu BLOG
  • Skype: arthusuxD
« en: Agosto 14, 2013, 07:25:11 pm »
¿Que es XSS a ciegas?
 
 
You are not allowed to view links. Register or Login

 
 XSS a ciegas en realidad es un XSS persistente que se ejecuta en otra parte del sitio web que no se muestra directamente al usuario, sino se ejecuta en otra parte de la misma aplicacion web.
 
 A un ataque XSS persistente me refiero a uno que queda almacenado en una base de datos o un archivo de registro.
 
 ¿Como atacar?
 
 En realidad esto es lo mas bonito, como no sabemos que vector inyectar, inyectamos a lo tonto o se podria decir que inyectamos por fuerza bruta :D
 Me refiero a que tenemos una lista de Payloads la cual lanzamos en variables que pudiesen ser vulnerables a este tipo de ataques, este tipo de ataques mas comunmente suceden en aplicacion de inicio de sesion, foros, etc...
 
 Vamos a hacer una practica :)
 
 La siguiente practica sera algo mas irreal pero es para que se entienda el concepto de XSS a ciegas :D
 Tenemos dos archivos en la practica sin filtrar nada de nada :P
 Aqui se los dejo:
 
 contact.php
Código: You are not allowed to view links. Register or Login
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Contacto</title>
<style>
.error{
color:red;
font-weight: bold;
}
.ok{
color:green;
font-weight: bold;
}
</style>
</head>
<?php
if(isset(
$_POST['submit'])){
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])){
$nombre=$_POST['name'];
$correo=$_POST['email'];
$mensaje=$_POST['message'];
$fp fopen("logs.txt","a");
fwrite($fp"Nombre: $nombre \t Correo: $correo \t Mensaje: $mensajePHP_EOL);
fclose($fp);
echo '<p class="ok">Su mensaje ha sido enviado correctamente.</p>';
}else{
echo '<p class="error">No ha llenado los campos correctamente.</p>';
}
}else{
?>

<body>
<center>
<h1>Formulario de contacto</h1>
<form action="contact.php" method="post">
<p>nombre: <input type="text" name="name" size="15" maxlength="40"></p>
<p>correo: <input type="text" name="email" size="15" maxlength="80"></p>
<p>mensaje: <textarea name="message"></textarea></p>
<p><input type="submit" value="Enviar" name="submit"></p>
</form>
</center>
</body>
</html>
<?php
}
?>
login.php
Código: You are not allowed to view links. Register or Login
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Contacto</title>
<style>
.error{
color:red;
font-weight: bold;
}
.ok{
color:green;
font-weight: bold;
}
</style>
</head>
<?php
if(isset(
$_POST['submit'])){
if(!empty($_POST['name']) && !empty($_POST['pass'])){
$nombre=$_POST['name'];
$password=$_POST['pass'];
if($nombre=="arthusu" && $password=="12345"){
echo '<h1>Bienvenido al sistema de logs</h1>';
$file fopen("logs.txt""r") or exit("no se pudo abrir el archivo!");
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
}else{
echo '<p class="error">El usuario o contraseña no son correctos.</p>';
}
}else{
echo '<p class="error">No ha llenado los campos correctamente.</p>';
}
}else{
?>

<body>
<center>
<h1>Sistema de registros - Iniciar sesion</h1>
<form action="login.php" method="post">
<p>nombre: <input type="text" name="name" size="15" maxlength="40"></p>
<p>contraseña: <input type="password" name="pass" size="15" maxlength="80"></p>
<p><input type="submit" value="Enviar" name="submit"></p>
</form>
</center>
</body>
</html>
<?php
}
?>

 Ahora digamos que el usuario entra a nuestra pagina de contacto y deja su mensaje:
 
 
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

 
 
 
 
 
 Luego llega el administrador y va y checa el mensaje en su sistema de logs :D
 
 usuario: arthusu contraseña: 12345
 
 
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

 
 
 
 
 
 
 
 Ahora digamos que el usuario empieza a atacar con su lista de payloads, en este caso no usaremos una lista de payloads solo usaremos un vector, por que nosotros ya sabemos como inyectar, pero en realidad no se sabe cual vector va llegar a funcionar es por eso que se inyectan una lista de payloads al sitio....
 
 Entonces enviamos nuestro mensaje de nuevo que seria nuestro vector a inyectar:
 
 
You are not allowed to view links. Register or Login

 Luego llega el administrador e inicia sesion en su sistema de logs donde puede ver los mensajes enviados :P
 
 
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

 
 En este caso se puede ver muy claramente el concepto de XSS a ciegas por que nosotros en realidad no sabemos si se inyecto por que no la vemos... pero el administrador si la mirara y se le inyectara ese codigo cuando lo mire en sus logs, entonces como se puede insertar en este caso cualquier xss no solamente podemos hacer un alert, sino una redireccion a un deface, un robo de cookies (claro esta app no tiene cookies por que es un ejemplo solamente),etc....
 
 
 Prevencion
 
 La unica prevencion es no confiar en nada de lo que el usuario ingrese y filtrar todo lo que inserte... Veamos por ejemplo como solucionariamos este problema de que nos inyecten este XSS:
 
 contact.php FIX
 
Código: You are not allowed to view links. Register or Login
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Contacto</title>
<style>
.error{
color:red;
font-weight: bold;
}
.ok{
color:green;
font-weight: bold;
}
</style>
</head>
<?php
if(isset(
$_POST['submit'])){
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])){
$nombre=htmlentities($_POST['name']);
$correo=htmlentities($_POST['email']);
$mensaje=htmlentities($_POST['message']);
$fp fopen("logs.txt","a");
fwrite($fp"Nombre: $nombre \t Correo: $correo \t Mensaje: $mensajePHP_EOL);
fclose($fp);
echo '<p class="ok">Su mensaje ha sido enviado correctamente.</p>';
}else{
echo '<p class="error">No ha llenado los campos correctamente.</p>';
}
}else{
?>

<body>
<center>
<h1>Formulario de contacto</h1>
<form action="contact.php" method="post">
<p>nombre: <input type="text" name="name" size="15" maxlength="40"></p>
<p>correo: <input type="text" name="email" size="15" maxlength="80"></p>
<p>mensaje: <textarea name="message"></textarea></p>
<p><input type="submit" value="Enviar" name="submit"></p>
</form>
</center>
</body>
</html>
<?php
}
?>

 En este caso solo filtramos contra este ataque xss pero tambien podriamos hacer mas como filtrar si el campo inyectado es solo string de la a ala z para el nombre, el email este escrito correctamente, etc....
 
 Veamos el ejemplo cuando lo ejecutamos de nuevo con el mismo vector anterior cuando inyectamos:
 
 
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

 
 Aqui termina el tutorial espero que les haya sido de ayuda, no sin antes de darles un poco de ayuda para este tipo de ataques:
 
 Cheat sheet XSS (Payloads): You are not allowed to view links. Register or Login
 Burp Suite (Lanzar Payloads): You are not allowed to view links. Register or Login
 
 Sitio de referencia: You are not allowed to view links. Register or Login

Fuente: Arthusu BLOG

Desconectado Turka

  • *
  • Underc0der
  • Mensajes: 101
  • Actividad:
    0%
  • Reputación 0
  • Turca por herencia.
    • Ver Perfil
  • Skype: turka.xd
« Respuesta #1 en: Septiembre 08, 2014, 12:31:56 pm »
Buen tuto friend

Es un ataque que se puede llegar a dar, pero es muy ruidoso, no pasa desapercibido para nada.

Es decir, en un XSS normal podemos insertar un iframe o hacer una petición desde un tag de imagen, que haga pasar desapercibido el ataque. En este caso se hace un ruido extremo al envíar todas las inyecciones, por lo que el adminitrador será conciente que sufrió un ataque y tomará los recaudos, es la única contra que tiene.

Saludos!.

Desconectado Dedalo

  • *
  • Underc0der
  • Mensajes: 115
  • Actividad:
    0%
  • Reputación 0
  • No Aprendas para Hackear, Hackea para Aprender.
    • Ver Perfil
    • SeguridadBlanca - Seguridad Informática Perú
« Respuesta #2 en: Septiembre 08, 2014, 01:26:08 pm »
Muy bueno arthusu... es un ataque muy ruidoso pero midiendo bien y con el script correcto puede ser muy efectivo :)


Saludos!
You are not allowed to view links. Register or Login

 

¿Te gustó el post? COMPARTILO!



¿Como Usar SQLMAP? Mini-Tutorial

Iniciado por Assed [In]Seguridad Informática

Respuestas: 6
Vistas: 10773
Último mensaje Octubre 11, 2016, 04:16:35 pm
por Maaiion
Tutorial de Pentesting 2011 y 2012

Iniciado por k43l

Respuestas: 21
Vistas: 9643
Último mensaje Abril 16, 2013, 06:57:36 pm
por Nizzee
Tutorial de Hacking con XSS

Iniciado por 54NDR4

Respuestas: 6
Vistas: 4214
Último mensaje Abril 30, 2013, 05:51:46 pm
por Markuss97