5.0.0<=ThinkPHP5<=5.0.10 。

 

漏洞利用条件:

1.基于tp5开发的代码中使用了Cache::set 进行缓存

2.在利用版本范围内

3.runtime目录可以访问

 

扩展:

1.不可访问,可以考虑包含。前提要找到包含处。//Tp有一个Cache一个包含

2.利用缓存,做一个长期的shell动态生成。

 

漏洞原因:缓存名,可以预测,缓存内容用户可控。

 

造成漏洞代码

<?php

namespace
app\index\controller;

use
think\Cache;

class
Index

{

public
function
index()

{

Cache::set("name",input("get.username"));

return
'Cache success';

}

}

 

use think\Cache; 跟到think\Cache.php

think\Cache.php 文件内容

use think\cache\Driver;

set 方法


缓存写入次数

return self::init()->set($name, $value, $expire);

 

自动缓存

 

在init 方法里

 

 

Config::get('cache.type')

 

 

默认为File类型

程序获取cache type 以后

 

 

这样就加载了 \think\cache\driver\File.php

 

 

return self::init()->set($name, $value, $expire);

通过Init()
调用file 下的set方法

if (is_null($expire)) {
$expire = $this->options['expire'];

}

 

那么$expire=0

 

目录名以及文件名:

位,文件名为后30位
}
if ($this->options['prefix']) {
$name = $this->options['prefix'] . DS . $name;
}
$filename = $this->options['path'] . $name . '.php';
$dir = dirname($filename);

if ($auto && !is_dir($dir)) {
mkdir($dir, 0755, true);
}
return $filename;
}

 

$filename

找到set 的缓存名
就可以了
进行md5加密


为目录名,后30位
为文件名

 


在Set中
只是对value做了一个序列化的操作,并没有做过滤。

来dump一下 serialize 前后变化

 

 

文件的写入,这里为tp5.0.15 版本,作者对$data 进行了位置修改,并在$data 前,做了

exit()来避免用户输入的数据,被代码执行。
并且在$expire 这处,做了一个%012d强制的类型转换

 

在tp5.0.10 之前,这段代码是这样的

 

 

写入的数据,之前没有exit,并且对$data 没有做过滤

导致利用%0a换行,进行代码执行。

我们访问一下文件

成功可以代码执行

Thinkphp 缓存RCE的更多相关文章

  1. ThinkPHP 缓存技术详解 使用大S方法

    如果没有缓存的网站是百万级或者千万级的访问量,会给数据库或者服务器造成很大的压力,通过缓存,大幅减少服务器和数据库的负荷,假如我们把读取数据的过程分为三个层,第一个是访问层,第一个是缓存层,第三个是数 ...

  2. thinkphp缓存使用

    thinkphp缓存使用 一.总结 1.这里的缓存不是指的缓存的页面,而是cache,如果你缓存了一个数组,那么你就可以取出这个数组里面的数据进行使用,用法性质和cookie和session有点像 2 ...

  3. thinkphp 缓存数据

    thinkphp 中内置了缓存操作 3.1版本的数据缓存方法是cache 基本用法: S(array('type'=>'xcache','expire'=>60)); 缓存初始化 缓存初始 ...

  4. 修改ThinkPHP缓存为Memcache的方法

    一般来说,ThinkPHP的默认缓存方式是以File文件方式实现的,运行时会在/Runtime/Temp 下生成很多的缓存文件. 有的情况下服务器装了memcached之后,需要将ThinkPHP的缓 ...

  5. thinkphp缓存

    最简答的缓存 // 缓存设置 public function ff(){ S('); } // 缓存读取 public function aa(){ $value = S('name'); echo ...

  6. ThinkPHP缓存微信公众号access_token

    access_token作为微信的全局票据,在高级接口中需要频繁调用,其有效期为7200秒,即2小时,而微信官方对调用Token的次数有限制(参见接口频率限制说明),获取access_token每日限 ...

  7. Thinkphp 缓存微信jssdk相关认证参数

    public function getapiSignature() {  $access_token=S('access_token');  //先查询缓存中是否存在  if($access_toke ...

  8. ThinkPHP - 缓存使用

    用法: 需要使用不同的缓存方式的时候 需要重新初始化,如果不初始化直接调用的话,则会按照系统配置自动初始化.初始化的返回值,可以直接操作缓存: $cache = cache(array('type'= ...

  9. Thinkphp 缓存和静态缓存局部缓存设置

    1.S方法缓存设置 if(!$rows = S('indexBlog')){ //*$rows = S('indexBlog') $rows = D('blog')->select(); S(' ...

随机推荐

  1. Win10 cmd的ssh命令连接linux虚拟机

    其实就是一个小发现了~ 闲的没事的时候在cmd里面敲了ssh命令,居然提示是一个命令,貌似以前是没有这功能的.然后就打开虚拟机试试能不能远程连接.没想到还成功了~ 有了这功能就省得安装专门的远程连接工 ...

  2. VulnHub靶场学习_HA: InfinityStones

    HA-InfinityStones Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-infinity-stones,366/ 背景: 灭霸认为,如果他杀 ...

  3. AJ学IOS(52)多线程网络之GCD下单例设计模式

    AJ分享,必须精品 单例模式 1:单例模式的作用 可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问 从而方便地控制了实例个数,并节约系统资源 单例模式的使用场合 在整个应用程序中, ...

  4. 2019-07-31【机器学习】无监督学习之降维NMF算法 (人脸特征提取)

    代码 from numpy.random import RandomState #加载RandomState用于创建随机种子 import matplotlib.pyplot as plt from ...

  5. XFS文件系统的备份与恢复

    永久修改主机名:hostnamectl set-hostname oldboy临时修改主机名:hostname xfsdump备份xfsdump -f 备份的文件位置 要备份的分区或者磁盘 免交互备份 ...

  6. Extjs——简单的Grid panel小实例

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  7. 时间格式的转化 vue与js 年月日 时分秒

    首先使用原生转化的方法 第一种 //时间转换 dateStr(d, sign) { //如果没有传递符号,给一个默认的符号 if (!sign) { sign = '-' } //获取d里面年月日时分 ...

  8. 这价格看得我偷偷摸了泪——用python爬取北京二手房数据

    如果想了解更多关于python的应用,可以私信我,或者加群,里面到资料都是免费的 http://t.cn/A6Zvjdun 近期,有个朋友联系我,想统计一下北京二手房的相关的数据,而自己用Excel统 ...

  9. stand up meeting 12/18/2015 ~12/20/2015(weekend)

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云    完成主页面设计和非功能性PDF reader UI设计实现 ...

  10. Springboot:员工管理之修改员工(十(8))

    构建员工修改请求 com\springboot\controller\EmployeeController.java /*调转到员工修改页 携带员工信息 restful风格*/ @GetMapping ...