根據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函數,如下圖所示:在此完成wordpress目錄遍歷漏洞,並在之後利用本機檔案包含漏洞執行rce,wordpress官方使用圖片庫為GD和Imagick,如下圖所示:
其中Imagick並不是wordpress自帶,需要下載插件,所以預設可以使用繞過GD庫的方法執行任意程式碼。
以上是wordpress會有漏洞嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!