漏洞分析 | WP Super Cache远程代码执行漏洞分析
0x01 WP Super Cache 介绍
WP Super Cache是WordPress的一个插件,主要用来缓存加速网页数据的。
笔者发现管理后台再向缓存配置文件写入数据时过滤不严谨导致可以植入恶意代码,进而导致远程代码执行。WordPress官方已经在最新版1.7.2中修复了此漏洞。
受影响版本:<= 1.7.1
0x02 漏洞复现
首先登陆管理后台,找到WP Super Cache的设置页面,通常URL为**/wp-admin/options-general.php?page=wpsupercache&tab=settings**
在缓存路径设置一栏中插入恶意代码:’;$_GET[c]
;#
点击更新,恶意代码会跟随缓存配置文件的更新一并写入到配置文件wp-cache-config.php中去。
通过访问当前页面并附上参数c=cmd(cmd表示要执行的命令)即可触发漏洞!
0x03 漏洞分析
漏洞关键代码:
if( isset( $_POST[ 'action' ] ) && $_POST[ 'action' ] == 'scupdates' ) {//在判断各数据不为空情况下写入数据 if( isset( $_POST[ 'wp_cache_location' ] ) && $_POST[ 'wp_cache_location' ] != '' ) { /* * dirname():获取文件(夹)所在的父目录 * trailingslashit():保证目录是以/结尾 */ $dir = realpath( trailingslashit( dirname( $_POST[ 'wp_cache_location' ] ) ) );//先获取原来的缓存路径设置中的缓存位置所在的父目录 if ( $dir == false ) $dir = WP_CONTENT_DIR . '/cache/'; else /* * wpsc_deep_replace():将所有的..替换为\ * basename():获取路径尾部名称 */ $dir = trailingslashit( $dir ) . trailingslashit(wpsc_deep_replace( array( '..', '\\' ), basename( $_POST[ 'wp_cache_location' ] ) ) ); //代码仅仅是修正了目录名,而没有对$_POST[ 'wp_cache_location' ]进行严谨的过滤 //攻击者可以写入恶意数据 $new_cache_path = $dir; } else { $new_cache_path = WP_CONTENT_DIR . '/cache/'; } if ( $new_cache_path != $cache_path ) { if ( file_exists( $new_cache_path ) == false )//重命名目录或文件 rename( $cache_path, $new_cache_path ); $cache_path = $new_cache_path; //更新指定字段的数据 wp_cache_replace_line('^ *\$cache_path', "\$cache_path = '" . $cache_path . "';", $wp_cache_config_file);//更新cache_path字段的数据 }...
**wp_cache_replace_line($old, $new, $my_file)**函数的功能是更新指定的字段的数据,这里指定的字段是cache_path,字段数据是’cache_path =’. cachepath.′;,其中的cache_path .';,其中的cachepath.′;,其中的cache_path则是来自于$_POST[ ‘wp_cache_location’ ],该数据可控,攻击者可以构造脏数据。
*wp_cache_replace_line(**$old, $new, $my_file***)****函数的实现:
function wp_cache_replace_line( $old, $new, $my_file ) { if ( @is_file( $my_file ) == false ) {//判断配置文件是否存在... return false; }... $found = false; $loaded = false; $c = 0; $lines = array(); while( ! $loaded ) { $lines = file( $my_file );//读入多行数据 if ( ! empty( $lines ) && is_array( $lines ) ) { $loaded = true; } ... } foreach( (array) $lines as $line ) {... } elseif ( preg_match( "/$old/", $line ) ) { //调试输出信息 wp_cache_debug( "wp_cache_replace_line: changing line " . trim( $line ) . " to *$new*" ); //原配置文件中是存在cache_path字段的,所以程序会走到该分支 $found = true; } } $tmp_config_filename = tempnam( $GLOBALS['cache_path'], 'wpsc' );//创建一个唯一的文件,如果目录不存在,就会在系统临时目录中创建 rename( $tmp_config_filename, $tmp_config_filename . ".php" ); $tmp_config_filename .= ".php"; $fd = fopen( $tmp_config_filename, 'w' );//打开文件 ... if ( $found ) { foreach( (array) $lines as $line ) { if ( ! preg_match( "/$old/", $line ) ) {//正则匹配欲修改的字段 fputs( $fd, $line ); } elseif ( $new != '' ) { fputs( $fd, "$new\n" );//更新字段,恶意代码由此被植入! } } } else {... } fclose( $fd );//关闭文件句柄 rename( $tmp_config_filename, $my_file );//配置文件后缀为php... return true;}
程序在调用wp_cache_replace_line($old, $new, myfile)∗∗时,∗∗my_file)**时,**myfile)∗∗时,∗∗new是由符号**‘’包裹在内的字符串,而攻击者用相应的符号’进行闭合后,就能使得cachepath∗∗可以是任何攻击者想要的类型数据。攻击者构造∗∗′;‘cache_path**可以是任何攻击者想要的类型数据。攻击者构造**';`cachepath∗∗可以是任何攻击者想要的类型数据。攻击者构造∗∗′;‘_GET[c]`;****#**数据,而插件将数据写入配置文件的过程中根本没有检查数据的合法性,最终写入文件的数据:
$cache_path = 'F:\phpstudy_pro\WWW\wordpress\wp-content\cache/';`$_GET[c]`;#/';
通过闭合单引号,恶意代码从字符串中逃逸出来,并从url中接受一个参数c,向参数c传递要执行的命令即可触发远程代码执行!
0x04 漏洞修复方案
*360漏洞云强烈建议您:*
进入管理后台,在右侧菜单栏中选择插件。如果插件有新版本会有提示更新,点击更新即可。
从官网下载安全版本(>= 1.7.2)
官网地址:https://wordpress.org/plugins/wp-super-cache/
0x05 参考链接
作者:brucy
https://blog.csdn.net/qq_41252520/article/details/115331809
0x06 联系我们
建议您订阅360漏洞云-漏洞情报服务,获取更多漏洞情报详情以及处置建议,让您的企业远离漏洞威胁。
电话:010-52447660
邮箱:loudongyun@360.cn
网址:https://loudongyun.360.cn
转载自https://mp.weixin.qq.com/s/5hu4QiVAi8vLX31SyZ8AxQ
漏洞分析 | WP Super Cache远程代码执行漏洞分析相关推荐
- rmi远程代码执行漏洞_【漏洞通告】Apache Solr远程代码执行漏洞
1.综述 Apache Solr是美国阿帕奇(Apache)软件基金会的一款基于Lucene(一款全文搜索引擎)的搜索服务器.该产品支持层面搜索.垂直搜索.高亮显示搜索结果等. Apache Solr ...
- [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)及防御详解
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- 9 月 19 日,腾讯云安全中心监测到 Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615
9 月 19 日,腾讯云安全中心监测到 Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616).远程代码执行漏洞(CVE-2017-12615 ...
- oracle11g远程命令执行漏洞,漏洞应急|Oracle Weblogic Server远程代码执行漏洞(CVE-2021-2109)...
近日,锐捷网络CERT安全应急响应团队关注到Oracle官方发布了2021年1月关键补丁更新公告,该补丁中修补了包括 CVE-2021-2109 Weblogic Server远程代码执行漏洞在内的多 ...
- 漏洞通告 | Atlassian Confluence存在远程代码执行漏洞,悬镜云鲨RASP天然免疫防护...
近日,Atlassian官方发布了一则安全更新,通告了一个严重且已在野利用的远程代码执行漏洞CVE-2022-26134,攻击者利用该漏洞,无需任何条件即可在Confluence中执行任意命令. 该漏 ...
- 漏洞预警|Apache Karaf 存在远程代码执行漏洞
棱镜七彩安全预警 近日网上有关于开源项目 Apache Karaf 存在远程代码执行漏洞,棱镜七彩威胁情报团队第一时间探测到,经分析研判,向全社会发起开源漏洞预警公告,提醒相关安全团队及时响应. 项目 ...
- php post 漏洞_ThinkPHP5 5.0.23 远程代码执行漏洞
作者介绍:Ice 国科学院安全学员,在国科学习安全课程,也参与在国科学生会安全团队中进行安全实战能力的提升.本次分享主要是针对现在一款运用极广的开发框架ThinkPHP的远程代码执行漏洞研究,希望给大 ...
- linux struts2漏洞,重大漏洞预警:Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC)
背景介绍 近日,安全研究人员发现著名J2EE框架--Struts2存在远程代码执行的漏洞,Struts2官方已经确认该漏洞(S2-045,S2-046),并定级为高危漏洞. Struts2 的使用范围 ...
- Vackbot已覆盖 |【漏洞通告】Spring框架远程代码执行漏洞
漏洞描述 近日,墨云科技监测到Spring框架中存在远程代码执行漏洞,在JDK 9及以上版本环境下,攻击者通过构造恶意的请求修改中间件的日志文件,从而实现远程代码执行. 由于该漏洞的严重性,建议使用S ...
最新文章
- eclipse直接访问数据库
- CTFshow 命令执行 web51
- opencv中在图片上显示文本
- Ubuntu 开机出现 grub rescue 终端模式修复方法
- 线性代数学习资料汇编
- query的list()和iterate()区别 面试题
- JAVA入门级教学之(数据类型)
- python语言中有3种表示字符串的方式、单引号和_Python中三种类型的引号(单引号、双引号、三引号)...
- iphone微信 h5页音乐自动播放
- python (集合和深浅拷贝)
- 使用 stress 命令对cpu进行压力测试
- 进程杀手 (prockiller)V2.82绿色版
- CS 1.6 服务器信息读取
- Django——09.spaceless, autescape, verbatim标签
- linux dir大全,Linux常用命令大全
- HTML修改CSS样式或更新内容,网页自动刷新
- AngularJS中的双向数据绑定
- 软件测试工资一般多少 即使测试刚入行,起步月薪也会在8k-9k
- 计算机硬盘ssd,电脑有没有必要装固态硬盘的建议
- 开源搜索引擎评估:lucene sphinx elasticsearch
热门文章
- c语言 温岚打开方式,环球网专访温岚:多面天后跨界作芳疗师 为你打开嗅觉的钥匙...
- [误入深谷陷死路,雷电交加滚泥坡]--2014/6/21山后老刘队“安家庄-清水尖-京西十八潭”冒雨穿越版
- java Float.parseFloat
- css浮动、清除浮动和定位
- 鸿蒙2.0官宣壁纸,华为正式官宣!鸿蒙2.0来了,表现惊艳,这4部华为手机首先支持...
- 噪音通道模型_噪声信道模型
- 从零开始的DIY智能家居 -- 智能红外接近传感器
- 神经网络训练用什么软件,在线神经网络训练
- 【STC开源项目】STC51单片机LRC万用表表制作程序+PCB文件
- 老人不能被遗忘在移动互联之外!