0x01 前言
大概有一周没有写文章了,比赛完嗨皮了两天,喝酒喝到半夜回来继续看文章,看到了exploit的关于wordpress一个漏洞信息CVE-2018-7422 ,下面就来分析一下这个本地文件包含的漏洞代码,如果权限够的话是可以读取系统的一些敏感的文件例如:/etc/passwd、/etc/shadow等。
0x02 漏洞复现
环境
攻击机:
Deepin Linux x64 Wordpress服务器:
Windows 10 x64 (phpstudy) 搭建环境有些要注意的,例如上传插件是大于2M的,要php.ini里面修改下再重启下就行了。
Proof of Concept
http://<host>/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=要读取的文件绝对路径或者相对路径
结果
0x03 代码分析
文件在wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php
你可以去插件的官方github看,前天的漏洞,现在还没修复 https://github.com/SiteEditor/editor/blob/master/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php
这个漏洞代码比较简单容易,新手也很适合理解。 整合代码执行流程就是判断文件是否存在,存在就require_once
包含,不存在就报错。 这里有一个点,为什么说是只能本地文件包含呢,不能用远程包含吗?如果远程文件包含不就可以利用php的协议来getshell了吗? 因为file_exists
函数只能判断本地文件,如果是远程文件的话就会判断文件不存在了。
if( isset( $_REQUEST['ajax_path'] ) && is_file( $_REQUEST['ajax_path'] ) && file_exists( $_REQUEST['ajax_path'] ) ){
require_once $_REQUEST['ajax_path'];
}else{
echo json_encode( array(
'success' => false,
'message' => "Error: didn't load shortcodes pattern file",
)
);
return ;
}
0x04 结束
再给我点时间,嗨皮过头了还没缓过神来,看过大表哥对我文章的评价,我会改进文章的一些细节,展现更好的给大家。
0x05 参考
插件源码下载:https://pan.lanzou.com/i0ps44b
https://wordpress.org/plugins/site-editor/