根據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會有漏洞嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!