欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

PHPCMS V9.6.2 SQL注入漏洞分析

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

通过这篇文章的分析:http://www.myhack58.com/Article/html/3/62/2017/85813.htm ,详细讲述了PHPCMS V9.6.1文件读取漏洞的触发成因,当发现网站是phpcms并且成功利用任意文件读取漏洞读取时系统文件时是否可以进行下一步的利用,在phpcms的核心文件/caches/configs/system.php中存储了phpcms全站的加密密钥与全局的配置参数:
'cookie_pre' => 'qErKa_', //Cookie 前缀,同一域名下安装多套系统时,请修改Cookie前缀
'auth_key' => 'U6KnzDrhf6ZQ5Yt7izr0', //密钥
利用这个密钥可以对 phpcms传输的数据加解密,使用SkyWolf在PHPcms 9.6.2中挖掘到了一枚配合密钥利用的SQL注入漏洞,以下是详细过程与分析。
Skywolf
SykWolf介绍
什么是SkyWolf?SkyWolf是一款自动化灰盒审计系统,所谓灰盒审计,在日常对cms的代码审计中可以理解为白盒结合黑盒的安全测试,以PHP扩展形式加载,通过污染传递的方法污染程序整个执行流程,并对程序处理流程进行安全性分析。
Skywolf控制台地址:
https://0kee.360.cn/skywolf/
通过访问网站接口skywolf会主动的分析中间调用逻辑,来罗列出可疑的漏洞

告警处理:展示Skywolf发现业务已经触发的漏洞告警信息,点进去看到详细的漏洞信息:

可疑点:服务端数据库执行的可疑语句
调用栈:程序在执行这一次请求当中所调用的函数与代码文件物理路径、在文件中的行数。
SQL注入漏洞分析
当访问到phpcms的member接口:

phpcmsv961_1/index.php?m=member
skywolf发出了相关告警:

详细分析如下:
在会员前台管理中心接口的继承父类foreground:
/phpcms/modules/member/index.php LINE 11
class index extends foreground {
    private $times_db;
    function __construct() {
        parent::__construct();
        $this->http_user_agent = $_SERVER['HTTP_USER_AGENT'];
    }
这里继承了foreground,跟进去:
/phpcms/modules/member/classes/foreground.class.php line 19-38:
    /**
     * 判断用户是否已经登陆
     */
    final public function check_member() {
        $phpcms_auth = param::get_cookie('auth');
        if(ROUTE_M =='member' && ROUTE_C =='index' && in_array(ROUTE_A, array('login', 'register', 'mini','send_newmail'))) {
            if ($phpcms_auth && ROUTE_A != 'mini') {
                showmessage(L('login_success', '', 'member'), 'index.php?m=member&c=index');
            } else {
                return true;
            }
        } else {
            //判断是否存在auth cookie
            if ($phpcms_auth) {
                $auth_key = $auth_key = get_auth_key('login');
                list($userid, $password) = explode("\t", sys_auth($phpcms_auth, 'DECODE', $auth_key));
                //验证用户,获取用户信息
                $this->memberinfo = $this->db->get_one(array('userid'=>$userid)); //注入点在这
                if($this->memberinfo['islock']) exit('Bad Request!');
                //获取用户模型信息
                $this->db->set_model($this->memberinfo['modelid']);
首先看到这里是验证前台会员用户是否登录,验证方法是解析客户端的cookie_pre_auth参数:

$phpcms_auth = param::get_cookie('auth’);

[1] [2] [3] [4]  下一页

通过这篇文章的分析:http://www.myhack58.com/Article/html/3/62/2017/85813.htm ,详细讲述了PHPCMS V9.6.1文件读取漏洞的触发成因,当发现网站是phpcms并且成功利用任意文件读取漏洞读取时系统文件时是否可以进行下一步的利用,在phpcms的核心文件/caches/configs/system.php中存储了phpcms全站的加密密钥与全局的配置参数:
'cookie_pre' => 'qErKa_', //Cookie 前缀,同一域名下安装多套系统时,请修改Cookie前缀
'auth_key' => 'U6KnzDrhf6ZQ5Yt7izr0', //密钥
利用这个密钥可以对 phpcms传输的数据加解密,使用SkyWolf在PHPcms 9.6.2中挖掘到了一枚配合密钥利用的SQL注入漏洞,以下是详细过程与分析。
Skywolf
SykWolf介绍
什么是SkyWolf?SkyWolf是一款自动化灰盒审计系统,所谓灰盒审计,在日常对cms的代码审计中可以理解为白盒结合黑盒的安全测试,以PHP扩展形式加载,通过污染传递的方法污染程序整个执行流程,并对程序处理流程进行安全性分析。
Skywolf控制台地址:

本文来自无奈人生安全网

https://0kee.360.cn/skywolf/
通过访问网站接口skywolf会主动的分析中间调用逻辑,来罗列出可疑的漏洞

告警处理:展示Skywolf发现业务已经触发的漏洞告警信息,点进去看到详细的漏洞信息:

可疑点:服务端数据库执行的可疑语句
调用栈:程序在执行这一次请求当中所调用的函数与代码文件物理路径、在文件中的行数。
SQL注入漏洞分析
当访问到phpcms的member接口:

phpcmsv961_1/index.php?m=member
skywolf发出了相关告警:

copyright 无奈人生


详细分析如下:
在会员前台管理中心接口的继承父类foreground:
/phpcms/modules/member/index.php LINE 11
class index extends foreground {
    private $times_db;
    function __construct() {
        parent::__construct();
        $this->http_user_agent = $_SERVER['HTTP_USER_AGENT'];
    }
这里继承了foreground,跟进去:
/phpcms/modules/member/classes/foreground.class.php line 19-38:
    /**
     * 判断用户是否已经登陆
     */
    final public function check_member() {
        $phpcms_auth = param::get_cookie('auth');
        if(ROUTE_M =='member' && ROUTE_C =='index' && in_array(ROUTE_A, array('login', 'register', 'mini','send_newmail'))) {
            if ($phpcms_auth && ROUTE_A != 'mini') {
内容来自无奈安全网

                showmessage(L('login_success', '', 'member'), 'index.php?m=member&c=index');
            } else {
                return true;
            }
        } else {
            //判断是否存在auth cookie
            if ($phpcms_auth) {
                $auth_key = $auth_key = get_auth_key('login');
                list($userid, $password) = explode("\t", sys_auth($phpcms_auth, 'DECODE', $auth_key));
                //验证用户,获取用户信息 www.wnhack.com
                $this->memberinfo = $this->db->get_one(array('userid'=>$userid)); //注入点在这
                if($this->memberinfo['islock']) exit('Bad Request!');
                //获取用户模型信息
                $this->db->set_model($this->memberinfo['modelid']);
首先看到这里是验证前台会员用户是否登录,验证方法是解析客户端的cookie_pre_auth参数:

$phpcms_auth = param::get_cookie('auth’);
本文来自无奈人生安全网

[1] [2] [3] [4]  下一页

copyright 无奈人生

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。