html網頁上傳到網站根目錄下
本人通過寶塔面板上傳,wordpress的根目錄一般為/www/wwwroot/wordpress/,表示網址打開的網站就在此目錄下。如果為單個網頁,只要將html網頁上傳到此目錄下即可,假設網頁為10.html,直接放到wordpress根目錄,網址就是www.xxx.com/10.html。如果為多個網頁,那么可以在根目錄下新建一個文件夾,再將網頁上傳到此新建文件夾下,網址中增加文件夾名。
如上圖所示,我在根目錄下新建文件夾suanshu,然后再將10.thml、20.html和100.html 這3個網頁上傳到suanshu文件夾,然后網址分別為www.joephy.com/suanshu/10.html
www.joephy.com/suanshu/20.html
www.joephy.com/suanshu/100.html
另外,在wordprss后臺,可以通過菜單的方式將網址添加到菜單項方便使用。
個月,我公布了一個WordPress 5.0中需要權限遠的程執行代碼漏洞。而這篇文章我將揭示一個在WordPress 5.1中的另一條漏洞利用鏈,它能使未經授權的攻擊者在WordPress 5.1.1之前的任何WordPress網站上進行遠程代碼執行。
攻擊者可以通過誘騙目標網站的管理員訪問攻擊者所控制的網站來接管任何啟用了評論功能的WordPress網站。
一旦目標網站管理員訪問攻擊者所控制的惡意網站,就會受到一個CSRF攻擊,而且不會引起到受害者的注意。這個CSRF漏洞利用了多個邏輯缺陷和代碼錯誤,最終會導致遠程執行代碼,導致受害者的網站被接管。
這些漏洞存在于5.1.1之前的WordPress版本中,默認設置下就會生效。
根據統計,全球33%的網站都使用WordPress。考慮到評論是博客的核心功能并且在默認情況下啟用,預計該漏洞會影響數百萬個網站。
評論功能的CSRF漏洞可導致HTML代碼注入
當用戶發布新評論時,WordPress并不會進行CSRF檢查。因為這可能會影響到某些WordPress特性,如trackbacks 和 pingbacks。這意味著攻擊者可以通過CSRF攻擊假借WordPress網站管理員的名義發表評論。
而這就會形成另一個安全問題,因為WordPress網站的管理員可以在評論中插入任意HTML代碼,甚至是前端腳本。從理論上講,攻擊者可利用CSRF漏洞來往頁面插入惡意的前端代碼。
對于以上問題,WordPress嘗試通過為管理員生成額外的隨機數來解決。當管理員提交評論并附帶有效的隨機數時,評論將會不經過安全檢查就直接發布。如果提供的隨機數無效,則評論仍會發布,但會對評論進行安全檢查。
以下的代碼顯示了WordPress核心代碼是如何處理的:
/wp-includes/comment.php(簡化代碼) ? if ( current_user_can( 'unfiltered_html' ) ) { if (! wp_verify_nonce( $_POST ['_wp_unfiltered_html_comment'], 'unfiltered-html-comment' )) { $_POST['comment']=wp_filter_post_kses($_POST['comment']); } } else { $_POST['comment']=wp_filter_kses($_POST['comment']); } ?
自2009年以來,WordPress網站評論CSRF保護就不存在。
但是,我們在對管理員的安全檢查流程中發現了一個邏輯漏洞。正如你在上面的代碼片段中所看到的,普通用戶的評論始終會通過wp_filter_kses()的安全檢查,而當擁有unfiltered_html功能的管理員發表評論時,則不需要。接著,如果管理員不能提供有效的隨機數,則使用wp_filter_post_kses()函數來進行安全檢查。
wp_filter_post_kses()和wp_filter_kses()兩個安全檢查函數的在區別在于嚴格程度。一般來說,wp_filter_kses()只允許使用基本的HTML標記,例如<a>。
當然,雖然wp_filter_post_kses()更寬松,但仍會刪除任何可能導致跨站點腳本的HTML標記和屬性。
此時,我們需要找到以管理員身份注入XSS的辦法。經過嘗試后,我利用某些屬性的解析錯誤,成功得到一個存儲型XSS。
在安全檢查函數處理管理員評論時,出于優化SEC的目的,它會修改<a>標簽。
它會把<a>的屬性href="#" title="some link" rel="nofollow"解析為關聯數組,其中key是屬性的名稱,值是屬性值。
wp-includes/formatting.php function wp_rel_nofollow_callback( $matches ) { $text=$matches[1]; $atts=shortcode_parse_atts($matches[1]); ?
接著,WordPress會檢查rel屬性是否被設置。只有在通過wp_filter_post_kses()安全檢查時這個值才會被設置。如果是,則會和<a>標記重新組合在一起。
wp-includes/formatting.php if (!empty($atts['rel'])) { // the processing of the 'rel' attribute happens here ? $text=''; foreach ($atts as $name=> $value) { $text .=$name . '="' . $value . '" '; } } return '<a ' . $text . ' rel="' . $rel . '">'; }
從上述代碼片段可以看出,其中屬性值被連接在一起而沒有經過轉義。
因此,攻擊者可以創建包含惡意代碼的<a>,例如,將title設置為title='XSS " on mouseover=alert(1) id="'。這個字符串是可以通過安全檢查的。但是,此時被title標簽使用單引號包圍起來了。
而當屬性重新組合在一起時,title屬性的值會以雙引號括起來。這意味著攻擊者可以通過注入額外的雙引號來逃逸。
例如:
注意,以上<a>的拼接是在安全檢查后。所以,攻擊者已經攻擊成功,把存儲型XSS插入網站中。
在攻擊者能用CSRF以管理員身份往評論中插入XSS后,由于缺乏X-fr ame-Options的保護,攻擊者可以往目標網站插入一個隱藏的<if rame>,里面包含帶有XSS代碼的評論。這樣,所有的攻擊都是隱藏執行,管理員很難注意到。
升級為遠程執行代碼
此時,我可以使用管理員身份執行任意前端代碼,輕松實現遠程代碼執行。默認情況下,WordPress允許管理員直接編輯主題和插件的.php文件。通過簡插入簡單的PHP后門,攻擊者就可以獲得任意PHP代碼執行。
默認情況下,WordPress會自動安全更新,你應該已經運行了最新版本5.1.1。如果你的WordPress網站出于某種原因禁用了自動更新功能,你還可禁用評論。最重要的是,請務必在訪問其他網站之前注銷管理員身份。
2018年10月24日 發現可以通過CSRF向WordPress注入更多的HTML標簽。
2018年10月25日 WordPress回應了Hackerone的報告。
2019年2月5日 WordPress提出補丁,我們及進行驗證。
2019年3月1日 通知WordPress,我已將TML注入升級到存儲的XSS漏洞。
2019年3月1日 WordPress通知我們,WordPress安全團隊的成員已經發現了問題,并且已準備好補丁。
2019年3月13日 WordPress 5.1.1版本發布
我們要感謝WordPress的安全團隊,他們在這個漏洞的合作時表現非常友好并且專業。
本文由白帽匯整理并翻譯,不代表白帽匯任何觀點和立場
來源:https://nosec.org/home/detail/2345.html
原文:https://blog.ripstech.com/2019/wordpress-csrf-to-rce/
白帽匯從事信息安全,專注于安全大數據、企業威脅情報。
公司產品:FOFA-網絡空間安全搜索引擎、FOEYE-網絡空間檢索系統、NOSEC-安全訊息平臺。
為您提供:網絡空間測繪、企業資產收集、企業威脅情報、應急響應服務。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。