ThinkPHP order by SQL注入漏洞安全通告

发布时间 2018-08-30

漏洞编号和级别


CVE编号:无,危险级别:高危,CVSS分值:官方未评定


影响版本


ThinkPHP 3.2.3、5.1.22及以下版本


漏洞概述


该注入漏洞由于ThinkPHP在处理order by排序时,其处理机制有一定缺陷,针对关联数组的Key值未进行安全过滤,攻击者可利用这一缺陷,对用户系统实施SQL注入攻击。


漏洞验证


ThinkPHP 3.2.3的代码来看,处理数组当$field参数为关联数组(key-value)时,key值拼接到返回值中,SQL语句最终绕过了框架安全过滤得以执行。而补丁中增加了在order解析时对key值的安全过滤。





1.首先建立好复现所需要的数据库场景:



数据库表名test,其中有2个字段id、username。数据库环境设计好之后需要建立对应模块的数据表的查询语言。如下图:



2.启动ThinkPHP服务器打开欢迎页面:



3.然后通过构造的PoC来访问http://siteserver/thinkphp/?order[updatexml(1,concat(0x3a,user()),1)]=1,出现如下页面即注入成功。




影响范围


国内暴露再公网的ThinkPHP数据巨大,需要高度重视。


修复建议


ThinkPHP v3下载补丁:

下载地址:https://github.com/top-think/


ThinkPHP v5.1.x下载补丁:

下载地址:https://github.com/top-think/framework


参考链接


http://www.thinkphp.cn/
http://galaxylab.org/thinkphp-3-x-5-x-order-by%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E/