php phar,PHP phar:协议对象注入技术介绍
前言
在之前的BlackHat 2018大会上公布了一款针对PHP应用程序的全新攻击技术。我们将通过这篇文章简单介绍下。
来自Secarma的安全研究员Sam Thomas发现了一种新的开发技术,它可以导致PHP对象注入漏洞——而无需使用PHPunserialize()函数。这项新技术是在BlackHat 2018大会上公布的,利用PHP反序列化漏洞升实现远程代码执行。我们在RIPS代码分析引擎中添加了对这种新型攻击的检测。
常见样式
大多数PHP文件操作允许在访问文件路径时使用各种url样式,如data://、zlib://或php://。这些操作通常用于远程文件,攻击者可以在其中控制文件包含完整的文件路径。
远程文件包含漏洞利用:include($_GET['file'])
include('php://filter/convert.base64-encode/resource=index.php');
include('data://text/plain;base64,cGhwaW5mbygpCg==');
Phar元数据
但到目前为止,很少有人关注phar://这个点。Phar(PHP Archive)文件的有趣之处在于它们包含序列化格式的元数据。让我们创建一个Phar文件,并添加一个包含一些数据作为元数据的对象:// create new Phar
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub('');
// add object of any class as meta data
class AnyClass {}
$object = new AnyClass;
$object->data = 'rips';
$phar->setMetadata($object);
$phar->stopBuffering();
我们新建的test.phar文件有以下内容。我们可以看到对象被存储为一个序列化的字符串。
PHP对象注入
如果现在通过phar://对我们现有的Phar文件执行文件操作,则其序列化元数据将被反序列化。这意味着我们在元数据中注入的对象被加载到应用程序的范围中。如果此应用程序具有已命名的AnyClass类并且具有魔术方法destruct()或wakeup()定义,则会自动调用这些方法。这意味着我们可以在代码库中触发任何析构函数或wakeup方法。更糟糕的是,如果这些方法对我们注入的数据进行操作,那么这可能会导致进一步的漏洞。class AnyClass {
function __destruct() {
echo $this->data;
}
}
// output: rips
include('phar://test.phar');
利用
首先,攻击者必须能够在目标Web服务器上植入一个Phar文件。Sam Thomas发现了一个如何将Phar文件隐藏到JPG文件中的技巧,因此只要常见的图片上传功能就足够。但这并不重要,因为如果攻击者可以在ìnclude(),fopen(),file_get_contents(),file()等操作中控制完整的文件路径,那么将会造成严重的安全漏洞。因此,通常会在用户输入中验证这些功能。但是现在攻击者可以通过phar://注入并获得代码执行。
到目前为止看起来无害的代码示例:file_exists($_GET['file']);
md5_file($_GET['file']);
filemtime($_GET['file']);
filesize($_GET['file']);
总结
通过RIPS的分析,我们可以自动检测用户输入是否在PHP文件操作中未经验证。
这样,我们检测是否存在文件删除、文件泄露、文件写入,文件操作,文件创建、文件包含(等等)漏洞。
此外,RIPS对敏感字符串分析使我们能够精确评估文件路径是完全还是由攻击者控制,以及是否可以phar://注入。最后,我们在RIPS代码分析器中添加了一个名为Phar Deserialization的新漏洞类型,以检测这种新类型的代码风险。
*参考来源:rips,由周大涛编译,转载请注明来自FreeBuf.COM
php phar,PHP phar:协议对象注入技术介绍相关推荐
- 十种进程注入技术介绍:常见注入技术及趋势调查
前言 进程注入是一种广泛使用的躲避检测的技术,通常用于恶意软件或者无文件技术.其需要在另一个进程的地址空间内运行特制代码,进程注入改善了不可见性,同时一些技术也实现了持久性.尽管目前有许多进程注入技术 ...
- 从入门到掉坑:Go 内存池/对象池技术介绍
作者:deryzhou,腾讯 PCG 后台开发工程师 Go 中怎么实现内存池,直接用 map 可以吗?常用库里 GroupCache.BigCache 的内存池又是怎么实现的?有没有坑?对象池又是什么 ...
- ATM协议及ATM技术介绍
43.1.1 协议简介 ATM(Asynchronous Transfer Mode)是一种以信元为单位的异步转移模式.它是基于B-ISDN宽带综合服 务数字网标准而设计的用来提高用户综合访问速度的 ...
- [免费专栏] Android安全之利用JDB调试Android应用程序(动态代码注入技术)
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- php phar教程,Phar:PHP文件存档
Phar:PHP文件归档 1. Phar简介 Phar是PHP Archive缩写,将php文件归档到一个文件包. 将一个模块的文件打包成一个phar,这样方便模块整体迁移,只需将phar文件移动过去 ...
- Codeigniter 利用加密Key(密钥)的对象注入漏洞
http://drops.wooyun.org/papers/1449 原文链接:http://www.mehmetince.net/codeigniter-object-injection-vuln ...
- spring依赖注入_Spring依赖注入技术的发展
spring依赖注入 回顾Spring框架的历史,您会发现在每个发行版中实现依赖注入的方法越来越多. 如果您使用该框架已经超过一个月,那么在这篇回顾性文章中可能不会发现任何有趣的东西. 除了Scala ...
- Spring依赖注入技术的发展
回顾Spring框架的历史,您会发现实现依赖注入的方式在每个发行版中都在增加. 如果您使用该框架已经超过一个月,那么在这篇回顾性文章中可能不会发现任何有趣的东西. 除了Scala中的最后一个示例,没有 ...
- Oracle学习总结(6)—— SQL注入技术
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一. SQL注入基 ...
最新文章
- Tomcat7源码分析学习系列之二-----tomcat的真正的启动脚本catalina.bat解析
- 一条代码解决各种IE浏览器兼容性问题
- 有条件忽略测试的JUnit规则
- 个人作业五:四则运算二
- python实现二叉树的镜像
- 支持向量机(SVM)复习总结
- 基于Adobe LCDS产品的数据访问解决方案Part4
- activiti(7.0)排他网关
- 打仗最害怕的是什么?后方出事
- c++不好可以学qt吗_学美容好不好,学美容有前途吗?
- 台达A2/B2伺服电机编码器改功率软件
- PHP里面用ichartjs,ichartjs插件的使用
- 你焊接过最小的贴片器件是多大?
- 概率论——Jordan公式
- Excel数据批量导入导出(基础版)
- 如何修改web浏览器title文字及icon
- 函数信号发生器的功能介绍
- 扇形导航 html svg
- 【英文】Node.js Streams: Everything you need to know //转载
- 时光穿梭机(删除文件)
热门文章
- HTML常用标记(超详解)
- tp监控连接云路由服务器失败_TP-Link TL-WDR7660连不上网怎么办?
- u8服务器能用无线网连吗,u8客户端如何连接服务器配置
- Java毕业设计_基于Android的智能导游APP设计与实现
- [Go实战]golang使用mysql实例和第三方库Gendry
- 分享最近在百度和米哈游的 Go 岗位面试
- 艺术大观杂志艺术大观杂志社艺术大观编辑部2022年第20期目录
- 解决Android Studio升级3.2.1后的 合并XML出错问题
- 格式化时间转化为时间戳
- 萤石C6语言对话怎么设置,萤石C6使用说明