Drupal YAML 反序列化代码执行漏洞(CVE-2017-6920)

news2024/9/22 17:31:40

事件背景

框架漏洞收集

老外的CMS框架,比较复杂,数据流向太长,调试需要消耗较多的时间。

漏洞说明

1. 漏洞原理:2017年6月21日,Drupal官方发布了一个编号为CVE-2017- 6920 的漏洞,影响为Critical。这是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core。

2. 组件描述:Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由由内容管理系统和PHP开发框架共同构成,在GPL2.0及更新协议下发布。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。

3. 影响版本: 8.0.0~8.3.3

漏洞复现

环境搭建:GitHub - drupal/drupal at 8.3.3

这里可能需要利用docker环境的命令配置一下,我自己的环境为:windows10、PHP7.1、电脑带有docker可使用composer命令生成vendor目录、需要提供yaml环境(https://www.cnblogs.com/yycode/p/16039854.html)、在php.ini文件中添加”yaml.decode_php=On“

然后访问/core/install.php进入安装界面,简单填数据库的信息安装即可

登录后访问路径/admin/config/development/configuration/single/import

向输入框输入POC

点击import,可以看到phpinfo界面,说明POC攻击成功

漏洞分析

drupal8.3.3为开源框架,可以直接审计代码进行调试,根据网上相关漏洞的信息,可以得知本漏洞是yaml_parse()触发的yaml php反序列化,于是先找到该函数的出现的点

有且仅有一个,因此可以断定就是这里,进入看看

这里可以在PHP手册看到该函数的作用

可以看到第一个参数为YAML格式字符串,而函数的作用为将全部或部分 YAML 文档流转换为 PHP 变量,还有一个注意事项

大概意思为:如果使用!php/object则会进行一次反序列化,这个开关由ini的yaml.decode_php控制,因此大概能知道这个函数如果在特定条件下会触发反序列化,而我们现在需要的是控制第一个参数,即$raw

步入Yaml.php::decode查看是否能实现与YamlPecl.php::decode进行链接,步入getSerializer查看一下

可以看到,只要存在yaml环境即可步入第一个条件判断,这也是为什么需要yaml环境了,再去看有没有可控参数,最后定位到ConfigSingleImportForm.php文件

可以看到Yaml::decode()中参数可控因此直接在这利用即可,不过还有一个问题就是利用哪个文件进行反序列化,这个需要查看多个php类文件,最后定位在

vendor\guzzlehttp\guzzle\src\Cookie\FileCookieJar.php

\vendor\guzzlehttp\psr7\src\FnStream.php

一个可以直接写webshell,另一个是可以执行无参函数

最后POC为:

<?php

namespace GuzzleHttp\Psr7;

class FnStream {

    public function __construct(array $methods){

        $this->methods = $methods;

        // Create the functions on the class

        foreach ($methods as $name => $fn) {

        $this->{'_fn_' . $name} = $fn;

        }

    }

    public function __destruct(){

        if (isset($this->_fn_close)) {

        call_user_func($this->_fn_close);

        }

    }

}

$fn = new FnStream(array('close'=>'phpinfo'));

echo(serialize($fn))

?>

最后在生成的payload前面增加 !php/object 修改为yaml格式即可,除了yaml的一个触发点,其它和普通的PHP反序列化没什么区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信驰达推出RTL8720DN系列2.4G和5G双频Wi-Fi+蓝牙二合一模块

近日&#xff0c;领先的无线物联网通信模块厂商深圳信驰达科技RF-star推出了基于RTL8720DN SoC的2.4 GHz和5 GHz双频Wi-Fi蓝牙二合一模块—RF-WM-20DNB1。 图 1信驰达RF-WM-20DNB1 Wi-Fi模块 RF-WM-20DNB1是一款低功耗单芯片无线蓝牙和Wi-Fi组合模块&#xff0c;支持双频(2.4 G…

关于骑行,这十个另类的励志文案,让人过目不忘。

在自行车骑行的世界里&#xff0c;有许多令人振奋和感动的励志句子。以下是一些令人过目不忘的另类励志文案&#xff0c;一定会给您的骑行生涯带来新的动力和激情&#xff1a; 1.骑行并非单纯的身体运动&#xff0c;而是需要灵魂的参与。2.自行车不会说话&#xff0c;但它会唱歌…

家庭用的无线洗地机到底好不好用?2023洗地机品牌排行榜前十名

无线洗地机在清洁使用的时候非常便捷&#xff0c;多功能于一体能够轻轻松松就拖扫完全家&#xff0c;不需要多余的先扫再拖&#xff0c;浪费时间还非常的劳累。那么有什么靠谱并且质量也有保障的无线洗地机推荐吗&#xff1f;为了给想要选购洗地机的小伙伴提供一些参考&#xf…

SpringMVC-mybatis中可以返回查询的个数,但是都为null。。。

通过postman测试请求时&#xff0c;显示查询成功&#xff0c;返回一个json数组&#xff0c;里面也有数据&#xff0c;但是数据都是null。 说明&#xff1a;确实是sql执行成功了&#xff0c;只不过是没有将sql中的字段的值给注入到对象的属性中去。。。 Select("SELECT * …

ArduPilot之433电传模块集成之H7Dual飞控Rx/Tx丝印问题

ArduPilot之433电传模块集成之H7Dual飞控Rx/Tx丝印问题 1. 源由2. 安装3. 排查3.1 电气连接3.2 软件配置3.3 模块测试3.4 通信测试3.5 定位问题 4. 总结5. 参考资料 1. 源由 鉴于最近iNav最新固件6.1.1出现远航炸机&#xff0c;还是回到相对可靠的Ardupilot&#xff0c;在Mavl…

Android 之 动画合集之属性动画 -- 又见

本节引言&#xff1a; 上节我们对Android的属性动画进行了初步的学习&#xff0c;相信大家对于属性动画已经不再是 一知半解的状态了&#xff0c;本节我们继续来探究Android属性动画的一些更高级的用法&#xff01; 1.Evaluator自定义 1&#xff09;Evaluator介绍 上一节中的…

黑马程序员-从0到1学习Linux-第三章-Linux用户和权限

目录 认知root用户 用户、用户组管理 查看权限控制 修改权限控制 - chmod 修改权限控制 - chown 认知root用户 1、root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中&#xff0c;拥有最大…

数据库—数据库备份(三十四)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 4.1物理与逻辑角度 4.2数据库备份策略角度 五、常见的备份方法 5.1 物理备份 5.2 使用专用备…

物理机安装ESXI时遇到No Network Adapters

前不久在虚拟机下安装完成了ESXI&#xff0c;果断地使用了&#xff0c;确实很不错了&#xff0c; 配合我上次发的密匙&#xff08;https://www.cnntt.com/archives/5556&#xff09;妥妥爽。 虚拟机中试玩了一下&#xff0c;就开始布置到我的物理机上了&#xff0c;毕竟我以后…

【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

文章目录 一、Socket 套接字简介1、Socket 套接字概念2、Socket 套接字类型3、Socket 套接字使用步骤4、Socket 套接字服务端与客户端 二、Socket 服务端与客户端开发1、服务端2、客户端3、执行结果 一、Socket 套接字简介 1、Socket 套接字概念 Socket 套接字 是一种 进程之间…

Matlab的SimuLink对FS32K144编程--内部数据存储Flash

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 前言 Flah擦写是由寿命的&#xff0c;应当减免无效的擦写&#xff0c;如数据值不变不进行擦写 1、新建工程完成后&#xff0c;拖出Flash的存储控制初始化…

vue3+ts+element-plus实际开发之导出表格和不同类型之间相互赋值

vue3tselement-plus实际开发常用功能 ✏️ 1. 前端导出选中表格数据到本地成xlsx文件1. 安装依赖2. 引入&#xff0c;import * as XLSX from "xlsx";3. 报错找不到模块“xlsx”或其相应的类型声明4. 使用导出文件 ✏️ 2. 通过接口获取文件流下载xlsx文件1. 直接用a标…

HEVC码流解析

根据《T-REC-H.265-201504-I!!PDF-E》协议描述。 一&#xff0c;HEVC的码流格式定义 字节流格式由字节流NAL 单元语法结构序列构成。每一字节流NAL 单元语法结构包含有一个起始编码前缀&#xff0c;后面跟随一个nal_unit(NumBytesInNALunit)语法结构。它可能&#xff08;一定情…

嵌入式传感器的接口:中断驱动的ADC驱动器

我们研究了如何编写阻塞的模数转换器&#xff08;ADC&#xff09;驱动程序和使用轮询技术不阻塞应用程序流的驱动程序。轮询外围设备的驱动程序效率很低&#xff0c;如果系统可能处于低功耗状态&#xff0c;它们可能会浪费宝贵的时钟周期&#xff0c;而这些时钟周期本来会被使用…

【体系认证】ISO27701 隐私信息管理体系

1 认证定义 ISO/IEC 27701 隐私信息管理体系是ISO国际标准化组织和IEC国际电工委员会联合发布的隐私信息管理体系国际标准&#xff0c;它是对SO27001信息安全管理体系的扩展&#xff0c;在全球普遍受到认可&#xff0c;且具国际权威性。 ISO/IEC27701通过对隐私保护的控制对…

【Lua学习笔记】Lua进阶——Table(3) 元表

接上文 文章目录 元表__tostring__call__index__newindex运算符元方法其它元表操作 元表 Q&#xff1a;为什么要使用元表&#xff1f; A&#xff1a;在Lua中&#xff0c;常常会需要表与表之间的操作。元表中提供了一些元方法&#xff0c;通过自定义元方法可以实现想要的功能&…

Linux Day03

一、基础命令(在Linux Day02基础上补充) 1.10 find find 搜索路径 -name 文件名 按文件名字搜索 find 搜索路径 -cmin -n 搜索过去n分钟内修改的文件 find 搜索路径 -ctime -n搜索过去n分钟内修改的文件 1&#xff09;按文件名字 2&#xff09;按时间 1.11 grep 在文件中过…

m1 docker安装tomcat

背景 看到有同事尝试使用docker搭建tomcat服务&#xff0c;然后用nginx实现服务的负载均衡&#xff0c;但是遇到了挂载的问题&#xff0c;于是我在我自己的mac上尝试了一下。 实践过程 在本地新建tomcat的目录&#xff0c;下方挂载对应的数据文件和脚本文件。 其中&#xff…

小皮面板新增一个新网页页面

复制到根目录下&#xff0c;根目录 这里查看根目录。 然后点创建网站&#xff0c;基本配置里写入域名&#xff0c;还要刚才的网页文件夹&#xff0c;即index所在文件夹&#xff0c;index就是网页页面。 网址就是&#xff1a;http://xxxx.com/xxxx/ 参考小皮面板官网文章 htt…

【STL】模拟实现反向迭代器

目录 1. 读源码 2. 搭建框架 3. 迭代器的操作 operator*() operator->() operator() operator--() operator!() 4. 实现 list 的反向迭代器 5. 实现 vector 的反向迭代器 6. 源码分享 写在最后&#xff1a; 1. 读源码 我们之前实现的 vector&#xff0c;list…