题目信息:
image.png知识点:js代码(eval函数,alert函数,splice函数),正则,代码审计
下载附件,是一个文件,没有后缀,用sublime打开看看
image.png
是js代码,那么我们将文件后缀改为html,用浏览器打开查看:
image.png
是一个输入框,但输入什么都没有反应,还是继续尝试分析js代码
审计代码可以看到eval函数执行了_
变量中的内容也就是' '
中的内容,但是,要注意的是,它并没有执行$()
函数,仅仅执行了字符串
而已(从而导致乱码),因而页面html页面没有任何显示,只显示了input标签的内容,但是我们想让源代码正常显示出来,不进行执行,那么,我们就用到了alert弹窗(将eval函数改为alert),将乱码的$()函数源码完整显示出来:
eval() 函数:可计算某个字符串,并执行其中的的 JavaScript 代码。
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('<input id="c"><button onclick=$()>Ok</button>');
delete _
方法一:审计代码,因此我们要满足关键变量e的正则条件
e.length==16
e.match(/^be0f23/)!=null
e.match(/233ac/)!=null
e.match(/e98aa$/)!=null
e.match(/c7be9/)!=null
^表示开头一定要匹配到be0f23,$表示结尾一定要匹配到e98aa,其它的只要匹配到就行,没有位置要求
于是我们构造e的值:be0f233ac7be98aa
将构造的e输入最初的html页面的输入框中得到flag
image.png image.png
方法二:直接将下面代码复制到控制台执行也能得到flag
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)
}
image.png
参考:https://blog.csdn.net/qq_41617034/article/details/91946853
网友评论