网络安全
当前位置: 首页 >> 网络安全 >> 安全事件 >> 正文
ThinkPHP漏洞
作者:   来源:   日期:2018年10月09日 10:03

一、      事件背景

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySqlPgSQLSqlite多种数据库以及PDO扩展。

近日,ThinkPHP进行了一项安全更新,修正了ThinkPHP由于select(),find(),delete()方法可能会传入数组类型数据产生的多个SQL注入隐患。

二、      漏洞复现

搭建好存在漏洞的ThinkPHP版本。

构造好恶意的请求后进行访问:

成功执行了恶意的SQL语句。

三、      漏洞分析及危害

1)  漏洞分析

漏洞出现在ThinkPHP/Library/Think/Model.class.php文件,文件内deletefindselect三个函数在处理传入的$options参数时,未对参数做合理的过滤,且$options参数可控,因此导致$options参数经由_parseOptions函数后执行了恶意的SQL查询语句。

$options函数被上述函数接受之后,会进行相关判断,如果$options为数字或者字符串,则直接以当前表的主键作为查询字段。函数内还提供了复合主键的查询,如果$options$pk均为数组,即不止存在一个主键时,就可以绕过判断,直接通过_parseOptions函数进行解析。

_parseOptions函数中,可以看到对$options的解析没有进行过滤:

$options解析完成之后传入到了select方法,该方法的最后调用了parseSql方法对$options的值进行替换、解析。其中$options['table']使用了parseTable进行解析,可以看到如果传入的不为数组时,没有经过任何过滤就进行解析返回带入查询:

因此,只要构造出满足上述条件的请求,就可以执行恶意的sql语句。

2)  漏洞危害

1.   数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。

2.   网页篡改:通过操作数据库对特定网页进行篡改。

3.   网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。

4.   数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。

5.   服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

6.   破坏硬盘数据,瘫痪全系统。

四、      数据分析

国内分布

中国境内使用ThinkPHP的主机数量约为5.1万个。其中,排名前五的省份或地区分别为:浙江省、广东省、北京市、香港特别行政区、山东省。

下图为中国范围内使用ThinkPHP的主机分布情况:

1、国内分布图

下图为中国范围内使用ThinkPHP的主机数量排名前十省份或地区:

2、国内排名前十

下图为使用ThinkPHP的主机的国内运营商排名:

3、国内运营商排名前十

五、      防范建议

1)  漏洞影响版本

ThinkPHP 3.2之前的版本

2)  修复建议

不再分析由外部传进来的$options,使得不再可控$options[xxx]

上一条:thinkphp远程代码执行漏洞 下一条:TP-LINK认证绕过漏洞

关闭

办公地点:第四教学楼东侧信息技术服务中心      办公时间:周一至周五 8:00-11:30   14:30-18:00(春夏)   14:00-17:30(秋冬)
*办理个人业务请携带本人身份证件
学校地址:山东省烟台市莱山区滨海中路191号
版权所有:山东工商学院信息技术服务中心