漏洞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. ESP32 BLE蓝牙 微信小程序通信发送大于20字符数据

    由于微信小程序只支持BLE每次发送数据不大于20个字节,ESP32则有经典蓝牙.低功耗蓝牙两种模式. 要解决发送数据大于20个字节的问题,最简单实用的方式就是分包发送.如下图所示: 1.什么起始字符和 ...

  2. 【wp】2020XCTF_逆向

    前几天的XCTF最后一场终于打完了,三场比赛下来对逆向部分的大概感觉是从第一场的啥都不会做(一道lua+一道apk)到后来的终于能有参与度,至少后两场的题目都是pc逆向,虽然特殊架构但好歹能做(tcl ...

  3. Hadoop之WordCount

    求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,在数据输入到Reduce之前先经过shuffle,将map函数输出的key值相同的所有的value值形 ...

  4. INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 的使用和区别

    INNER JOIN:如果表中有至少一个匹配,则返回行 LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行 FULL JOIN ...

  5. NC65在日常开发中常用的代码写法

    标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...

  6. 【MyBatis】MyBatis 注解开发

    MyBatis 注解开发 文章源码 环境搭建 Mybatis 也可以使用注解开发方式,这样就可以减少编写 Mapper 映射文件. 常用注解说明: @Insert 实现新增 @Update 实现更新 ...

  7. spring cloud gateway 日志打印

    从api请求中获取访问的具体信息,是一个很常见的功能,这几天在研究springcloud,使用到了其中的gateway,刚好将研究的过程结果都记录下来 0. Version <parent> ...

  8. SQL Server management studio使用sa连接时报错与伺服器的连接已成功,但在登入程序是发生错误

    使用Sql Server management studio的sa用户连接数据库时,报如下错误 解决方法: 1.使用windows验证登录 2.右键点击连接,点击属性,点击安全性,选择混合验证 3.重 ...

  9. 误删除SAP ECC中的profile文件

    环境:ECC6.0 EHP4  FOR ORACLE ON WINDWS X64下 今天在RZ10配置系统参数文件的时候,不小心错删除了instance profile文件,这下惨了,这是操作系统层级 ...

  10. Redis 实战 —— 02. Redis 简单实践 - 文章投票

    需求 功能: P15 发布文章 获取文章 文章分组 投支持票 数值及限制条件 P15 如果一篇文章获得了至少 200 张支持票,那么这篇文章就是一篇有趣的文章 如果这个网站每天有 50 篇有趣的文章, ...