1. 程式人生 > >DVWA 黑客攻防實戰(十三)JS 攻擊 JavaScript Attacks

DVWA 黑客攻防實戰(十三)JS 攻擊 JavaScript Attacks

新版本的 DVWA 有新東西,其中一個就是這個 JavaScript 模組了。

玩法也挺特別的,如果你能提交 success 這個詞,成功是算你贏了。也看得我有點懵逼。

初級

如果你改成 “success” 提交一下會出現了這個,Invalid token。這是什麼回事呢?

你可以開啟控制檯(F12),看看情況。

你會看到這個 token,不是後臺生成的,而是前臺生成的。。。而前臺生成的 token,是用 md5("ChangeMe"),而後臺期待的 md5 是 md5("success")
所以你在輸入框中輸入 success 之後,還得在控制檯在呼叫 generate_token()

函式。

結果如下

中級

思路是一樣的,只是生成 token 的函式放到另外的 js 檔案中了。

如果你開啟這個 js 檔案 http://192.168.0.110:5678/vulnerabilities/javascript/source/medium.js ,你會看到這樣

function do_something(e) {
    for (var t = "", n = e.length - 1; n >= 0; n--) t += e[n];
    return t
}
setTimeout(function () {
    do_elsesomething("XX")
}, 300);

function do_elsesomething(e) {
    document.getElementById("token").value = do_something(e + document.getElementById("phrase").value + "XX")
}

所以,在輸入框輸入 “success” 之後,在控制檯中,輸入do_elsesomething("XX") 就可以了。

高階

高階和中級類似,生成 token 的邏輯在額外的 js 檔案中。和中級不同的是,這裡的 JS 經過了混淆的。。。就顯得很混亂。

http://192.168.0.110:5678/vulnerabilities/javascript/source/high.js
擷取其中的一段給大家看看

var a=['fromCharCode','toString','replace','BeJ','\x5cw+','Lyg','SuR','(w(){\x273M\x203L\x27;q\x201l=\x273K\x203I\x203J\x20T\x27;q\x201R=1c\x202I===\x271n\x27;q\x20Y=1R?2I:{};p(Y.3N){1R=1O}q\x202L=!1R&&1c\x202M===\x271n\x27;q\x202o=!Y.2S&&1c\x202d===\x271n\x27&&2d.2Q&&2d.2Q.3S;p(2o){Y=3R}z\x20p(2L){Y=2M}q\x202G=!Y.3Q&&1c\x202g===\x271n\x27&&2g.X;q\x202s=1c\x202l===\x27w\x27&&2l.3P;q\x201y=!Y.3H&&1c\x20Z!==\x272T\x27;q\x20m=\x273G\x27.3z(\x27\x27);q\x202w=[-3y,3x,3v,3w];q\x20U=[24,16,8,0];q\x20K=

這不是正常人類能看懂的。
http://deobfuscatejavascript.com 中提供的功能是,把混淆後的程式碼轉成人類能看懂一些 js 程式碼
其中關鍵的部分是這裡:

這裡生成 token 的步驟是:

1、執行token_part_1("ABCD", 44)
2、執行token_part_2("XX")(原本是延遲 300ms執行的那個)
3、點選按鈕的時候執行 token_part_3

所以我們在輸入框輸入 success 後,再到控制檯中輸入token_part_1("ABCD", 44)token_part_2("XX")這兩個函式就可以了。

不可能

哈哈哈,被擺了一道了。你永遠不要資訊來自使用者的任何東西!!!