美文网首页Web安全
HackTheBox—邀请码

HackTheBox—邀请码

作者: Ackerzy | 来源:发表于2020-01-09 18:02 被阅读0次

    HackTheBox是一个在线的渗透测试平台,我们可以通过它锻炼自己的渗透测试水平,并与安全领域的数千名人员交流想法和方法。有意思的是,HackTheBox的注册过程就是一道简单的类似于CTF谜题。

    邀请码获取

    HackTheBox注册地址:https://www.hackthebox.eu/invite

    image

    解密上面一串由BASE64加载的信息得到:

    In order to generate the invite code, make a POST request to /api/invite/generate

    按其所说,得到下面的结果


    image

    再对这一串 code 进行解密,得到 GNHML-SUAKC-MVKCK-TLANJ-HPUBI ,这就是邀请码了。

    JS Packer

    上面那一串复杂的JS代码对于经验丰富的程序员来说秒杀,但是对于像我这样的菜鸟就要思考一段时间了,其实如果对JS Packer有所了解这很容易发现一个特征


    这里提到了一款JS混淆工具——JS Packer,其实它并不是专门的混淆工具,而是一款js压缩工具。
    其官网地址为: http://dean.edwards.name/packer/

    比如,输入:

    alter("hello, world");
    

    输出:

    eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0("1, 2");',3,3,'alter|hello|world'.split('|'),0,{}))
    

    格式化后:

    eval(function (p, a, c, k, e, r) {
        e = String;
        if (!''.replace(/^/, String)) {
            while (c--) r[c] = k[c] || c;
            k = [function (e) {
                return r[e]
            }];
            e = function () {
                return '\\w+'
            };
            c = 1
        }
        ;
        while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
        return p
    }('0("1, 2");', 3, 3, 'alter|hello|world'.split('|'), 0, {}))
    

    下面是对解压缩算法的一个简单解读,有兴趣的同学可以做更多的了解:

    // p 将原始内容中所有单词替换为字典下标后的压缩内容
    // a 词典大小,暂时用不到
    // c 词典大小,在解压时用来关联压缩内容和词典
    // k 词典
    // e 在解压时,当replace第二个参数支持function时,为\\w+,否则为与下标对应的字符串
    // r 当加速解压时用来保存词典
    eval(function(p, a, c, k, e, r) {
        e = String;
     
        // 检测当前的浏览器是否支持replace(regex, function),如果支持的话就能够加快解压速度
        // 如果不支持的话可以把这一块直接忽略掉
        if (!''.replace(/^/, String)) {
     
            // 把被压缩的单词拷贝一份,因为k还有别的用处
            while (c--) r[c] = k[c] || c;
     
            // k[0]后面用来对每个匹配到的下标寻找替换字符串
            k = [function(e) {
                return r[e]
            }];
     
            // 用来分割原始内容
            e = function() {
                return '\\w+'
            };
     
            // 加速解压的时候,相当于把while变成了if
            c = 1
        };
     
        // 使用词典将压缩后的下标代码扩展,如果没有上面的加速的话,c等于词典单词数,要一个一个替换了
        // 如果支持replace(string, function)的话,会将匹配到的每一个数字都传递给k[c]来得到其应该被替换为的字符串
        while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
     
        // 完成解压
        return p
    } ('0.1("2");0.1("2");0.1("3");', 4, 4, 'console|log|aaaaa|bbbb'.split('|'), 0, {}))
    

    相关文章

      网友评论

        本文标题:HackTheBox—邀请码

        本文链接:https://www.haomeiwen.com/subject/kcfuactx.html