当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(37) 关注此漏洞

缺陷编号: WooYun-2013-20439

漏洞标题: PHPCMS 2008 最新漏洞(第一季)

相关厂商: phpcms

漏洞作者: 西毒

提交时间: 2013-03-21 22:47

公开时间: 2013-05-05 22:47

漏洞类型: SQL注射漏洞

危害等级: 中

自评Rank: 15

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 第三方不可信程序 php+字符类型注射 参数未过滤 phpcms php源码审核 php源码分析 白盒测试 Referer

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-03-21: 细节已通知厂商并且等待厂商处理中
2013-03-24: 厂商已经确认,细节仅向厂商公开
2013-04-03: 细节向核心白帽子及相关领域专家公开
2013-04-13: 细节向普通白帽子公开
2013-04-23: 细节向实习白帽子公开
2013-05-05: 细节向公众公开

简要描述:

先放第一季吧

详细说明:

在include/common.inc.php中 ,这是phpcms的全局要加载的配置文件

code 区域
$dbclass = 'db_'.DB_DATABASE;
require $dbclass.'.class.php';

$db = new $dbclass;
$db->connect(DB_HOST, DB_USER, DB_PW, DB_NAME, DB_PCONNECT, DB_CHARSET);

require 'session_'.SESSION_STORAGE.'.class.php';
$session = new session();
session_set_cookie_params(0, COOKIE_PATH, COOKIE_DOMAIN);

if($_REQUEST)
{
if(MAGIC_QUOTES_GPC)
{
$_REQUEST = new_stripslashes($_REQUEST);
if($_COOKIE) $_COOKIE = new_stripslashes($_COOKIE);
extract($db->escape($_REQUEST), EXTR_SKIP);
}
else
{
$_POST = $db->escape($_POST);
$_GET = $db->escape($_GET);
$_COOKIE = $db->escape($_COOKIE);
@extract($_POST,EXTR_SKIP);
@extract($_GET,EXTR_SKIP);
@extract($_COOKIE,EXTR_SKIP);
}
if(!defined('IN_ADMIN')) $_REQUEST = filter_xss($_REQUEST, ALLOWED_HTMLTAGS);
if($_COOKIE) $db->escape($_COOKIE);
}
//echo QUERY_STRING;
if(QUERY_STRING && strpos(QUERY_STRING, '=') === false && preg_match("/^(.*)\.(htm|html|shtm|shtml)$/", QUERY_STRING, $urlvar))
{
//var_dump($urlvar[1]);
//echo 'test';
parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));

}



这里的话首先实例化了这个数据库,产生了一个$db资源句柄,他是用来操作数据库的



然后就是将我们传进来的参数进行变量化



这里有一些小过滤,自己可以看,所以这里传进来的参数就作为了变量



但是接下来这行呢?

code 区域
if(QUERY_STRING && strpos(QUERY_STRING, '=') === false && preg_match("/^(.*)\.(htm|html|shtm|shtml)$/", QUERY_STRING, $urlvar))
{
//var_dump($urlvar[1]);
//echo 'test';
parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));

}



看看这里?这里的QUERY_STRING来自前面

这里有个过滤,但是不影响



如果我们在这里进行覆盖这个db变量呢



因为这里 parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));



可以将我们传进去的/ - 进行替换



所以我们如果提交如下字符



http://localhost/phpcms/index.php?db-5/gid-xd.html



他由于这个db被覆盖就会出错,所以物理路径就爆出来了

1.jpg







在c.php中

code 区域
$db->query("UPDATE ".DB_PRE."ads SET `clicks`=clicks+1 WHERE adsid=".$ads['adsid']);
$info['username'] = $_username;
$info['clicktime'] = time();
$info['ip'] = IP;
$info['adsid'] = $id;
$info['referer'] = HTTP_REFERER;
$year = date('ym',TIME);
$table = DB_PRE.'ads_'.$year;
$table_status = $db->table_status($table);
//echo 'test';
if(!$table_status) {
include MOD_ROOT.'include/create.table.php';
}
$db->insert($table, $info);



注意这里的HTTP_REFERER这个常量



这里的常量是通过前面的common.inc.php定义好的



define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');



没有经过任何过滤操作,所以你懂的,我估计很多同学已经发现了,只是没去公布了,所以俺就替你们xxoo了,哈哈...别骂我



然后

$db->insert($table, $info);



我们来看一下它这里的操作

所以你懂的

2.jpg



所以就可以xxoo了,很简单,exp已经写好了



暂时还只看一部分,可能一季一季的放吧

exp 我就放到https://forum.90sec.org 以及www.linux520.com里面去



大家去里面找

漏洞证明:

2.jpg

修复方案:

这个自己过滤吧!

版权声明:转载请注明来源 西毒@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2013-03-24 15:57

厂商回复:

希望还在使用08的朋友们尽快升级到v9。感谢提交问题。

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2013-03-21 22:50 | 3King ( 普通白帽子 | Rank:1143 漏洞数:95 | 【study at HNUST】非常感谢大家的关注~ 大...)
    0

    目测连载······

  2. 2013-03-21 22:57 | wefgod ( 核心白帽子 | Rank:1829 漏洞数:183 | 力不从心)
    0

    明显会连载的。

  3. 2013-03-21 23:08 | 园长 ( 普通白帽子 | Rank:134 漏洞数:14 | 你在身边就是缘,缘分写在数据库里面。)
    0

    明显会连载的。

  4. 2013-03-22 08:11 | 牛£金钢 ( 路人 | Rank:20 漏洞数:8 | 我是新手,还需要学习,大神们要指点下了.....)
    0

    明显会连载的。

  5. 2013-03-22 09:03 | 孤独雪狼 认证白帽子 ( 普通白帽子 | Rank:740 漏洞数:156 | 七夕手机被偷,这坑爹的七夕啊 。。。。)
    0

    明显会连载的。

  6. 2013-03-22 09:09 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)
    0

    明显会连载的。

  7. 2013-03-22 10:22 | 猥琐 ( 路人 | Rank:6 漏洞数:2 | 学习什么的最重要!)
    0

    明显会连载的。

  8. 2013-03-22 10:50 | 围剿 ( 路人 | Rank:17 漏洞数:5 | Evil decimal)
    0

    明显会连载的。

  9. 2013-03-22 11:01 | 孤独雪狼 认证白帽子 ( 普通白帽子 | Rank:740 漏洞数:156 | 七夕手机被偷,这坑爹的七夕啊 。。。。)
    0

    http://www.2cto.com/Article/201211/170127.html 我发现这个洞在去年11月份我们网站就发布了 - -

  10. 2013-03-22 11:17 | 西毒 ( 普通白帽子 | Rank:221 漏洞数:33 | 心存谦卑才能不断超越自我)
    0

    @孤独雪狼 那重复了....悲剧.....我陆续再放其他洞吧,哈哈

  11. 2013-03-22 11:18 | 西毒 ( 普通白帽子 | Rank:221 漏洞数:33 | 心存谦卑才能不断超越自我)
    0

    @孤独雪狼 由于官方没有升级,所以就发现了此洞,反正不急,我慢慢放吧,我这里还有其他的,XSS SQL GETSHELL。。

  12. 2013-03-22 11:44 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    0

    @西毒 那咱可就说好了,坐等看连载

  13. 2013-03-22 14:01 | Ray ( 实习白帽子 | Rank:75 漏洞数:7 )
    0

    @西毒 PHPCMS 2008已经是个不维护的老版本了,官方目前的维护版本是PHPCMS V9。

  14. 2013-03-23 01:57 | 猴子 ( 路人 | Rank:19 漏洞数:5 | 我是一只骚猴子)
    0

    跪求phpcms2008 sql inject

  15. 2013-03-23 11:06 | wefgod ( 核心白帽子 | Rank:1829 漏洞数:183 | 力不从心)
    0

    @猴子 上面好像有?

  16. 2013-03-25 12:18 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    0

    不是连载吗?肿么没了呢?

  17. 2013-03-25 12:44 | Ray ( 实习白帽子 | Rank:75 漏洞数:7 )
    0

    说好的连载呢。

  18. 2013-04-12 21:43 | 小鸡鸡 ( 实习白帽子 | Rank:40 漏洞数:10 )
    0

    @西毒 大哥来分exp 1321212165@qq.com

  19. 2013-09-12 13:46 | hack2012 ( 实习白帽子 | Rank:31 漏洞数:3 | 关注信息安全 http://www.waitalone.cn/)
    0

    @小鸡鸡 http://www.waitalone.cn/phpcms2008-sql-injection-exp.html 我博客有的,你不去找。

登录后才能发表评论,请先 登录