中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么進行WordPress 5.0.0 RCE分析

發布時間:2021-12-22 20:48:31 來源:億速云 閱讀:177 作者:柒染 欄目:網絡安全

本篇文章為大家展示了怎么進行WordPress 5.0.0 RCE分析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

WordPress 5.0.0 RCE分析(CVE-2019-6977)

此漏洞通過路徑遍歷和本地文件包含漏洞的組合實現WorePress核心中的遠程代碼執行,據漏洞發布者ripstech透露,此漏洞已在WordPress核心中存在6年以上。

權限需求

author及以上權限,相對來說,權限需求不算高,很多小型協作內容輸出小社區諸如樂譜站會較為常用wordpress,而后給予普通作者author權限。

影響范圍

因WordPress 4.9.9和5.0.1其他安全補丁所致,文件包含漏洞僅有5.0.0單一版本可利用,而路徑遍歷漏洞仍可使用且當前仍未打補丁。任何安裝了此插件的WordPress站點都會錯誤地處理Post Meta條目,這樣仍然可以進行利用。

漏洞基礎

將圖像上傳到WordPress安裝時,首先將其移動到uploads目錄(wp-content/uploads)。WordPress還將創建對數據庫中圖像的內部引用,以跟蹤元信息,例如圖像的所有者或上傳的時間。

該屬性作為Post Meta條目存儲在數據庫中。這些條目中的每一個都是鍵/值對,分配給某個ID。

譬如:

SELECT * FROM wp_postmeta WHERE post_ID = 50;

+---------+-------------------------+----------------------------+
| post_id | meta_key                | meta_value                 |
+---------+-------------------------+----------------------------+
|      50 | _wp_attached_file       | evil.jpg                   |
|      50 | _wp_attachment_metadata | a:5:{s:5:"width";i:450 ... |
...
+---------+-------------------------+----------------------------+

在此示例中,圖像已分配給post_ID 50.倘若用戶希望將來使用或編輯具有所述ID的圖像,WordPress將查找匹配的_wp_attached_file條目并使用它的值以便在wp-content/uploads目錄中查找該文件。

漏洞構成

本地文件包含部分

WordPress 4.9.95.0.1之前的這些Post Meta條目的問題在于可以修改任何條目并將它們設置為任意值。

當圖像被更新時(例如,它的描述被改變),該edit_post()函數被調用。該函數直接作用于$_POST數組。

function edit_post( $post_data = null ) {

    if ( empty($postarr) )
        $postarr = &$_POST;
    ?
    if ( ! empty( $postarr['meta_input'] ) ) {
        foreach ( $postarr['meta_input'] as $field => $value ) {
            update_post_meta( $post_ID, $field, $value );
        }
    }

可以看出,可以注入任意Post Meta條目。由于未對哪些條目進行了修改,因此攻擊者可以更新_wp_attached_file元條目并將其設置為任何值。這不會以任何方式重命名文件,它只會更改WordPress在嘗試編輯圖像時要查找的文件。這將導致稍后的路徑遍歷。

具體位置:

  • POST參數_wp_page_template在函數get_page_template_slug()中的文件wordpress / wp-includes / post-template.php的第1695行中被接收。


  • 怎么進行WordPress 5.0.0 RCE分析


  • 用戶提供的數據在函數locate_template()中的文件wordpress / wp-includes / template.php的第635行連接成路徑標記。


  • 怎么進行WordPress 5.0.0 RCE分析


  • 然后,在函數load_template()中的文件wordpress / wp-includes / template.php的第690行中的敏感操作require()中使用用戶提供的數據進行未經過處理。


  • 怎么進行WordPress 5.0.0 RCE分析

路徑遍歷部分

路徑遍歷發生在wp_crop_image()用戶裁剪圖像時調用的函數中。

該函數將圖像的ID帶到crop($attachment_id)并從數據庫中獲取相應的_wp_attached_filePost Meta條目。

由于缺陷edit_post()$src_file可以設置為任何東西。

function wp_crop_image( $attachment_id, $src_x, ...) {

    $src_file = $file = get_post_meta( $attachment_id, '_wp_attached_file' );
    ?

在下一步中,WordPress必須確保圖像實際存在并加載它。WordPress有兩種加載給定圖像的方法。第一種是簡單地查找目錄中_wp_attached_file Post Meta條目提供的文件名wp-content/uploads(下一個代碼片段的第2行)。

如果該方法失敗,WordPress將嘗試從其自己的服務器下載圖像作為后備。為此,它將生成一個下載URL,該URL包含wp-content/uploads目錄的URL 和存儲在_wp_attached_file Post Meta條目中的文件名(第6行)。

舉一個具體的例子:如果存儲在_wp_attached_file Post Meta條目中的值是evil.jpg,那么WordPress將首先嘗試檢查文件是否wp-content/uploads/evil.jpg存在。如果沒有,它會嘗試從以下URL下載文件:https://targetserver.com/wp-content/uploads/evil.jpg

嘗試下載圖像而不是在本地查找圖像的原因是某些插件在訪問URL時動態生成圖像。

但是,這里沒有進行任何過濾。WordPress將簡單地將上傳目錄和URL與$src_file用戶輸入連接起來。

一旦WordPress成功加載了有效圖像wp_get_image_editor(),即裁剪圖像。

 ?
    if ( ! file_exists( "wp-content/uploads/" . $src_file ) ) {
            // If the file doesn't exist, attempt a URL fopen on the src link.
            // This can occur with certain file replication plugins.
            $uploads = wp_get_upload_dir();
            $src = $uploads['baseurl'] . "/" . $src_file;
        } else {
            $src = "wp-content/uploads/" . $src_file;
        }

    $editor = wp_get_image_editor( $src );
    ?

然后將裁剪后的圖像保存回文件系統(無論是否下載)。生成的文件名將是$src_fileget_post_meta()攻擊者控制的返回文件。對結果文件名字符串進行的唯一修改是文件的基本名稱前綴cropped-(下一個代碼片段的第4行)。為了遵循示例evil.jpg,生成的文件名將是cropped-evil.jpg

然后,WordPress通過wp_mkdir_p()(第6行)在結果路徑中創建不存在的任何目錄。

然后使用save()圖像編輯器對象的方法將其最終寫入文件系統。該save()方法還不對給定的文件名執行路徑遍歷檢查。

 ?
    $src = $editor->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs );

    $dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_file );

    wp_mkdir_p( dirname( $dst_file ) );

    $result = $editor->save( $dst_file );

函數整體(wp-admin / includes / image.php)如是:

怎么進行WordPress 5.0.0 RCE分析

實現RCE

綜上,可以確定哪個文件被加載到圖像編輯器中(因未進行處理)。但是,如果文件不是有效圖像,圖像編輯器將會拋出異常。故而,只能在上傳目錄之外裁剪圖像。

那么如果未找到所需圖像,WordPress會嘗試下載,這就導致了RCE。

怎么進行WordPress 5.0.0 RCE分析

設置_wp_attached_fileevil.jpg?shell.php,這將導致對以下URL發出HTTP請求:https://targetserver.com/wp-content/uploads/evil.jpg?shell.php。此請求將返回有效的圖像文件,因為?在此上下文中忽略了所有內容。生成的文件名將是evil.jpg?shell.php

雖說save()圖像編輯器的方法不會檢查是否存在路徑遍歷,但它會將正在加載的圖像的mime類型的擴展名附加到生成的文件名中。在這種情況下,結果文件名將是evil.jpg?cropped-shell.php.jpg。這使得新創建的文件再次無害。

但是,仍可以通過使用諸如的Payload將生成的圖像植入任何目錄evil.jpg?/../../evil.jpg

路徑遍歷 --> themes目錄 LFI

每個WordPress主題只是一個位于WordPress目錄中的wp-content/themes目錄,并為不同的案例提供模板文件。例如,如果博客的訪問者想要查看博客帖子,則WordPress會post.php在當前活動主題的目錄中查找文件。如果它找到了模板,那include()就是它。

為了添加額外的自定義層,可以為某些帖子選擇自定義模板。為此,用戶必須將數據庫中的_wp_page_template Post Meta條目設置為這樣的自定義文件名。這里唯一的限制是要include()編輯的文件必須位于當前活動主題的目錄中。

通常,無法訪問此目錄,也無法上載文件。但是,通過濫用上述Path Traversal,可以將惡意制作的圖像植入當前使用的主題的目錄中。然后攻擊者可以創建一個新帖子并濫用相同的錯誤,使他能夠更新_wp_attached_file Post Meta條目以便include()映像。通過將PHP代碼注入映像,攻擊者可以獲得任意遠程執行代碼。

Payload制作----Imagick

WordPress支持PHP的兩個圖像編輯擴展:GD和Imagick。它們之間的區別在于Imagick不會刪除圖像的exif元數據,其中可以存儲PHP代碼。

WordPress 5.0.0 RCE 條件較為苛刻,但畢竟是RCE,一旦被利用危害巨大。況且,雖說僅這一小版本的本地文件包含可協同目錄遍歷完成RCE,但因為這目錄遍歷漏洞至今未修,一旦用戶安裝允許覆蓋任何Post data的插件,這RCE依然可被利用。

上述內容就是怎么進行WordPress 5.0.0 RCE分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣城市| 前郭尔| 淄博市| 南漳县| 南川市| 和林格尔县| 天全县| 栾川县| 富川| 平远县| 塔河县| 桦甸市| 子洲县| 淮北市| 盐边县| 察隅县| 盐池县| 扎囊县| 延长县| 江都市| 庄河市| 建阳市| 庐江县| 武穴市| 招远市| 秀山| 大英县| 东明县| 孟津县| 遵义县| 社会| 甘泉县| 正阳县| 溧水县| 石河子市| 璧山县| 长岭县| 织金县| 张掖市| 佛山市| 布尔津县|