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/
https://www.exploit-db.com/exploits/44340/
http://php.net/manual/zh/function.is-file.php
- 原文作者: F0rmat
- 原文链接: https://xxe.icu/wordpress-plugin-site-editor-1.1.1-local-file-inclusion-analysis.html
- 版权声明:本作品采用 署名 - 非商业性使用 4.0 国际 (CC BY-NC 4.0)进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。