WeChall - bill for Bill
Challenge
Cracking/Forensics 类(Storyline 系列),由 Z 创作。
一个叫 Bill 的人把秘密藏在加密的 KeePass 数据库里。需要从他的 Windows SAM 文件开始,走完整条攻击链才能拿到最终的答案。
1 | 给的文件: files.zip |
Solution
Step 1 — 从 SAM + SYSTEM 提取 NTLM hash
secretsdump.py(impacket 包)从 SAM + SYSTEM
离线提取本地用户的 hash:
1 | $ secretsdump.py -sam SAM -system system LOCAL |
格式:用户: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 | https://ntlm.pw/cfb69fa6cb1d792d63b02c6eefc807e5 |
离线可用 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 | import libkeepass |
KeePass 结构:
1 | Group: credit card |
四个 entry 分布在 7 个 group 中(另有空的 L1nux、M4C、Backup 组)。
关键条目:Amex 的 username 包含完整信用卡数据(格式
CC_NUMBER:VALID_FROM-EXPIRY:CVV)。
Step 4 — 提交信用卡
check_card.php 接受 POST 字段
cc(maxlength=31):
1 | $ curl -s -b 'WC=...' \ |
返回提示需要登录父亲的邮箱删除交易通知邮件,进入下一步。
Step 5 — 登录邮箱删邮件
signin.php 是一个仿 Microsoft Live ID 的钓鱼页面,POST
到 login.php。
KeePass 中 email 条目的 password 字段是空字符串——这就是密码:
1 | POST login=BillG@h0tma1l.com&passwd=&SI=Signin&LoginOptions=2 |
登录后收件箱中有一封来自 M4C 的未读邮件,checkbox 的
value="thisisit"。通过 loggedin.php?del=sel
标记删除。
至此攻击链完成:从 Windows SAM 一路走到删除银行通知邮件。
Step 6 — 提交 WeChall 答案
全部分析完成后,在主站 solution form 提交答案:
passwordsuxxSummary
完整的 Windows
凭证盗窃链:SAM+SYSTEM → NTLM hash → 密码复用 → KeePass → 敏感数据泄露 → 登录邮箱销毁证据。