其他分享
首页 > 其他分享> > NaNNaNNaNNaN-Batman

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