前言

前几天审计某cms基于ThinkPHP5.0.24开发,反序列化没有可以较好的利用链,这里分享下挖掘ThinkPHP5.0.24反序列化利用链过程.该POP实现任意文件内容写入,达到getshell的目的

环境搭建

Debian

apache2+mysql+ThinkPHP5.0.24+php5.6

文件:application/index/controller/Index.php

namespace appindexcontroller;

class Index

{

public function index($input='')

{

echo "Welcome thinkphp 5.0.24";

echo $input;

unserialize($input);

}

}

简述

Thinkphp 5.0.x反序列化最后触发RCE,要调用的Request类__call方法.

但是由于这里self::$hook[$method]不可控,无法成功利用

我的思路是在找其他的__call,其他魔术方法搜了一圈没有可以进一步利用.

文件:thinkphp/library/think/console/Output.php

最后选择Output类中的__call方法,这里调用block方法.后续可以当做跳板

POP链分析

从头开始分析

反序列化起点:thinkphp/library/think/process/pipes/Windows.php removeFiles方法

跟进removeFiles方法

跳板:file_exists方法能够触发__toString魔术方法

跳板利用点:thinkphp/library/think/Model.php

Model抽象类的 __toString

跟进toJson方法至toArray方法

如下图Model抽象类的toArray方法,存在三个地方可以执行__call

但是我们目的是调用Output类的__call且能够继续利用,调试后选择第三处当做调板

$item[$key] = $value ? $value->getAttr($attr) : null;

分析下如何达到该行代码

$item[$key] = $value ? $value->getAttr($attr) : null;

这里直接看else分支

溯源$values变量,比较关键是下面两行

$modelRelation = $this->$relation();

$value = $this->getRelationData($modelRelation);

$modelRelation值可以利用Model类中的getError方法

跟进getRelationData方法,这里最后传入的$modelRelation需要Relation类型

最后返回值$values需要经过if语句判断

$this->parent && !$modelRelation->isSelfRelation() && get_class($modelRelation->getModel()) == get_class($this->parent)

全局搜索下,可以利用HasOne类

最后$attr值,由$bindAttr = $modelRelation->getBindAttr();执行后的结果.

跟进OneToOne抽象类getBindAttr方法,binAttr类变量可控.

至此代码执行到$item[$key] = $value ? $value->getAttr($attr) : null;就能够执行Output类__call魔术方法

跟进Output类block方法

继续跟进writelin方法,最后会调用write方法

这里$this->handle可控,全局搜索write方法,进一步利用

定位到:thinkphp/library/think/session/driver/Memcached.php

类: Memcached

继续搜索可用set方法

定位到:thinkphp/library/think/cache/driver/File.php

类:File

最后可以直接执行file_put_contents方法写入shell

$filename可控且可以利用伪协议绕过exit

$data值比较棘手,这里有个坑,由于最后调用set方法中的参数来自先前调用的write方法

只能为true,且这里$expire只能为数值,这样文件内容就无法写shell

继续执行,跟进下方的setTagItem方法

会再执行一次set方法,且这里文件内容$value通过$name赋值(文件名)

所以可以在文件名上做手脚

示例:php://filter/write=string.rot13/resource=./<?cuc cucvasb();?>

POP链(图)

EXP

马赛克

复现

写入文件

实战是需要找个可写目录

读取文件

结语

感谢@水泡泡师傅解答问题

整条POP分析下来挺有趣,希望师傅们喜欢.

php嵌套序列化输出tp5.0,ThinkPHP v5.0.x 反序列化利用链挖掘相关推荐

  1. tp5.0 php版本,ThinkPHP v5.0.2官方下载-ThinkPHP v5.0.2 完整版官方最新版-东坡下载

    ThinkPHP是一个免费的PHP框架,性能优秀,可以开发稳定的商业门户,ThinkPHPv5.0.2版本已经正式发布,小编带来了ThinkPHP v5.0.2 完整版源码,欢迎来下载! ThinkP ...

  2. ThinkPHP V5.0 正式版发布

    ThinkPHP5.0版本是一个颠覆和重构版本,官方团队历时十月,倾注了大量的时间和精力,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持compose ...

  3. ThinkPHP V5.0.5漏洞_漏洞考古:thiknphp5 代码执行漏洞

    thinkphp版本:v5.0.5 下载地址 https://www.thinkphp.cn/down/870.html poc:?s=index/thinkapp/invokefunction&am ...

  4. ThinkPHP V5.0.5漏洞_ThinkPHP 5.x 远程命令执行漏洞分析与复现

    php中文网最新课程 每日17点准时技术干货分享 0x00 前言 ThinkPHP 官方 2018 年 12 月 9 日发布重要的安全更新,修复了一个严重的远程代码执行漏洞.该更新主要涉及一个安全更新 ...

  5. ThinkPHP V5.0.5漏洞_ThinkPHP漏洞分析与利用

    一.组件介绍 1.1 基本信息 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和Ta ...

  6. 浅谈ThinkPH5.0和5.1的反序列化利用链分析

    前言 本文将总结分析ThinkPHP5.0和5.1中的反序列化利用链,一方面以备不时之需,另一方面算是对php反序列化的深入学习. 其中TP5.0的利用链会复杂很多,所以本文会先介绍TP5.1的利用链 ...

  7. thinkphp v5.0.11漏洞_ThinkPHP 5.0.x-5.0.23、5.1.x、5.2.x 全版本远程代码执行漏洞分析

    阅读: 10,272 1月11日,ThinkPHP官方发布新版本5.0.24,在1月14日和15日又接连发布两个更新,这三次更新都修复了一个安全问题,该问题可能导致远程代码执行 ,这是ThinkPHP ...

  8. thinkphp v5.0.11漏洞_ThinkPHP5丨远程代码执行漏洞动态分析

    ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,在保持出色的性能和至简代码的同时,也注重易用性.但是简洁易操作也会出现漏洞,之前ThinkPHP官方修复了一个严重的远程代码执行漏 ...

  9. thinkphp v5.0.11漏洞_ThinkPHP(5.1.x ~ 5.1.31 5.0.x ~ 5.0.23)GetShell漏洞

    12月9日,thinkPHP5.*发布了安全更新,这次更新修复了一处严重级别的漏洞,该漏洞可导致(php/系统)代码执行,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的ge ...

最新文章

  1. iOS native集成Weex js文件 不显示提示框问题
  2. Linux 编译安装内核
  3. python递归函数的思想_Python递归函数实例讲解
  4. 书店POS机--细化迭代2--测试
  5. vscode如何查看修改过的部分_编辑器 VS Code 如何快速查看 Go 接口?
  6. 基于Session的认证方式_实现认证功能_Spring Security OAuth2.0认证授权---springcloud工作笔记116
  7. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(九)
  8. 洛谷题解 P1005 【矩阵取数游戏】
  9. 将新项目上传到svn
  10. ArcMap加载SHP文件
  11. biostarhandboo(三)|本体论和功能分析
  12. 《windows程序设计(C语言版)》笔记
  13. 生产计划排产软件三大操作流程
  14. 微信营销如何做对o2o商业模式心灰意冷了吗?O2O到底要怎么做?
  15. JS实现拼音(字母)匹配(搜索)汉字(姓名)
  16. 高考数学考用计算机求函数吗,高考数学52种快速做题方法整理!再也不用担心考试时间不够了...
  17. Python学习笔记——网络通信过程
  18. 计算机网络——(3)网络体系结构和协议
  19. python解释型语言的说明
  20. 传统IDC部署网站(二)

热门文章

  1. IDEA使用Tomcat出现`requested without authorization, you can copy URL and open it in browser to trust it
  2. android 判断闪光灯,得到火炬(闪光灯)状态在Android M中切换它
  3. 老司机教你一秒分辨ESD静电保护器件正负方向
  4. 五天拼出一款提词器软件之二软件基础代码与功能实现
  5. 2014年11月中华架构师大会关于大数据云技术文档分享
  6. 刘芸担任A.O.史密斯明星体验官,直播介绍“斯”家好物
  7. Linux下IPMSG的实现
  8. 【安全牛学习笔记】w3af-身份认证
  9. mongodb Explain and Index
  10. python笔记5:向量化运算