文章总结: 本文记录了GlobalTrustBankCTF挑战的解题过程。作者通过网页源码发现硬编码凭据登录系统,获取JWT令牌后利用JohntheRipper破解弱密钥。通过修改payload伪造管理员令牌并替换Cookie,最终成功获取Flag。文章强调了信息收集的重要性,并总结了源码凭据泄露与JWT弱密钥的风险。 综合评分: 84 文章分类: CTF,WEB安全,漏洞分析,渗透测试,实战经验
我知道你的 JWT 私钥?
haidragon haidragon
安全狗的自我修养
2026年3月9日 12:29 湖南
官网:http://securitytech.cc
这是 Cyber Premier League 举办的另一个挑战,由 sanifu organization 组织。 Flag 被隐藏在一个页面中,而这个页面只有管理员才能访问。
挑战名称: Global Trust Bank 描述: 无描述 类别: Web 难度: Medium(中等) 平台: CTFZone
说明 我准备了一个非常详细的 walkthrough(完整解题过程),逐步展示如何攻击 Web CTF 挑战,即使**不使用或仅使用少量高级工具(如 msf、burp 等)**也可以完成。
感谢所有帮助准备本 Writeup 的朋友。
Global Trust Bank 是一家通过 Web 应用提供服务的银行。 但在它的平台中存在漏洞,需要找出漏洞、利用它并提交 flag。
(在真实环境中,我们利用漏洞获取 PoC,然后提交漏洞报告给公司 —— 我们不是破坏者,我们是保护者。)
下面是获取 flag(识别漏洞)的步骤。
Step Alpha:访问银行门户
通过提供的 URL 访问网站。
登录页面
我阅读了网站上的几乎所有信息,并点击登录页面。 尝试了一些常见默认凭据:
admin:admin@123
admin:admin
admin:password
但都没有成功。
我尝试寻找注册页面,但弹出提示:
“请前往最近的银行分行注册”
糟糕,时间在流逝,flag 还没拿到。
这时我意识到一个问题:
我跳过了关键步骤 —— 枚举(Enumeration)
很多所谓的“黑客”喜欢直接测试 payload, 却忘记了最重要的一步:
信息收集(Information Gathering)
也就是 Enumeration。
Step B:Web 技术、端点和目录枚举
我打开终端,使用 WhatWeb 扫描目标网站,识别使用的技术栈。
使用工具:
WhatWeb
但结果对我来说没什么有价值的信息。
说明
枚举目标系统使用的技术可以:
- 暴露版本号
- 根据版本查找已知漏洞
例如:
ExploitDB
这个网站包含大量已公开漏洞和 exploit。
接下来我使用另一个工具:
Gobuster
这个工具可以发现:
- 隐藏的目录
- API endpoint
- 文件路径
执行命令:
gobuster dir -u http://labs.ctfzone.com:7666 -w /usr/share/wordlists/dirb/common.txt
结果:
结果显示:
只有已认证用户才能访问 dashboard, 否则会被重定向到登录页面。
仍然没有有用信息。
Step C:检查目标(信息收集)
突然我想到一个问题:
你检查过“人眼看不到的内容”吗?
于是:
右键首页 选择 View Page Source(查看页面源代码)
在首页中唯一让我感兴趣的是:
<ahref="/login"class="btn">Online Banking Login</a>
页面源码如下:
<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width, initial-scale=1.0">
<title>GlobalTrust Bank - Secure Online Banking</title>
<linkrel="stylesheet"href="style.css">
</head>
<body>
<divclass="container">
<header>
<divclass="bank-logo">
<div>
<h1>GlobalTrust Bank</h1>
<pclass="tagline">Secure Banking Since 1965</p>
</div>
</div>
<navclass="nav-menu">
<ahref="/"class="btn btn-secondary">Home</a>
<ahref="/login"class="btn">Online Banking Login</a>
</nav>
</header>
随后我查看了 登录页面源码。
结果发现:
<!-- test_user=clemence pw=snf&&ctfzonepass@2026 -->
完整代码:
<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width, initial-scale=1.0">
<title>GlobalTrust Bank - Secure Login</title>
<linkrel="stylesheet"href="style.css">
</head>
<body>
<!-- test_user=clemence pw=snf&&ctfzonepass@2026 -->
<divclass="container">
<header>
<divclass="bank-logo">
<div>
<h1>GlobalTrust Bank</h1>
<pclass="tagline">Secure Banking Since 1965</p>
</div>
</div>
<navclass="nav-menu">
<ahref="/"class="btn btn-secondary">Back to Home</a>
</nav>
</header>
宝藏就在这里。
作者把测试用户凭据藏在 HTML 注释中。
于是我使用这个账号登录,并打开浏览器开发者工具的 Network 面板。
登录成功后,在 Network 中出现三个 endpoint:
/login
/dashboard
/user
/login 返回的 Response Headers 中包含:
authToken
值是一个 JWT Token。
分析 JWT Token
Token 内容:
isAdmin: false
说明当前用户不是管理员。
渗透测试思路
目标:
权限提升(Privilege Escalation)
JWT 中存在字段:
isAdmin
如果把:
false → true
就可以成为管理员。
但问题是:
JWT Token 是 签名的。
要修改 Token:
- 需要获取 签名密钥
- 使用相同密钥重新签名
进一步枚举 API
查看 /api/user 请求时发现:
Token 存储在 Cookie 中。
于是我想:
是否存在:
/api/admin
/api/flag
/api/register
于是再次运行 Gobuster:
gobuster dir -u http://labs.ctfzone.com:7666/api -w /usr/share/wordlists/dirb/common.txt
结果:
发现两个 endpoint:
/api/user
/api/flag
访问 /api/flag
返回:
{"error":"Admin access required"}
说明:
必须是管理员 Token。
Step D:破解 JWT 密钥
常见 JWT 破解工具:
- hashcat
- john
- jwt-cracker
本挑战使用:
John the Ripper
成功破解密钥:
n1c2a3h4t516i7e890r
验证密钥:
识别加密格式:
Step E:生成管理员 Token
使用工具:
CyberChef
修改 payload:
// 原始
{
"userId": 2,
"username": "clemence",
"isAdmin": false,
"balance": 3000
}
// 修改
{
"userId": 2,
"username": "clemence",
"isAdmin": true,
"balance": 3000
}
生成新的 JWT Token。
Step Omega:替换 Cookie
进入浏览器:
Inspect → Application → Cookies
把 Cookie 中的 token 替换为新的管理员 token。
刷新页面。
成功获取 Flag 😎
snf{JWT_cr4ck3d_4dm1n_4cc3ss_gr4nt3d_458734659457}
Global Trust Bank 漏洞总结
1️⃣ 页面源码存在硬编码凭据
<!-- test_user=clemence pw=xxx -->
风险:
- 未授权访问
- 数据泄露
- 身份冒充
2️⃣ JWT 使用弱密钥
n1c2a3h4t516i7e890r
风险:
- 容易被字典破解
- 可以伪造管理员 Token
建议:
- 使用强随机密钥
- 定期轮换密钥
总结
这个挑战说明:
所有攻击都始于 Enumeration(枚举)
即使有多种解法,第一步永远是:
Information Gathering
感谢阅读。
- 公众号:安全狗的自我修养
- vx:2207344074
- http://gitee.com/haidragon
- http://github.com/haidragon
- bilibili:haidragonx
#
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全狗的自我修养 haidragon haidragon《我知道你的 JWT 私钥?》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论