PHPOK4.1最新版SQL注入漏洞

PHPOK4.1最新版(2014-08-18更新)
官网:http://www.phpok.com/phpok.html
官网演示站点:http://demo.phpok.com

PHPOK系统在前台获取“文章总数”的功能实现上存在SQL注入漏洞。
漏洞文件:处理数据的data_model类/framework/model/data.php
漏洞函数:获取“文章总数”的total($rs)函数

在332行处存在“绑定会员”的操作,具体的代码为$sql.= “AND l.user_id IN(“.$rs[‘user_id’].”) “;,可以看到$rs[‘user_id’]直接带入数据库进行连接查询。
而$rs[‘user_id’]是从total函数的唯一参数$rs中获取的,因此需要进行数据来源的回溯定位。

/framework/phpok_call.php代码是前台数据流的调用中心类,说白了就相当于一个数据中转器的作用,我们来分析下phpok_call.php的代码实现。
phpok_call.php文件第20行处提供了phpok($id,$rs=””)的函数,具体功能是对前台发送来的数据进行调用处理,其中$id代表操作类型,$rs表示所需要的参数。

代码实现如下:

phpok($id,$rs=””)函数可以总结为以下2行核心代码:

就是将phpok的两个参数$id,$rs=””合并为一个数组,在传入load_call函数执行

进一步跟踪load_call函数:

在79行处:

load_call最后会执行$this->$tmp($rs);操作,$tmp 是将操作类型$id加上字符’_’,$rs就是该操作所需要的参数。
之前分析过由于data_model类的total函数出现注入,因此phpok_call类中可以通过调用_total($rs)来调用data_model->total($rs)
在第96行代码处有:

现在需要分析下$rs这个参数是如何从前台传到phpok_call类中。

phpok系统通过/framework/api/api_control.php来处理前台数据,这里就来重点分析下api_control控制类的实现:

api_control控制类的代码很简单,有一个核心函数phpok_f(),位于第39行处:

phpok_f()从前台获取参数$id = $this->get(‘id’);和参数$param = $this->get(‘param’);,最后会调用$list = $this->call->phpok($id,$param);即调用phpok_call类的phpok,其中$param就是前面分析的操作参数$rs,是个数组。

最后的数据调用流程如下:

1)本地测试

ok1

ok2
官方演示站点

ok3

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录