【漏洞预警】Wordpress任意删除文件到代码执行

二叶草 2020年2月21日19:14:26问题及解决评论阅读模式

该漏洞影响:任何Wordpress版本,包括4.9.6!

利用此漏洞使攻击者能够删除WordPress安装的任何文件(+ PHP服务器上的任何其他文件,PHP进程用户具有适当的删除权限)。除了删除整个WordPress安装的可能性(如果没有当前备份可用会导致灾难性后果),攻击者可以利用任意文件删除功能绕过一些安全措施并在Web服务器上执行任意代码。更确切地说,可以删除以下文件:

  • .htaccess:通常,删除此文件不会有任何安全后果。但是,在某些情况下,.htaccess文件包含与安全相关的约束(例如,对某些文件夹的访问限制)。删除此文件将会禁用这些安全限制。
  • index.php文件:通常情况下,将空的index.php文件放置到目录中,以防止Web服务器无法执行的情况下的目录列表。删除这些文件将为攻击者提供一份列表,列出受此措施保护的目录中的所有文件。
  • wp-config.php:删除这个WordPress安装文件会在下次访问该网站时触发WordPress安装过程。这是因为wp-config.php包含数据库凭证,如果没有它,WordPress的行为就好像它尚未安装。攻击者可以删除该文件,使用管理员帐户选择的凭据进行安装过程,最后在服务器上执行任意代码。

演示demo

细节

将未处理的用户输入传递给文件删除功能时,会发生任意文件删除漏洞。在PHP中,当unlink()调用该函数并且用户输入可能会影响部分或整个参数$filename(表示要删除的文件的路径)时,会发生这种情况,而不进行适当的清理。

在该wp-includes/post.php文件中找到了在WordPress Core中使这个漏洞成为可能的代码部分:

/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) );
		}
	}	⋮}

在wp_delete_attachement()上面显示的功能中,$meta[‘thumb’]呼叫中使用的内容unlink()未经过任何清理。这段代码的目的是在删除图像的同时删除图像的缩略图。在WordPress中通过媒体管理器上传的图像被表示为附属类型的帖子。该值$meta[‘thumb’]从数据库中检索,并保存为表示图像的文章的自定义字段2。因此,在从数据库检索到关键函数调用中的使用之间unlink(),表示缩略图文件名的值不经过任何清理或检查。如果该值在保存到数据库之前也没有经过任何或不足的安全措施,我们将在下一个代码清单中看到这种情况,我们有一个二阶任意文件删除漏洞。

/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 );⋮

后面的代码片段/wp-admin/post.php代表了附件中属于附件的缩略图的文件名如何保存到数据库中。在从保存在$_POST[‘thumb’]数据库中的用户输入中检索和保存到数据库wp_update_attachment_metadata()之间没有安全措施,以确保该值真正代表正在编辑的附件的缩略图。$_POST[‘thumb’]对于任何文件的路径,这个值可以保存到WordPress上传目录的相对路径中,当附件被删除时,该文件将被删除,如第一列表中所示。

临时修复

在写文章的时候,所描述的漏洞在WordPress核心中仍未被修补。正因为如此,我们已经开发了一个临时修复提供在下面。通过将修补程序添加到functions.php当前活动的主题/子主题文件中,可以将修补程序集成到现有的WordPress安装中。

add_filter( 'wp_update_attachment_metadata', 'rips_unlink_tempfix' );function rips_unlink_tempfix( $data ) {    if( isset($data['thumb']) ) {
        $data['thumb'] = basename($data['thumb']);
    }    return $data;
}

所有提供的修补程序都会连接到wp_update_attachement_metadata()调用中,并确保为元值提供的数据thumb不包含使路径遍历成为可能的任何部分。因此,不能删除与安全相关的文件。

提供的修复最终将被视为临时修复,以防止攻击。我们无法监督WordPress插件的所有可能的向后兼容性问题,并建议您谨慎地对WordPress文件进行任何修改。

本文来源于:【漏洞预警】Wordpress任意删除文件到代码执行-变化吧门户
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧门户观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
二叶草
Wpscan使用教程-Wordpress网站渗透 问题及解决

Wpscan使用教程-Wordpress网站渗透

Wpscan是专门检查Wordpress网站漏洞的工具,它可以全面检查wp网站的漏洞,有助于我们增加网站安全防护。但是也有人使用Wpscan渗透别人的网站,最近我客户的网站就被黑了,现在简单把使用wp...

发表评论