hctf2016 web 部分WriteUp.md

本文是关于HCTF2016 Web部分的WriteUp,包括RESTful、giligili、兵者多诡等挑战的解决方法。涉及HTTP方法利用、JavaScript解密、文件上传漏洞、同源策略绕过等多个技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次是18还是19忘了,还是太菜了,level4开的太晚了,卡题卡了一晚上,队伍pwn和misc还有待提高,一道pwn都没有出,挺伤的。
补题发现要是再有三个小时,感觉大图书馆的牧羊人AT feild 能出,这样就挤进前15了。不过这次也还比较满足了,毕竟新人队伍,大家都还很菜,加上这次没有安卓。。。好吧不安慰自己了,立个flag把,下一次分站赛一定要挤进前15。

要说自己也有问题,比如最后secretdata明明做出来了,结果额外至少花费了一个小时,只是因为扫描目录的时候扫到了一个phpmyadmin,觉得主办方放一个这个东西在这里加上题目名称叫secretdata,肯定有用意,然后像个智障一样一直折腾这个网页。js发过去也没有第一时间让他回传cookie,而是让admin一直访问phpmyadmin,profile.php等等的,要是直接最开始简单点直接拿cookie登陆就好了。但是这里也发现一个问题,管理员访问user.php为什么没有flag回传给我而只是一个跟我们一样的user.php,但是最后拿到cookie登陆上去的时候flag确实在user.php里面,这一点百思不得其解。

另外这次我只做出了rsa1没有搞出rsa2也是蛮遗憾的,而且到最后也不知道rsa2该怎么做。学习之路还长着呢。慢慢来啊。

算了,赛后说啥都晚了,下次加把劲把 。另外补的题忘了写wp了,有机会再怼上把。

2099年的flag

改下请求头就行了

这里写图片描述

RESTful

根据提示要用PUT,然后得到hint说是restful架构,所以直接构造一下请求就行了。

这里写图片描述

giligili

http://lorexxar.cn/2016/04/11/sctf-Obfusion/

查看源码知道是一道js解密的题目。代码如下:


var _ = { 0x4c19cff: "random", 0x4728122: "charCodeAt", 0x2138878: "substring", 0x3ca9c7b: "toString", 0x574030a: "eval", 0x270aba9: "indexOf", 0x221201f: function(_9) {
   
    var _8 = []; for (var _a = 0, _b = _9.length; _a < _b; _a++) { _8.push(Number(_9.charCodeAt(_a)).toString(16)); } return "0x" + _8.join(""); }, 0x240cb06: function(_2, _3) {
   
    var _4 = Math.max(_2.length, _3.length); var _7 = _2 + _3; var _6 = ""; for(var _5=0; _5<_4; _5++) { _6 += _7.charAt((_2.charCodeAt(_5%_2.length) ^ _3.charCodeAt(_5%_3.length)) % _4); } return _6; }, 0x5c623d0: function(_c, _d) {
   
    var _e = ""; for(var _f=0; _f<_d; _f++) { _e += _c; } return _e; } };
            var $ = [ 0x4c19cff, 0x3cfbd6c, 0xb3f970, 0x4b9257a, 0x1409cc7, 0x46e990e, 0x2138878, 0x1e1049, 0x164a1f9, 0x494c61f, 0x490f545, 0x51ecfcb, 0x4c7911a, 0x29f7b65, 0x4dde0e4, 0x49f889f, 0x5ebd02c, 0x556f342, 0x3f7f3f6, 0x11544aa, 0x53ed47d, 0x697a, 0x623f21c1, 0x5c623d0, 0x32e8f8b, 0x3ca9c7b, 0x367a49b, 0x360179b, 0x5c862d6, 0x30dc1af, 0x7797d1, 0x221201f, 0x5eb4345, 0x5e9baad, 0x39b3b47, 0x32f0b8f, 0x48554de, 0x3e8b5e8, 0x5e4f31f, 0x48a53a6, 0x270aba9, 0x240cb06, 0x574030a, 0x1618f3a, 0x271259f, 0x3a306e5, 0x1d33b46, 0x17c29b5, 0x1cf02f4, 0xeb896b ];
            var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
            function check() {
   
   
                var answer = document.getElementById("message").value;
                var correct = (function() {
   
   
                    try {
                        h = new MersenneTwister(parseInt(btoa(answer[_[$[6]]](0, 4)), 32));
                        e = h[_[$[""+ +[]]]]()*(""+{})[_[0x4728122]](0xc); for(var _1=0; _1<h.mti; _1++) { e ^= h.mt[_1]; }
                        l = new MersenneTwister(e), v = true;
                        l.random(); l.random(); l.random();
                        o = answer.split("_");
                        i = l.mt[~~(h.random()*$[0x1f])%0xff];
                        s = ["0x" + i[_[$[$.length/2]]](0x10), "0x" + e[_[$[$.length/2]]](0o20).split("-")[1]];
                        e =- (this[_[$[42]]](_[$[31]](o[1])) ^ s[0]); if (-e != $[21]) return false;
                        e ^= (this[_[$[42]]](_[$[31]](o[2])) ^ s[1]); if (-e != $[22]) return false; e -= 0x352c4a9b;
                        t = new MersenneTwister(Math.sqrt(-e));
                        h.random();
                        a = l.random();
                        t.random();
                        y = [ 0xb3f970, 0x4b9257a, 0x46e990e ].map(function(i) {
   
    return $[_[$[40]]](i)+ +1+ -1- +1; });
                        o[0] = o[0].substring(5); o[3] = o[3].substring(0, o[3].length - 1);
                        u = ~~~~~~~~~~~~~~~~(a * i); if (o[0].length > 5) return false;
                        a = parseInt(_[$[23]]("1", Math.max(o[0].length, o[3].length)), 3) ^ eval(_[$[31]](o[0]));
                        r = (h.random() * l.random() * t.random()) / (h.random() * l.random() * t.random());
                        e ^= ~r;
                        r = (h.random() / l.random() / t.random()) / (h.random() * l.random() * t.random());
                        e ^= ~~r;
                        a += _[$[31]](o[3].substring(o[3].length - 2)).split("x")[1]; if (parseInt(a.split("84")[1], $.length/2) != 0x4439feb) return false;
                        d = parseInt(a, 16) == (Math.pow(2, 16)+ -5+ "") + o[3].charCodeAt(o[3].length - 3).toString(16) + "53846" + (new Date().getFullYear() - 1 + "");
                        i = 0xffff;
                        n = (p = (f = _[$[23]](o[3].charAt(o[3].length - 4), 3)) == o[3].substring(1, 4));
                        g = 3;
                        t = _[$[23]](o[3].charAt(3), 3) == o[3].substring(5, 8) && o[3].charCodeAt(1) * o[0].charCodeAt(0) == 0x2ef3;
                        h = ((31249*g) & i).toString(16);
                        i = _[$[31]](o[3].split(f).join("").substring(0, 2)).split("x")[1];
                        s = i == h;
                        return (p & t & s & d) === 1 || (p & t & s & d) === true;
                    } catch (e) {
                        console.log("gg");
                        return false;
                    }
                })();

                document.getElementById("message").placeholder = correct ? "correct" : "wrong";
                if (correct) {
                    alert("Congratulations! you got it!");
                } else {
                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值