这里记录一下我写题和学习的过程,具体对JWT还是不太了解的,希望大佬们指点一二
注册账号密码后在登陆的地方抓了个包
发现一个authorization授权,cookie里面有两个参数,感觉这个题应该考的是认证方面的,要用管理员的账户登陆进去才能获得flag,在flag界面只有一个js文件,打开看看
/**
* 或许该用 koa-static 来处理静态文件
* 路径该怎么配置?不管了先填个根目录XD
*/
function login() {
const username = $("#username").val();
const password = $("#password").val();
const token = sessionStorage.getItem("token");
$.post("/api/login", {username, password, authorization:token})
.done(function(data) {
const {status} = data;
if(status) {
document.location = "/home";
}
})
.fail(function(xhr, textStatus, errorThrown) {
alert(xhr.responseJSON.message);
});
}
function register() {
const username = $("#username").val();
const password = $("#password").val();
$.post("/api/register", {username, password})
.done(function(data) {
const { token } = data;
sessionStorage.setItem('token', token);
document.location = "/login";
})
.fail(function(xhr, textStatus, errorThrown) {
alert(xhr.responseJSON.message);
});
}
function logout() {
$.get('/api/logout').done(function(data) {
const {status} = data;
if(status) {
document.location = '/login';
}
});
}
function getflag() {
$.get('/api/flag').done(function(data) {
const {flag} = data;
$("#username").val(flag);
}).fail(function(xhr, textStatus, errorThrown) {
alert(xhr.responseJSON.message);
});
}
这里提示我们koa-static,了解到koa-static是一个处理静态文件资源的中间件,搜一下koa是一个web框架,利用JWT来进行客户端认证登录
JSON Web Token 入门教程 - 阮一峰的网络日志
深入了解Json Web Token之实战篇 - FreeBuf网络安全行业门户
我的理解是token跟session不同,session是在服务器端,而token是在客户端,只需要用户每次登陆的时候携带有效期内的token,即可通过认证登录
之前抓包后面的auto就是一个token,JSON Web Tokens - jwt.io这是一个专门解token的网站,根据前面的文档学习,我们这里将加密方式alg改为none代表没有签名加密,将username改为admin管理员登录,将secretid改为[]代表一个空值;因为我们这里alg已经设为了none就没有签名了,我们只需要将前面头部和负载进行base64加密并且拼接即可
可以看到返回了cookie里面两个相关的值,在获取flag的界面抓个包
将我们admini账户登录进去获得的东西覆盖它
感觉有点半猜的写的吧,其他wp我不知道他们怎么知道有那个api.js的文件以及koa的目录结构,这里我不清楚就没有写了,留下一个疑点吧