您现在的位置是:首页 > 正文

XCTF-攻防世界CTF平台-Web类——8、NaNNaNNaNNaN-Batman(JS代码加密)

2024-01-30 21:42:07阅读 0


下载附件,查看:
在这里插入图片描述

是一段乱码的JS代码
我们把文件后缀改成.html文件,在浏览器运行看一下代码效果:
在这里插入图片描述

一个输入框和“OK”按钮,输入“11”之后点击按钮没有反应,应该是没输入正确的字符串,查看源代码
在这里插入图片描述

由eval()函数来执行前面的字符串“”指向的函数
eval()函数:可计算某个字符串,并执行其中的的JavaScript 表达式、变量、语句或语句序列
我们可以把用alert(
)函数或者console.log()函数之类的,把“_”的值弹出显示,让我们知道解密后eval()执行的函数内容:
在这里插入图片描述

之后重新运行:
在这里插入图片描述

弹出的就是eval(_)实际执行的函数代码:

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 οnclick=$()>Ok</button>');
delete _

方法一、通过输入得到flag

这段代码的意思是要求输入框输入的字符串长度为16,之后字符串内容匹配四个正则表达式,其中正则的话^为开始符号就是从最前面往后开始计算,$为结尾符号就是从最后面计算:
(1)也就是第1个if (e.match(/^be0f23/) != null)要求字符串的前6个字符串是“be0f23”;
(2)第2个if (e.match(/233ac/) != null)要求字符串中出现了“233ac”;
(3)第3个if (e.match(/e98aa$/) != null)要求字符串的最后5个字符是“e98aa”;
(4)第4个if (e.match(/c7be9/) != null)要求字符串中出了“c7be9”;
所以字符串的顺序是“be0f233ac7be98aa”
通过了四个if判断之后,程序就会生成flag字符串显示

在输入框中输入be0f233ac7be98aa:
在这里插入图片描述

得到flag:flag{it's_a_h0le_in_0ne}

方法二:直接计算得到flag

我们也可以直接自己计算得到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];
var str = "";
for (var o = 0; o < 13; ++o) {
	document.write(s[o % 4][0]);
	str += s[o % 4][0];
	s[o % 4].splice(0, 1);
}
console.log("%s",str);

在这里插入图片描述

得到flag:flag{it's_a_h0le_in_0ne}

网站文章

  • 【机器学习】准确率、精确率、召回率、误报率、漏报率概念及公式

    阳性(正)样例P和阴性(负)样例N,将正样本预测为正样本的为True positive(TP),正样本预测为负样本的为False negativ(FN),负样本预测为正样本的为False positi...

    2024-01-30 21:41:59
  • php5.6 curlpost图片,PHP 5.6 的Curl POST

    1、一般的http post 支持提交键值对和二进制数据,win 下使用php 5.6的curl可以这样模拟如下代码:$ch = curl_init();//curl_setopt($ch, CURL...

    2024-01-30 21:41:33
  • D 动态序列

    题目链接:2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)D题目大意n个数q次询问,每次询问分五种,op=1表示序列中所有数乘k,op=2表示序列中所有数加上k,op=3表示序列头部增加...

    2024-01-30 21:41:25
  • OpenGL | 设置视口glViewport &裁剪glScissor & 屏幕截图 glReadPixel

    opengl 设置多个视口 & 屏幕截图

    2024-01-30 21:41:18
  • 服务器厂家文档,服务器厂家

    服务器厂家文档,服务器厂家

    服务器厂家 内容精选换一换已在物联网平台注册的设备,若设备的唯一标识码发生变更(如更换设备等场景),第三方应用需要调用此接口在物联网平台更新设备的唯一标识,并重新绑定设备。仅当设备处于离线状态时,才能...

    2024-01-30 21:41:12
  • js中数组初始化为空

    js中数组初始化为空 工作中遇到个bug原因是因为数组清空的时机不对,我一开始以为那就是定义那个变量是数组类型,然后把将js的全局变量 var 变量; 改成了 var 变量 = []; 将下面的代码行 变量 = []; 给注释掉了 事实上,变量=[ ],这行代码的作用是将数组清空,明白了之后,问题就解决了 ...

    2024-01-30 21:40:42
  • 正则的贪婪和非贪婪模式

    贪婪匹配是指尽可能多地匹配字符,以满足整个正则表达式的匹配条件。它会尽量匹配更长的字符串,而不是满足最小的匹配要求。非贪婪匹配是指尽可能少地匹配字符,以满足整个正则表达式的匹配条件。它会尽量匹配更短的字符串,而不是尽可能多的匹配。在正则表达式中,贪婪(greedy)和非贪婪(non-greedy)指的是匹配操作的行为方式。

    2024-01-30 21:40:34
  • 附录7-用户列表案例,element-ui

    附录7-用户列表案例,element-ui

    pymysql一直开着会有一些问题,只能在每一次查询进行一次启停,每一个视图中写一遍就很麻烦,所以用到了请求钩子。main.js主要解决了三个问题。如果点击取消就会显示添加失败。点击取消会显示删除失败。点击确定会显示删除成功。

    2024-01-30 21:40:27
  • (Medium) Teemo Attacking - LeetCode

    Description:In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned condition. Now, given the Teemo's attacking ascending time series towards Ashe ...

    2024-01-30 21:39:59
  • SpringMVC中@ModelAttribute和@SessionAttributes注解的使用

    SpringMVC中@ModelAttribute和@SessionAttributes注解的使用

    1.@ModelAttribute注解的使用@ModelAttribute注解在两种地方可以使用从这里我们可以看到该注解可以用在参数上也可以用在方法体上。现在我们就来讲解这两种方式。方式一,该注解用在方法体上:在方法定义上使用 @ModelAttribute 注解:Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方...

    2024-01-30 21:39:52