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,点击网页,可以看到响应头中包含信息。
发现键值 flag0x02 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}