当前位置:   article > 正文

攻防世界——WEB题目Ikun_BILIBILI_ikun ctf

ikun ctf

BUUCTF 刷题ikun_bilibili应援团(JWT伪造、python反序列化)

一、获取lv6账号位置

import requests
target = "http://111.200.241.244:61777/shop?page=%d"
for i in range(500):
    print(i)
    res = requests.get(target%(i)).text
    if "lv6.png" in res:
        print(target%(i))
        break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

http://111.200.241.244:61777/shop?page=181

二、抓包结算页面

发现只有更改discount参数有效果,跳转到http://111.200.241.244:61777/b1g_m4mber界面,然而此页面有权限限制。此时主要有两种思路1、看看有无sql注入的洞,能不能拿到admin账号。2、伪造admin的jwt。

在这里插入图片描述

三、 sql注入

未找到注入漏洞,后来获得源码后看到其为orm查询,使用了 ORM 之后,Relational DB 的接口被完全封装在 ORM 机制内部,不对外暴露,当然防止了 SQL 注入攻击

     user = self.orm.query(User).filter(User.username == username).one()
  • 1

四、jwt伪造

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgaSrcyO-1627348100789)(C:\Users\Dragon\AppData\Roaming\Typora\typora-user-images\image-20210726184452584.png)]

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InF3ZSJ9.U_RNAhBZvEMY1nwmWWeA3Vh50ghzJb0R7qV-uAS1V78
  • 1

jwt(json web token)类似于session也是会话保持的一种技术,由三个部分组成,由**.分隔,第一部分为头部(header),第二部分为载荷(payload),第三部分是签名(signature).前两个部分都为base64加密,而第三部分签名由header指定的加密算法加盐**加密(secret key),通常直接使用 HMAC SHA256.

详见blog:什么是 JWT – JSON WEB TOKEN - 简书 (jianshu.com)

1、爆破 secret_key

用myjwt工具爆破出盐值secret_key,还有一种c-jwt-cracker的工具更方便,不用指定正则和字典。

工具用法:[MyJWT-Json网站令牌渗透测试工具Json Web Token(JWT) |

推荐阅读