0%

[HFCTF2020]EasyLogin

打开题目是一个登入界面有注册界面,尝试注入和注册admin用户后无果。(登入后有getflag按钮,但我们没权限)
查看源码发现存在/static/js/app.js 进行访问后似乎看到了源码,但是又无法发现漏洞点。只有提示:

1
2
3
4
/**
* 或许该用 koa-static 来处理静态文件
* 路径该怎么配置?不管了先填个根目录XD
*/

根据wp我们可以知道框架存在controllers/api.js 且极为重要,大概就是说,检查session中的username是为admin时就可出flag。

JWT利用 设置secretid为数组加密算法为空

已经记录过什么是JWT 【什么是JWT】
这里的利用方法是: 设置secretid为数组,加密算法为空
推荐   【JWT解编码网站】

解题步骤

  1. 创建一个用户,然后进行登入同时抓包。
  2. 看到post的数据为:
    1
    username=mayi&password=mayi&authorization=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXRpZCI6MCwidXNlcm5hbWUiOiIxMjMiLCJwYXNzd29yZCI6IjEyMyIsImlhdCI6MTU4OTg3NDUwOH0.V7Zdr4KDSV8O6ON947BTdox6lPAe2MgdlRPcaWUGsYw
  3. 我们将authorization的值以点(.)分为3段,先看头也就是第一段进行base64解密,将头部的alg值改为none再base64加密记得特殊字符的处理= 就省略,再看payload,也是将其base64解码然后将secretid改为[](空数组)username改为admin随后base64编码一样注意特殊字符。最后签名删掉也就是第3段(点需要保留) 使用这个【base64在线工具】 其它的结果可能不对。
    1
    2
    header : {"alg":"none","typ":"JWT"}
    paylaod: {"secretid":[],"username":"admin","password":"mayi","iat":1589875776}
    注意,虽然签名没了但是那个点必须要打上
  4. 最后我们登入后点击getflag,然后查看放回包即可看到flag

-------------本文结束感谢您的阅读-------------