是一个输入框,看来我们要先弄清楚这个文件的代码才行,审计代码可以看到最开始的下划线“_”是一个变量,其内容是一个函数的代码,而最后又是一个eval(_),也就是执行这个函数了,我们把eval改为alert,让程序弹框,得到了源码的非乱码形式:
把得到的代码整理一下就是:
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('');
delete
不用根据这些个变量和document.write去算flag,拿到flag有两种方法:
1)满足正则
首先,满足length==16,正则的话^为开始符号,$为结尾符号,拼接一下:be0f233ac7be98aa,输入就拿到flag了。
2)将下面这段拿到控制台执行一下即可:
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)
}
}
flag{it's_a_h0le_in_0ne}