[HFCTF2020]EasyLogin

[HFCTF2020]EasyLogin

考点

  • koa框架代码审计

  • JWT特性

wp

F12在/static/app.js中看到提示koa框架,百度一下找到koa的框架结构

尝试直接访问app.js可以得到koa项目入口

/static/app.js中可以看到访问的都是api,所以这里的处理逻辑应该都是api,尝试出来代码位置是/controllers/api.js,代码放最后。可以看到它有一个获取token的过程

在登录处抓包,可以发现登录时都会加上一个authorization参数

https://jwt.io/可以看到解码后的内容

alg改成none,JWT中当algnonesecret为空时,后端将不执行签名验证。

用户名密码改成admin,至于secretid,它的处理在如下代码,先从jwt里面获取secretid,如果secretid未定义、或者是空、或者小于0、或者大于等于18(global.secrets.length),就会抛出错误,下一步是到全局列表变量global.secrets中获取secretid对应的下标,再去jwt验证。

参数比较多,理一下,secret是一个长度18的字符串,secretid是一个0-18的数字,secrets是一个列表。

如果把secretid改成[],让secretid为空列表,secret也会变成空,这样就绕过了jwt的验证

payload

controllers/api.js

小结

  1. JWT组成

  2. JWT中当algnonesecret为空时,相当于不执行签名验证。

最后更新于