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

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

## 0x01 任务简报

<blockquote style="border-left: 5px solid #6f42c1; background-color: #f5f3ff; padding: 20px; margin: 1.5rem 0; color: #5521b5; line-height: 1.8; border-radius: 0 5px 5px 0;">
<div style="font-weight: bold; font-size: 1.1rem; margin-bottom: 10px; display: flex; align-items: center;">
<span style="margin-right: 8px;">💡</span> 提示 (Hints)
</div>
1. 这一挑战的根本原因是人为错误远远多于技术缺陷。<br>
2. 支持团队位于低成本国家，且团队结构波动剧烈——员工们稍有机会获得薪资稍高的职位就会离职。<br>
3. 为防止滥用，支持团队账户本身的密码实际上非常强。<br>
4. 为便于事件发生时快速响应，支持团队采用第三方工具，所有支持工程师均可通过该工具获取当前账户密码。<br>
5. 虽然也可以通过 SQL 注入以支持团队身份登录，但这无法解决该挑战。
</blockquote>

---
# Login Support Team

首先我们到 http://127.0.0.1:3000/ftp/ ，下载 `incident-support.kdbx` 文件（我直接点击文件进行下载的，似乎没有副作用？）

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260412013701.png)

处理文件

```sh
❯ john --format=KeePass --wordlist=/usr/share/wordlists/rockyou.txt ./support.txt
```

```sh
❯ 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，

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260412015536.png)

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260412015723.png)
依旧无果

.kdbx 是 KeePass 的文件后缀

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

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/F285C3472CD855B2EC286E4FB77A7D06.jpg)

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260412023128.png)

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260412133925.png)

一夜过去了没有破解

看来是密码本有一点问题

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

**那行注释**

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

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260412220451.png)

这里疑似是密码生成方式

```
/(?=.*[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 位，仅允许这些字符 |

这个要求生成命令如下

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

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

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

- Login@@@@@@@
- Support@@@@@@
- Team@@@@@@@@@

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

```sh
crunch 12 12 '0123456789@$!%*?&' -t 'Login@@@@@@@' > passwords.txt
```

```sh
crunch 12 12 '0123456789@$!%*?&' -t 'Support@@@@@' > passwords.txt
```

```sh
crunch 12 12 '0123456789@$!%*?&' -t 'Team@@@@@@@@' > passwords.txt
```

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

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

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

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

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


![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260413001450.png)

得到密码`Support2022!`进行登录

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260413002940.png)

![](../../../../../../public/p/juice-shop-login-support-team通过-keepass-字典爆破获取密码/assets/Pastedimage20260413003521.png)

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

回到网页尝试登录 

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

成功！！！
## 总结

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

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

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

## 参考

- https://curiositykillscolby.com/2020/12/06/pwning-owasps-juice-shop-pt-41-login-support-team/
- https://www.youtube.com/watch?v=s-aynKnUJZ8
- https://github.com/Whyiest/Juice-Shop-Write-up/blob/main/6-stars/login_support_team.md

