合天網安實驗室CTF-Web100-Give Me Flag
題目描述
哎,不小心把代碼弄亂惹
相關附件
web100.zip
參考解題步驟
1、下載附件打開後是一段JavaScript代碼,但看起來被混淆了
源文件是沒有換行的,我這裏手動換行以便觀察
2、試了一下直接翻譯,比如很容易看出getEleById
中的 = ment
,但後面的就很難判斷了。於是調整思路,直接用Chrome跑一下看看。(注意要將上一步的手動換行還原)
調試界面的代碼
還是不清楚,但可以看出大體的代碼邏輯:
1) _(下劃線)被賦值爲第一行的整個字符串
2) 第二行的for循環是對_(下劃線)中的字符串進行處理
3) 使用eval()函數執行_(下劃線)中的字符串
注:eval(string) 函數可計算某個字符串,並執行其中的的 JavaScript 代碼。
3、使用alert()顯示for循環處理後的_(下劃線)中的字符串
複製到VSCode格式化一下
<script>
function $(){
var e = document.getElementById("c").value;
if (e.length == 16)
if (e.match(/^be0f23/) != null)
if (e.match(/233ac/) != null)
if (e.match(/e98aa$/) != null)
if (e.match(/c7be9/) != null){
var t = ["fl", "s_a", "i", "e}"];
var n = ["a", "_h0l", "n"];
var r = ["g{", "e", "_0"];
var i = ["it'", "_", "n"];
var s = [t, n, r, i];
for (var o = 0; o < 13; ++o){
document.write(s[o % 4][0]);
s[o % 4].splice(0, 1)
}
}
}
document.write('<input id="c"><button οnclick=$()>Ok</button>');
delete _
</script>
4、可以看出最內層if裏的代碼運行結果即爲答案
flag{it’s_a_h0le_in_0ne}
5、提交it's_a_h0le_in_0ne
即可通過