这篇文章主要介绍了ThinkPHP框架5.0。x sql注入漏洞示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
<强> ThinkPHP简介强>
ThinkPHP是一个免费开源的,快速,简单的面向对象的轻量级PHP开发框架,创立于2006年初,遵循输入开源协议发布,是为了敏捷网络应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性,扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的网络应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。
<强>漏洞简述强>
尽管ThinkPHP 5.0。x框架采用了参数化查询方式,来操作数据库,但是在插入和更新方法中,传入的参数可控,且无严格过滤,最终导致本次SQL注入漏洞发生。
<强>以ThinkPHP框架5.0。x sql注入漏洞进行分析强>
thinkphp官网下载5.0.15版本:http://www.thinkphp.cn/down/1125.html。搭建好数据库,数据库为tp,表名为用户,其中有两个字段id和用户名。
修改数据库配置信息应用程序/database.php,在应用程序/配置。php中打开调试和痕迹。
在应用程序/索引/控制器/索引。php中指数类中添加方法:
public , function testsql () ,,,{ ,,,,,,,username 美元;=,输入(& # 39;get.username/一个# 39;); ,,,,,,,db(& # 39;用户# 39;)→在((& # 39;id # 39;=祝辞,1])→插入((& # 39;用户名# 39;=祝辞;用户名】美元); ,,,}
我们本次的有效载荷为:
http://127.0.0.1/thinkphp5.0.15/public/index.php/index/index/testsql?username [0]=inc&用户名[1]=updatexml (1, concat (0 x7,用户(),0 x7e), 1),用户名[2]=1
解释如下:
http://127.0.0.1/thinkphp/ ,公共/,,,,,,,,index . php/,,,索引/,,,/,指数,指数 ,,,,,, 域名,,,,,,,网站目录,,,,对外访问目录,,,,入口文件,,,,,,,前台,,,,,控制器,,,,方法名
扩展:
其中关于updatexml函数updatexml (XML_document、XPath_string new_value);
第一个参数:XML_document是字符串格式,为XML文档对象的名称,文中为医生
第二个参数:XPath_string (Xpath格式的字符串),如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,字符串格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
访问有效负载,就可以触发漏洞了。
<强>漏洞分析强>
首先,我们知道插入方法存在漏洞,那就查看插入方法的具体实现。
通过输入获取到参数后,用户名变量情况如下:
跟入插入、thinkphp/图书馆/认为/db/查询。php
然后执行插入语句
sql 美元;=,$ this→施工→插入(数据,美元,美元的选择,,取代美元);
跟入thinkphp/图书馆/认为/db/建设者。php
跟入parseData至thinkphp/图书馆/认为/db/建设者。php
可以看出美元瓦尔是数组,且根据val[0]美元值为公司,会通过开关语句进入到“公司”:
此处的parseKey,即thinkphp/图书馆/认为/db/建筑/Mysql。php