WeChall - Training - GPG
Challenge
为 WeChall 邮件设置 GPG 加密,然后解密邮件获取答案。
挑战页面提示需要配置 GPG 公钥到账户,然后触发一封加密邮件发送到注册邮箱,解密即可拿到 flag。
Solution
Step 1: 检查本地是否已有 GPG 密钥,没有则生成:
1 | $ gpg --list-keys |
如果已有可用密钥(sec 或 ssb 不带
#)可跳过生成。否则:
1 | $ gpg --batch --gen-key <<EOF |
--batch 模式避免交互式确认,%no-protection
跳过 passphrase(CTF 环境不需要安全性)。
Step 2: 导出公钥并上传到 WeChall 账户设置:
1 | $ gpg --armor --export wechall-gpg@example.com > /tmp/wechall-pubkey.asc |
将公钥粘贴到 https://www.wechall.net/en/account 的 GPG 设置区域,点击 "Upload Key"。
注意: WeChall 表单包含一个隐藏的 CSRF
token(gwf3_csrf),用于防伪造请求。上传公钥时必须先 GET
页面拿到 token,再用同一个 cookie POST 提交,否则会被拒绝。
Step 3: 访问挑战页面,点击 "Send me encrypted mail please"。WeChall 会用刚上传的公钥加密一封邮件发送到注册邮箱。如果报错 "Please enable GPG encryption in your account settings",说明 key 未成功保存,回到 Step 2 重试。
Step 4: 收到的邮件是一段 PGP 加密块,保存为本地文件后解密:
1 | $ gpg --decrypt /tmp/wechall_gpg.txt |
GPG 会用对应的私钥自动匹配解密,输出明文内容。
ROIIGDGILMAS关键点:
- GPG 流程: 生成密钥 → 上传公钥 → 对方用公钥加密 → 本地用私钥解密
- WeChall 要求 RSA 密钥,2048 位足够
--armor输出 ASCII 格式,方便复制粘贴到网页表单- 私钥留在本地 keyring,
gpg --decrypt自动匹配 - 加密邮件内容是 PGP MESSAGE block,注意保留完整的
-----BEGIN PGP MESSAGE-----到-----END PGP MESSAGE-----头尾