CTF-Web安全CTF-WEB

Bugku_web 速度要快[JS 版]

2020-02-17  本文已影响0人  W1z4rd101

题目:速度要快

【Bugku】http://123.206.87.240:8002/web6/


开始的时候这道题目并没有头绪,也只看到 html 文档中有个注释,提示要求使用 post 方法传递一个名为 margin 的变量,在文档中未找到其他有效信息。然后又在网站响应头 [Response Headers] 中发现了名为 flag 的键值,value是一个经过base64加密过的字符串,解码后发送,尝试无果。


于是去搜索 wp,发现这个 flag 的值是会变的,然后一步步摸索变换最后通过创建 js 函数得到 flag。


0x01 初始网页

index.php

老规矩,按 F12 看源码:

发现注释

翻译一下就是 "那么,现在你必须将你找到的margin以post方式传给服务器",打开Network,点击网页,可以看到响应头中包含信息。

发现键值 flag

0x02 base64解码

复制高亮部分内容,其为base64加密信息,将其解码。

解码前 解码后

可以看到解码后的内容:跑的还不错,给你flag吧: ODg5MzU=,似乎也是base64加密,再次解码。

解码结果

是一串数字,很好理解,从发现 flag 一路过来,这应该就是我们要提交的 margin 的值了。


0x03 编写程序

总结一下:

首先我们需要向该网站的服务器发送请求,才能取得响应头。然后取出其中的键值 flag,对其进行两次 base64 解码,且第二次解码前需要利用 split 函数先去掉前面无效内容。最后,新建一个data变量存入 margin 的值,通过 post 方式将发给服务器,从而获得 flag。

code:

var httpRequest = new XMLHttpRequest();  // 创建请求对象
httpRequest.open('GET', 'http://123.206.87.240:8002/web6/', true);  // 发送get请求,获取响应头
httpRequest.send();
httpRequest.onreadystatechange = function () { 
    if (httpRequest.readyState == 4 && httpRequest.status == 200) {
        var json = httpRequest.getResponseHeader('flag');
        console.log('json: ' + json);  

        var bs64 = httpRequest.getResponseHeader('flag');  // 获取到服务端返回的数据
        console.log('bs: ' + bs64);
        var flag = window.atob(bs64).split(':')[1];  // 第一次解码
      
        console.log('flag: ' + flag);
        var new_flag = window.atob(flag);  // 第二次解码
        console.log('new_flag: ' + new_flag);
        var data = 'margin=' + new_flag;  // 存入margin的值
        var httpRequest1 = new XMLHttpRequest();
        httpRequest1.open('POST', 'http://123.206.87.240:8002/web6/', true);  // 打开链接
        httpRequest1.setRequestHeader("Content-type","application/x-www-form-urlencoded");  // 设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
        httpRequest1.send(data);
        httpRequest1.onreadystatechange = function () { 
            if (httpRequest1.readyState == 4 && httpRequest1.status == 200) {
                var res = httpRequest1.responseText;  // 获取到服务端返回的数据
                console.log(res);  // 打印结果,即flag
            }
        }
    }
};
输入代码

0x04 得到flag

回车运行:

运行结果

flag: KEY{111dd62fcd377076be18a}

上一篇下一篇

猜你喜欢

热点阅读