NaNNaNNaNNaN-Batman
作者:互联网
NaNNaNNaNNaN-Batman
下载附件,用记事本打开,得到一串乱码。
之所以是一串乱码,查了很多,看到一个可以理解的。
文档中不能显示就是编码的问题,虽然文档不能显示,但是不代表浏览器不能理解并显示,我们将文件后缀改成html,文档中出现了一个框框,说明浏览器可以理解这些乱码(这也是后来我们在框框输入满足条件字符可以得到反应并且得到flag的原因)。然后我们把尾部的eval()函数改成alert,alert可以将字符串以浏览器理解的形式弹出来,所以我们得到了一个不同于以txt形式打开的字符串,即源码。
源码
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 onclick=$()>Ok</button>');delete _
正则绕过
审计代码,构造be0f233ac7be98aa
控制台放代码
我们审计代码发现,只要满足了5个if条件,就会进入循环体,然后通过document.write()函数将flag显示在页面上。
我们直接利用f12,在控制台上运行
{
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
直接理解代码,写出flag
控制台中fruits.splice(2,2)表示从fruits这个数组的第3个位置开始,删除两个元素,返回的是删除的元素
["Apple","Mango"]
,此时fruits数组里只剩下["Banana","Orange"]
两个元素了。
我们审计代码可以发现打印次序按竖着来,这要我们可以直接从数组里拼凑出flag.
标签:乱码,Batman,代码,NaNNaNNaNNaN,flag,var,null,match 来源: https://www.cnblogs.com/NineOne/p/13855273.html