WordPress漏洞分析

WordPress漏洞分析

根據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,如下圖所示:

WordPress漏洞分析

其中edit_post為漏洞函數,進入函數聲明,如下圖所示:

WordPress漏洞分析

$post_data為post數組,並未作任何過濾防護,對此產生了之後的漏洞,對比修復後的代碼,如下圖所示:

WordPress漏洞分析

在此我多說兩句,因一開始並未發現wordpress在聯網時會進行自動更新,所以,我定位了另一個類似漏洞點,如下圖所示:

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函數,如下圖所示 :

WordPress漏洞分析

但是由於第三個和第四個if的限制,導致無法執行成功,這也算是一個漏洞復現上的一個有趣的點吧,繼續跟蹤,如下圖所示:

WordPress漏洞分析

找到可利用的點,並根據代碼所示,進入wp_updae_post函數,如下圖所示:

WordPress漏洞分析

此函數會經過一些獲取參數的操作,將數組中的變量提取出來並進行賦值,跟蹤到漏洞發生點,如下圖所示:

WordPress漏洞分析

發現返回wp_insert_attachment函數,跟蹤此函數,如下圖所示:

WordPress漏洞分析

返回wp_insert_post函數,跟蹤此函數,在此函數中定位到漏洞發生點,如下圖所示:

WordPress漏洞分析

所以根據以上漏洞點,可傳入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語句嵌套執行方法,如下圖所示:

WordPress漏洞分析

通過傳入參數,賦值到相對應的表名和列名,最終執行do_action函數,如下圖所示:

WordPress漏洞分析

在此完成wordpress目錄遍歷漏洞,並在之後利用本地文件包含漏洞執行rce,wordpress官方使用圖像庫為GD和Imagick,如下圖所示:

WordPress漏洞分析

其中Imagick並不是wordpress自帶,需要下載插件,所以默認可以使用繞過GD庫的方法執行任意代碼

參考鏈接:

https://blog.ripstech.com/2019/wordpress-image-remote-code-execution/

歡迎來安全脈搏查看更多的乾貨文章和我們一起交流互動哦!

脈搏地址:安全脈搏 | 分享技術,悅享品質

微博地址:Sina Visitor System


分享到:


相關文章: