WeChall - bill for Bill

Challenge

Cracking/Forensics 类(Storyline 系列),由 Z 创作。

一个叫 Bill 的人把秘密藏在加密的 KeePass 数据库里。需要从他的 Windows SAM 文件开始,走完整条攻击链才能拿到最终的答案。

1
2
3
4
给的文件: files.zip
├── SAM # Windows SAM (Security Account Manager)
├── system # SYSTEM registry hive(对应加密的 boot key)
└── keepass.kdb # KeePass 1.x KDB 格式

Solution

Step 1 — 从 SAM + SYSTEM 提取 NTLM hash

secretsdump.py(impacket 包)从 SAM + SYSTEM 离线提取本地用户的 hash:

1
2
3
4
5
6
$ secretsdump.py -sam SAM -system system LOCAL
Impacket v0.12.0 - Copyright 2023 Fortra

[*] Target system bootKey: 0xac285427313a1c9a8dc2e8b3421a2e22
[*] Dumping local SAM hashes:
Bill:500:7f4ac180230c769790d3d8ad454f5167:cfb69fa6cb1d792d63b02c6eefc807e5:::

格式:用户:RID:LM_HASH:NTLM_HASH::: NTLM hash(第二个 32 hex)是 cfb69fa6cb1d792d63b02c6eefc807e5

LM hash 7f4ac180230c769790d3d8ad454f5167 非空(非 aad3b4...),说明密码 >= 8 字符,可以用 Ophcrack + rainbow table 破解。但走 NTLM 更直接。

Step 2 — 破解 NTLM hash

在线 NTLM 查询 ntlm.pw

1
2
https://ntlm.pw/cfb69fa6cb1d792d63b02c6eefc807e5
→ W3cH4112u1Z99

离线可用 john + rockyou 或 hashcat。

Windows 密码: W3cH4112u1Z99

index2.php 有一段 substitution cipher 隐藏 hint,解码后提示用 Ophcrack + ~380MB rainbow table 破解 LM hash,但 NTLM 在线查表更快,结果一致(LM 大写版 W3CH4112U1Z99 无额外信息)。

Step 3 — 解密 KeePass

剧情设计上 Bill 是密码复用受害者——KeePass 密码 == Windows 密码。

keepass.kdb 是 KeePass 1.x KDB 格式(非 KDBX),AES-256-CBC 加密。Python 库 pykeepass 只支持 KDBX,需用 libkeepass

1
$ pip install libkeepass
1
2
3
4
5
6
7
8
9
import libkeepass

with libkeepass.open('keepass.kdb', password='W3cH4112u1Z99') as db:
for entry in db.entries:
print(f"Group: {entry['group']}")
print(f" Title: {entry['title']}")
print(f" Username: {entry['username']}")
print(f" Password: {entry['password']}")
print()

KeePass 结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Group: credit card
Title: Amex
Username: 371234567895006:08/05-18/05:562
Password:

Group: Personal
Title: Personal data
Username: William Henry Gates III
Password:

Group: W1nd0ws
Title: My home w1n box
Username: Bill
Password: W3cH4112u1Z99

Group: eMail
Title: My hotmail account
Username: BillG@h0tma1l.com
Password: ← 空字符串,这就是密码

四个 entry 分布在 7 个 group 中(另有空的 L1nux、M4C、Backup 组)。

关键条目:Amex 的 username 包含完整信用卡数据(格式 CC_NUMBER:VALID_FROM-EXPIRY:CVV)。

Step 4 — 提交信用卡

check_card.php 接受 POST 字段 cc(maxlength=31):

1
2
3
$ curl -s -b 'WC=...' \
--data-urlencode 'cc=371234567895006:08/05-18/05:562' \
'https://www.wechall.net/challenge/Z/bill_for_bill/check_card.php'
371234567895006:08/05-18/05:562

返回提示需要登录父亲的邮箱删除交易通知邮件,进入下一步。

Step 5 — 登录邮箱删邮件

signin.php 是一个仿 Microsoft Live ID 的钓鱼页面,POST 到 login.php

KeePass 中 email 条目的 password 字段是空字符串——这就是密码:

1
2
POST login=BillG@h0tma1l.com&passwd=&SI=Signin&LoginOptions=2
→ 302 Redirect → loggedin.php

登录后收件箱中有一封来自 M4C 的未读邮件,checkbox 的 value="thisisit"。通过 loggedin.php?del=sel 标记删除。

至此攻击链完成:从 Windows SAM 一路走到删除银行通知邮件。

Step 6 — 提交 WeChall 答案

全部分析完成后,在主站 solution form 提交答案:

passwordsuxx

Summary

完整的 Windows 凭证盗窃链:SAM+SYSTEM → NTLM hash → 密码复用 → KeePass → 敏感数据泄露 → 登录邮箱销毁证据