CTFHub easy-login

CTF案例:CTFHub

 打开环境一个正常的登录页面

3b6fa582796f49a58ae25271b1983481.png

先尝试注册

这里想试试能不能注册admin为用户的账号,发现不能注册,盲猜有猫腻,已存在管理员账号为admin

2882b594a7c84bb49ea52322dec0f2fa.png 然后正常注册

3eae41a8793e45af95e9f93fc978c676.png

fd12e6b8b5ae452ba8f7e99ed8fba70e.png 

注册后成功跳转登录页面,先尝试正常登录

b0ac4ad804f1447bb8b6a69aba109638.png 点击下方的Get flag

这边显示权限不行

ff0fb1a06beb4bfe9ae1a3bf427fb4bd.png 

结合第一个注册的admin失败的情况,猜测管理员用户名admin尝试越权

这里在登录界面重新抓包

6b42dfff284242ddbb4a8731c9c6dcf2.png 

 根据cookie值中的authorization进行判断发现属于jwt的格式(等会补充)

jwt数据格式特征 由标头,声明,和响应体组成,同时这三部分通过英文,进行分割,每部分数据base64编码

将数据包中的authorization对应标头和声明值的部分放在burpsuite 解码器模块中,使用base64解码

图一

44ffa26605924fffae454a2f487a6602.png

 图二 

172545d58bd64cc5aae523aff88d0aad.png

 

 由图二不难发现username对应登录用户名,尝试修改为admin,并且把secretid的值置为[]

而图一中的alg则和jwt数据中第三部分令牌的算法加密有关系

这里将alg 的值置为none

将修改后的值重新使用base64编码

8460c1dcb0434bcbb363276bd507da01.png

 01e6b16862754c009cd175b534fc1c07.png

 因为base64加密后的数据经过浏览器url编码后=会被转义所以将=改为.

这里有坑,用burpsuite解码时数据的声明部分会乱码,并且解析后的数据少一个}需要自己补上不然base64编码后会由差异,因此声明部分推荐JSON Web Tokens - jwt.io

 解码,但是这玩意也有坑,数据标头部分一改就没,所以两个结合起来

df8ba241539f41f3a4edb023a32c2333.png

 最后得到eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzZWNyZXRpZCI6W10sInVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6ImN0ZiIsImlhdCI6MTY4NDI0MzIyNX0.

将这串数据改到数据包中

343fbd5ab0244d31ace284545060eb4f.png

返回成功

cfe44ae11f8040b898daac0ed3360978.png 

点击Get Flag抓包然后放进重发器模块

03a2d87080fb4e47bdac689702ed85c5.png

得到最终结果 

 jwt

JWT(JSON Web Token)是一种基于JSON的开放标准,用于在客户端和服务器之间传递信息。它可以安全地传输信息,因为它使用了加密和签名技术来保护数据的完整性和保密性。

以下是一些JWT安全性方面的注意事项:

  1. 验证令牌:在使用JWT之前,必须对令牌进行身份验证和授权。这可以通过使用数字证书或密钥对来实现。只有经过身份验证的令牌才能被接受并使用。

  2. 防止重放攻击:JWT包含一个称为“expires”字段的时间戳,指示令牌何时过期。通过在生成JWT时将当前时间戳添加到JWT中,可以防止重放攻击。

  3. 防止篡改:JWT包含一个签名,用于验证其完整性和真实性。签名可以使用哈希算法(如HMAC)来生成,并且只有知道密钥的人才能生成有效的签名。因此,JWT不能被篡改或伪造。

  4. 保护敏感数据:JWT可以用于传递敏感数据,例如用户名、密码和其他机密信息。为了保护这些数据,可以使用HTTPS等安全协议来传输JWT,并将JWT存储在安全的位置(例如数据库)中。

总之,JWT是一种安全的身份验证和授权机制,可以用于保护Web应用程序中的敏感数据。但是,为了确保其安全性,必须正确地配置和使用JWT。

jwt格式数据 分为 标头,声明,签名三个部分组成,由英文的.分割

其中标头(headers)数据:

        {

        "alg":"HS256",

        "typ":"JWT"

      }

alg 表示签名的加密参数

这里如果将alg参数改为 "none"

签名则为空值,以此绕过签名验证

声明claim:

{
  "secretid": [],
  "username": "admin",
  "password": "ctf",
  "iat": 1684243225
}

该ctf就是通过修改声明部分的username值达到越权效果,这里存放一些数据进行声明提交给服务器端

签名Signature

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  
) secret base64 encoded

服务器有一个不会发送给客户端的密码(secret),用头部(header)中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是 JWT 的签名。 

资料:

        哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

【小迪安全】Day40JAVA安全-JWT安全&预编译CASE注入 - 哔哩哔哩 (bilibili.com)

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值