漏洞demo:

    public function inc()
{
$username = request()->get('name/a');
db('user')->insert(['name' => $username]);
return 'Update success';
}

首先看TP的数据获取:$username = request()->get('name/a');

request(助手函数就是获取thinkphp/library/think/Request.php 的实例,然后调用其get方法:

重点跟进input(方法:

exp数据这种就是在这里过滤的。

input助手函数干的事:

1.使用默认的过滤器进行过滤

2.过了EXP这种表达式关键字符

3.对数据类型进行强制转化,默认是字符串格式

然后接着看操作数据库一块:db('user')->insert(['name' => $username]);

db助手函数:

thinkphp/library/think/Db.php 数据库的工厂类:

return \think\db\connector\Mysql 对象的实例:

继承于:thinkphp/library/think/db/Connection.php 类。

然后继续执行 ->name($name); 则会触发thinkphp/library/think/db/Connection.php 类中的 __call 方法:

这里回调的类就是:\think\db\Query 类中的name( 方法:

\think\db\Query 中的__construct( 方法:

builder 属性就是 \think\db\builder\Mysql 类的实例:

父类:thinkphp/library/think/db/Builder.php

整个TP的DB类库我们就已经理完了,TP5相对TP3来说代码也更加优化了,代码逐渐组件化,各自的职责也更加明显了,实现了代码分离。

下面开始分析漏洞代码:

db('user')->insert(['name' => $username]);

db('user')主要还是进行了name属性的设置,并且return thinkphp/library/think/db/Query 实例。

继续调用了:think/db/Query 类中的 insert( 方法:

跟进:$options = $this->parseExpress();

将链式操作中设置的$this->options属性进行解析合并。

eg: db('name')->where()->order()->select(); 这种操作。

然后看重点:

$sql = $this->builder->insert($data, $options, $replace);

通过前面的分析,我们已经知道$this->builder 属性就是 \think\db\builder\Mysql 类的实例:

因为input数据获取函数并没有过滤inc,dec这两个值,导致可以进入到这里,造成注入。

漏洞exp:

/public/index.php/index/index/inc?name[0]=inc&name[1]=updatexml(1,concat(0x23,user(),0x7e),1)&name[2]=1

网上说的漏洞版本: 5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5

主要还是为了照顾一个朋友,所以写的细一点,自己也刚好记录一下。

ThinkPHP 5.0.15中的update注入漏洞的更多相关文章

  1. Thinkphp 5.0.15 设计缺陷导致Insert/update-SQL注入 分析

    分析 与上一个漏洞类似,这个也是前端可以传入一个数组变量,如['exp','123','123'],后端根据array[0]来将array[1]和array[2]直接拼接到SQL语句中. 由于TP只是 ...

  2. 把VueThink整合到已有ThinkPHP 5.0项目中

     享 关键字: VueThink ThinkPHP5.0 Vue2.x TP5 管理后台扩展 VueThink初认识 VueThink,是一个很不错的技术框架,由广州洪睿科技的技术团队2016年研发( ...

  3. 如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!

    当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_ ...

  4. ThinkPHP 5.0.x SQL注入分析

    前言 前段时间,晴天师傅在朋友圈发了一张ThinkPHP 注入的截图.最近几天忙于找工作的事情,没来得及看.趁着中午赶紧搭起环境分析一波.Think PHP就不介绍了,搞PHP的都应该知道. 环境搭建 ...

  5. WordPress Quick Paypal Payments插件HTML注入漏洞

    漏洞名称: WordPress Quick Paypal Payments插件HTML注入漏洞 CNNVD编号: CNNVD-201310-491 发布时间: 2013-10-22 更新时间: 201 ...

  6. Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)

    漏洞版本: mod_accounting 0.5 漏洞描述: BUGTRAQ ID: 62677 CVE ID: CVE-2013-5697 mod_accounting是Apache 1.3.x上的 ...

  7. java代码审计中的一些常见漏洞及其特征函数

    文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...

  8. 企业安全03Django GIS SQL注入漏洞CVE-2020-9402

    Django GIS SQL注入漏洞CVE-2020-9402 一.漏洞描述 Django是Django基金会的一套基于Python语言的开源Web应用框架.该框架包括面向对象的映射器.视图系统.模板 ...

  9. Django GIS SQL注入漏洞(CVE-2020-9402)

    影响版本 Django 1.11.29之前的1.11.x版本.2.2.11之前的2.2.x版本和3.0.4之前的3.0.x版本中存在SQL注入漏洞 提示有admin.vuln.vuln2,3个页面,存 ...

随机推荐

  1. [leetcode72]166. Fraction to Recurring Decimal手动实现除法

    让人火大的一道题,特殊情况很多 不过也学到了: java中int类型的最大值的绝对值比最小值的绝对值小1 int最小值的绝对值还是负的,除以-1也是 这种时候最好转为long类型进行处理 long n ...

  2. MongoDb学习三(spring-data-mongodb)

    本文采用2个种配置方式.xml配置 代码配置方式进行数据库的连接.实现简单的增删该查等一些操作.代码都有注释官方文档如下https://docs.spring.io/spring-data/mongo ...

  3. JAVA的一些笔记

    /*一般函数与构造函数的区别 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化 一般函数:对象创建时,需要函数功能时才调用 构造函数:一个对象对象创建时,只调用一次 一般函数:对象创 ...

  4. QPushButton

    QPushButton 什么是QPushButton? 构造函数 常用属性和方法 QPushButton 什么是QPushButton? QPushButton是一个按键类. class Q_GUI_ ...

  5. 安装cmake过程g++: 错误:unrecognized command line option ‘-std=gnu++14’

    问题根因 这个错误一般是gcc/g++版本太低导致的 疑问 我本地明明安装的是高版本的gcc/g++为何说是低版本的呢,有图为证: 这主要是因为你安装了多个版本的gcc/g++,但是默认(/usr/b ...

  6. JedisCluster使用pipeline操作Redis Cluster最详细从0到1实现过程

    公众号文章链接:https://mp.weixin.qq.com/s/6fMsG009RukLW954UUndbw 前言 2020年4月30日,Redis 6.0.0正式发布,标志着redis从此告别 ...

  7. git 知识点积累

    1.初始化指定目录作为git目录  git init newpro 2.git add xx.uve 3.克隆项目 git clone git clone git://github.com/schac ...

  8. String被final修饰

    源码:

  9. Phoneix(二)HBase集成Phoenix安装

    一.软件下载 1.访问:http://phoenix.apache.org/ 2.点击: 3.进入以下内容:点击 4.跳转到 5.跳转到 6.点击安装包,进入 点击进行下载: 二.安装 phoneni ...

  10. reactjs踩坑记

    getFieldDecorator 提示错误 Warning: `getFieldDecorator` will override `value`, so please don't set `valu ...