【juice-shop】★★★★★★ Login Support Team:通过 KeePass 字典爆破获取密码

下载 FTP 中的 KeePass 数据库文件,通过分析密码策略生成定制化字典,使用 john 爆破 KeePass 密码,获取支持团队的真实凭据。

【juice-shop】★★★★★★ Login Support Team:通过 KeePass 字典爆破获取密码

0x01 任务简报

💡 提示 (Hints)
1. 这一挑战的根本原因是人为错误远远多于技术缺陷。
2. 支持团队位于低成本国家,且团队结构波动剧烈——员工们稍有机会获得薪资稍高的职位就会离职。
3. 为防止滥用,支持团队账户本身的密码实际上非常强。
4. 为便于事件发生时快速响应,支持团队采用第三方工具,所有支持工程师均可通过该工具获取当前账户密码。
5. 虽然也可以通过 SQL 注入以支持团队身份登录,但这无法解决该挑战。

Login Support Team

首先我们到 http://127.0.0.1:3000/ftp/ ,下载 incident-support.kdbx 文件(我直接点击文件进行下载的,似乎没有副作用?)

处理文件

1
❯ john --format=KeePass --wordlist=/usr/share/wordlists/rockyou.txt ./support.txt
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
❯ john --wordlist=/usr/share/wordlists/rockyou.txt ./support.txt
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
Cost 1 (iteration count) is 1 for all loaded hashes
Cost 2 (version) is 2 for all loaded hashes
Cost 3 (algorithm [0=AES 1=TwoFish 2=ChaCha]) is 0 for all loaded hashes
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:03 DONE (2026-04-12 01:45) 0g/s 4496Kp/s 4496Kc/s 4496KC/s            ..*7¡Vamos!
Session completed.

emmmm,无效,对吧

回到main.js,搜索support,

依旧无果

.kdbx 是 KeePass 的文件后缀

我这里没有对应的password文件(应该日常手机字典的) 漫长的john破解中……

一夜过去了没有破解

看来是密码本有一点问题

再回到main.js 想起之前忽略的地方

那行注释

这里使用 suport@ 搜索是因为之前所有内容,只有这里有关@,使用support@搜索节约时间

这里疑似是密码生成方式

1
/(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,30}/

分析这个密码生成要求

要求 说明
(?=.*[a-z]) 必须包含至少 1 个小写字母
(?=.*[A-Z]) 必须包含至少 1 个大写字母
(?=.*\d) 必须包含至少 1 个数字
(?=.*[@$!%*?&]) 必须包含至少 1 个特殊字符
[A-Za-z\d@$!%*?&]{12,30} 长度 12-30 位,仅允许这些字符

这个要求生成命令如下

1
crunch 12 30 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@$!%*?&' > passwords.txt

结果可能有8亿以上的组合,明显不对,这样破解时间代价太大

先尝试将题目Login Support Team 单词加入到密码,如下

  • Login@@@@@@@
  • Support@@@@@@
  • Team@@@@@@@@@

降低密码复杂度,长度12位排除字母

1
crunch 12 12 '0123456789@$!%*?&' -t 'Login@@@@@@@' > passwords.txt
1
crunch 12 12 '0123456789@$!%*?&' -t 'Support@@@@@' > passwords.txt
1
crunch 12 12 '0123456789@$!%*?&' -t 'Team@@@@@@@@' > passwords.txt

这三条生成字典大小分别是:4 GB、17 MB、84 GB

1
❯ crunch 12 12 '0123456789@$!%*?&' -t 'Support@@@@@' > support_passwords_wordlist.txt

这里我之前的文件乱了删除了一下,重新生成一个密码hash文件

1
keepass2john incident-support.kdbx > incident-support.kdbx.txt

使用john 进行爆破(这里我发现john会自动识别KeePass 格式所以没有进行format选择)

得到密码Support2022!进行登录

( •̀ ω •́ )y 耶,成功登录,选中第一行<C-v> 复制一下

回到网页尝试登录

1
2
support@juice-sh.op
J6aVjTgOpRs@?5l!Zkq2AYnCE@RF$P

成功!!!

总结

关于过程,这道题6星,使用SQL注入登录无效,且完全在我的能力之外,本篇就是完全是实践笔记,也是第一个完成的6星挑战,过程比较曲折,一开始的尝试完全是猜,直到最后大多数内容都是猜,我比较讨厌猜内容,好多部分都是尝试,试试这个方法能不能爆破,试试这个密码是不是对的,即使看过wp,一些具体的操作也很难

关于解题过程,我认为密码字典的构建过程是最麻烦复杂的,字典这种东西需要日常进行积累,需要针对目标进行调整,还需要不停的猜,从12-30 长度先猜12长度,猜猜密码字符结构,并进行尝试,才有可能做出来,付出与收获可能完全不对等。

这个挑战用了一个周六和周末,也只是回归安全的康复训练而已,之后可能需要投入到到处找真实bug积累经验和直觉的过程了。

参考

使用 Hugo 构建
主题 StackJimmy 设计