php反序列化漏洞复现过程
PHP反序列化漏洞复现
测试代码

我们运行以上代码文件,来证明函数被调用:

应为没有创建对象,所以构造函数__construct()不会被调用,但是__wakeup()跟__destruct()函数都被调用,如果这些函数里面包含的是恶意代码会怎么样呢?
利用场景
__wakeup() 或__destruct()
由前可以看到,unserialize()后会导致__wakeup() 或__destruct()的直接调用,中间无需其他过程。因此最理想的情况就是一些漏洞/危害代码在__wakeup() 或__destruct()中,从而当我们控制序列化字符串时可以去直接触发它们。这里针对 __wakeup() 场景做个实验。
基本的思路是,本地搭建好环境,通过 serialize() 得到我们要的序列化字符串,之后再传进去。通过源代码知,把对象中的test值赋为 “<?php phpinfo(); ?>”,再调用unserialize()时会通过__wakeup()把$test的写入到shell.php中。为此我们写个php脚本:

运行结果:

我们再来看shell1.php:

成功的利用反序列化漏洞来得到phpinfo()信息
不过具体的环境多是像下面代码这样,我们的test是我们可控的参数

我们传入参数test=O:7:"bmjoker":1:{s:4:"test";s:18:"<?php phpinfo();?>";}

同时shell.php也成功写入

成功利用php反序列化漏洞
其他Magic function的利用
但如果一次unserialize()中并不会直接调用的魔术函数,比如前面提到的__construct(),是不是就没有利用价值呢?非也。类似于PWN中的ROP,有时候反序列化一个对象时,由它调用的__wakeup()中又去调用了其他的对象,由此可以溯源而上,利用一次次的“gadget”找到漏洞点。

这里我们给test传入构造好的序列化字符串后,进行反序列化时自动调用 __wakeup()函数,从而在new joker()会自动调用对象joker中的__construct()方法,从而把<?php phpinfo();?>写入到shell.php中:
我们传入参数 test=O:7:"bmjoker":1:{s:4:"test";s:18:"<?php phpinfo();?>";}

同时she.php也成功写入:

利用普通成员方法
前面谈到的利用都是基于“自动调用”的magic function。但当漏洞/危险代码存在类的普通方法中,就不能指望通过“自动调用”来达到目的了。这时的利用方法如下,寻找相同的函数名,把敏感函数和类联系在一起。

本意上,new一个新的lmjoker对象后,调用__construct(),其中又new了bmjoker对象。在结束后会调用__destruct(),其中会调用action(),从而输出 bmjoker

下面是利用过程。构造序列化

得到:

传给5.php的test参数,利用成功

php反序列化漏洞复现过程的更多相关文章
- jboss反序列化漏洞复现(CVE-2017-7504)
jboss反序列化漏洞复现(CVE-2017-7504) 一.漏洞描述 Jboss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HT ...
- php反序列化漏洞复现
超适合小白的php反序列化漏洞复现 写在前头的话 在OWASP TOP10中,反序列化已经榜上有名,但是究竟什么是反序列化,我觉得应该进下心来好好思考下.我觉得学习的时候,所有的问题都应该问3个问题: ...
- fastjson =< 1.2.47 反序列化漏洞复现
fastjson =< 1.2.47 反序列化漏洞复现 HW期间爆出来一个在hw期间使用的fastjson 漏洞,该漏洞无需开启autoType即可利用成功,建议使用fastjson的用户尽快升 ...
- Fastjson反序列化漏洞复现
Fastjson反序列化漏洞复现 0x00 前言 对Fastjson反序列化漏洞进行复现. 0x01 漏洞环境 靶机环境:vulhub-fastjson-1.2.24 ip:172.16.10.18 ...
- JAVA反序列化漏洞复现
目录 Weblogic反序列化漏洞 Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271) Weblogic WLS Cor ...
- ShadowBroker释放的NSA工具中Esteemaudit漏洞复现过程
没有时间测试呢,朋友们都成功复现,放上网盘地址:https://github.com/x0rz/EQGRP 近日臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit. ...
- WebLogic XMLDecoder反序列化漏洞复现
WebLogic XMLDecoder反序列化漏洞复现 参考链接: https://bbs.ichunqiu.com/thread-31171-1-1.html git clone https://g ...
- Jboss反序列化漏洞复现(CVE-2017-12149)
Jboss反序列化漏洞复现(CVE-2017-12149) 一.漏洞描述 该漏洞为Java反序列化错误类型,存在于jboss的HttpInvoker组件中的ReadOnlyAccessFilter过滤 ...
- Apache Shiro反序列化漏洞复现
Apache Shiro反序列化漏洞复现 0x01 搭建环境 获取docker镜像 Docker pull medicean/vulapps:s_shiro_1 重启docker system res ...
随机推荐
- 为什么StringBuilder是线程不安全的?StringBuffer是线程安全的?
面试中经常问到的一个问题:StringBuilder和StringBuffer的区别是什么? 我们非常自信的说出:StringBuilder是线程安全的,StirngBuffer是线程不安全的 面试官 ...
- 第五场周赛(字符串卡常个人Rank赛)——题解
本次题目因为比较简单,除了个别题目,其余题目我只写一个思路不再贴代码. 先是Div.2的题解 A题奇怪的优化,把递归函数改成2*fun(...)即可,其实看懂程序也不难,就是求a*2b: B题你会st ...
- Servlet接口的实现
Servlet接口对Servlet进行了规范,定义了方法的主要范围. 1.public void init(ServletConfig servletConfig) (初始化) 参数的作用: (1)调 ...
- linux 操作系统级别监控 vmstat/dstat 命令
vmstat命令综合了CPU.进程.内存.磁盘IO等信息 命令:vmstat 1 表示vmstat每2秒采集数据,一直采集,直到我结束程序 vmstat 2 1 表示每个两秒采集一次 ...
- Bat批处理命令执行中文路径解决方法
用window自带的记事本新建一个bat,然后把命令复制进去,保存就OK
- Kylin配置Spark并构建Cube
HDP版本:2.6.4.0 Kylin版本:2.5.1 机器:三台 CentOS-7,8G 内存 Kylin 的计算引擎除了 MapReduce ,还有速度更快的 Spark ,本文就以 Kylin ...
- windows下zookeeper安装和使用
一,下载 可以到官网下载 官方主页: https://zookeeper.apache.org/ 二,安装 解压即可 三,配置 需要java环境,在加压出来的文件夹中找到zoo_sample.cfg文 ...
- c3p0配置记录
官方文档 : http://www.mchange.com/projects/c3p0/index.html <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 ...
- js校验对象是否全部为空
function judgeIsNotBlank(obj) { var bool = true; var arr = Object.keys(obj); ; for(var key in obj){ ...
- Nginx负载均衡配置实例
面对高并发的问题,企业往往会从两个方面来解决.其一,从硬件上面,提升硬件的配置,增加服务器的性能:另外,就是从软件上,将数据库和WEB服务器分离,使数据库和WEB服务器都能够充分发挥各自的性能,并且二 ...