• 攻防世界CTF-simple_js


    1、 题目的样子,要输入密码

     

     2、 随便输了下,回车后

     

     3、 直接F12看看源码先

     

    function dechiffre(pass_enc) {
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
        var tab = pass_enc.split(',');
        var tab2 = pass.split(',');
        var i, j, k, l = 0,
        m, n, o, p = "";
        i = 0;
        j = tab.length;
        k = j + (l) + (n = 0);
        n = tab2.length;
        for (i = (o = 0); i < (k = j = n); i++) {
            o = tab[i - l];
            p += String.fromCharCode((o = tab2[i]));
            if (i == 5) break;
        }
        for (i = (o = 0); i < (k = j = n); i++) {
            o = tab[i - l];
            if (i > 5 && i < k - 1) p += String.fromCharCode((o = tab2[i]));
        }
        p += String.fromCharCode(tab2[17]);
        pass = p;
        return pass;
    }
    String["fromCharCode"](("x35x35x2cx35x36x2cx35x34x2cx37x39x2cx31x31x35x2cx36x39x2cx31x31x34x2cx31x31x36x2cx31x30x37x2cx34x39x2cx35x30"));
    
    h = window.prompt('Enter password');
    alert(dechiffre(h));

    4、 JS代码审计啊,脑子要炸

    5、 不过看到这里有个点,可以看看

    String["fromCharCode"](dechiffre("x35x35x2cx35x36x2cx35x34x2cx37x39x2cx31x31x35x2cx36x39x2cx31x31x34x2cx31x31x36x2cx31x30x37x2cx34x39x2cx35x30"));

     

     6、 放到16进制解码网站看看

     

    7、 大致看了下js代码

    放在js代码运行网站上,删除部分pass变量运行看看

     

     感觉弹框的字符跟pass变量的数字有点对应,有点像ascii码

     

     遂找到ASCII码对照表,果然

     

     再联系到前面6的部分,搞不好也是ascii码,等于说String.fromCharCode函数功能就是把数字解析为ascii码?故有了下面的测试

     

     至于具体的中间部分js代码逻辑,找到这篇博客写的不错,厉害了

     

     8、 flag也就是Cyberpeace{786OsErtk12}

     

     PS:题目描述也貌似提示了flag比较特殊,不是正常那种!!

    奶奶问孙子:4+1等于几 孙子说:等于6-1。 奶奶说:你明明知道答案,为什么不说? 孙子说:年轻人不讲5的……..
  • 相关阅读:
    php 多进程
    关于TP的RBAC的使用
    谈谈自己对于Auth2.0的见解
    php 写队列
    关于thinkphp中Hook钩子的解析
    JS的闭包
    单链表的查找和取值-1
    shell输入输出重定向
    转-Visual Studio控制台程序输出窗口一闪而过的解决方法
    linux下如何调用不同目录下的.h 库文件
  • 原文地址:https://www.cnblogs.com/jasy/p/15348669.html
Copyright © 2020-2023  润新知