依据CVE官方破绽转达得知wordpress新出一个组合式rce破绽,破绽编号分别为CVE-2019-8943和CVE-2019-8942,下载破绽版本源码,剖析破绽触发历程,注:破绽复现时一定要断网搭建,wordpress在联网状况时会自动更新代码包。找到破绽发作文件post.php,wordpress有多个post.php文件,这里扼要申明一下各自的作用,wp-includes/post.php为post的源文件,wp-admin/includes/post.php为有背景权限的post接口,wp-admin/post.php为背景post的要求处置惩罚,细致挪用代码以下:
wp-admin/post.php:require_once( dirname( __FILE__ ) . '/admin.php' ); wp-admin/admin.php:require_once(ABSPATH . 'wp-admin/includes/admin.php'); wp-admin/includes/admin.php:require_once(ABSPATH . 'wp-admin/includes/post.php'); wp-admin/admin.php::require_once(dirname(dirname(__FILE__)) . '/wp-load.php'); wp-load.php:require_once( dirname( ABSPATH ) . '/wp-config.php' ); wp-config.php:require_once(ABSPATH . 'wp-settings.php'); wp-settings.php:require( ABSPATH . WPINC . '/post.php' ); define( 'WPINC', 'wp-includes' );
依据以上挪用流程,破绽应用流程为上传一个图片到媒体库,然后举行更新操纵,挪用wp-admin/post.php函数,并依据switch到case:editpost,以下图所示:
个中edit_post为破绽函数,进入函数声明,以下图所示:
$post_data为post数组,并未作任何过滤防护,对此产生了以后的破绽,对照修复后的代码,以下图所示:
在此我多说两句,因一开始并未发明wordpress在联网时会举行自动更新,所以,我定位了另一个相似破绽点,以下图所示:
以上代码会依据传入的meta数组举行update_meta,依据代码中的$key(数据库中的meta_id),$value[‘key’](数据库中的meta_key),$value[‘value’](数据库中的meta_value),组织meta[1][key]=_wp_attached_file&meta[1][value]=123,终究实行相似以下数据库语句UPDATE `wp_postmeta` SET `meta_key` = '_wp_attached_file', `meta_value` = '123' WHERE `meta_id` = 2,完成历程,以下图所示:
相干引荐:《WordPress教程》
依据meta_id更新wp_postmeta表中内容,终究实行do_action函数,以下图所示 :
然则因为第三个和第四个if的限定,致使没法实行胜利,这也算是一个破绽复现上的一个风趣的点吧,继承跟踪,以下图所示:
找到可应用的点,并依据代码所示,进入wp_updae_post函数,以下图所示:
此函数会经由一些猎取参数的操纵,将数组中的变量提取出来并举行赋值,跟踪到破绽发作点,以下图所示:
发明返回wp_insert_attachment函数,跟踪此函数,以下图所示:
返回wp_insert_post函数,跟踪此函数,在此函数中定位到破绽发作点,以下图所示:
所以依据以上破绽点,可传入meta_input[_wp_attached_file] =../evil.jpg?shell.php,实行SQL语句为UPDATE `wp_postmeta` SET `meta_value` = '../evil.jpg?shell.php ' WHERE `post_id` = 8 AND `meta_key` = '_wp_attached_file',测试条件为条件必需晓得post_id,不过一般情况下更新图片时会自带此参数,如果是测试的话,能够视察数据库填写相干内容。细致SQL语句嵌套实行要领,以下图所示:
经由过程传入参数,赋值到相对应的表名和列名,终究实行do_action函数,以下图所示:
在此完成wordpress目次遍历破绽,并在以后应用当地文件包括破绽实行rce,wordpress官方运用图象库为GD和Imagick,以下图所示:
个中Imagick并非wordpress自带,须要下载插件,所以默许能够运用绕过GD库的要领实行恣意代码。
以上就是wordpress会有破绽吗的细致内容,更多请关注ki4网别的相干文章!