436 words
2 minutes
Wordpress Plugin Site Editor 1.1.1 - 本地文件包含漏洞分析(每日一洞)
2018-03-25

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

Wordpress Plugin Site Editor 1.1.1 - 本地文件包含漏洞分析(每日一洞)
https://fuwari.vercel.app/posts/wordpress-plugin-site-editor-111---local-file-inclusion-analysis/
Author
Lorem Ipsum
Published at
2018-03-25