• 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.

  • 相关阅读:
    es5
    总有你用的上插件
    三级联动
    jquery快速入门
    动态创建数据table
    背景裁切
    移动web-bootstrap
    ionic开发之Android可以很快打开主页,iOS要几分钟打开主页
    .Net语言 APP开发平台——Smobiler学习日志:如何在手机上快速实现CandleStickChart控件
    .Net语言 APP开发平台——Smobiler学习日志:如何快速实现Timer计时功能
  • 原文地址:https://www.cnblogs.com/NineOne/p/13855273.html
Copyright © 2020-2023  润新知