5.0 ThinkPHP框架。x sql注入漏洞示例分析

  介绍

这篇文章主要介绍了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和用户名。

 thinkphp框架5.0。x sql注入漏洞示例分析

修改数据库配置信息应用程序/database.php,在应用程序/配置。php中打开调试和痕迹。

 ThinkPHP框架5.0。x sql注入漏洞示例分析  ThinkPHP框架5.0。x sql注入漏洞示例分析

在应用程序/索引/控制器/索引。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框架5.0。x sql注入漏洞示例分析

<强>漏洞分析

首先,我们知道插入方法存在漏洞,那就查看插入方法的具体实现。

通过输入获取到参数后,用户名变量情况如下:

 ThinkPHP框架5.0。x sql注入漏洞示例分析

跟入插入、thinkphp/图书馆/认为/db/查询。php

 ThinkPHP框架5.0。x sql注入漏洞示例分析

然后执行插入语句

 sql 美元;=,$ this→施工→插入(数据,美元,美元的选择,,取代美元);

跟入thinkphp/图书馆/认为/db/建设者。php

 ThinkPHP框架5.0。x sql注入漏洞示例分析

跟入parseData至thinkphp/图书馆/认为/db/建设者。php

 ThinkPHP框架5.0。x sql注入漏洞示例分析

可以看出美元瓦尔是数组,且根据val[0]美元值为公司,会通过开关语句进入到“公司”:

此处的parseKey,即thinkphp/图书馆/认为/db/建筑/Mysql。php

 ThinkPHP框架5.0。x sql注入漏洞示例分析

5.0 ThinkPHP框架。x sql注入漏洞示例分析