WeChall - Training - GPG

Challenge

为 WeChall 邮件设置 GPG 加密,然后解密邮件获取答案。

挑战页面提示需要配置 GPG 公钥到账户,然后触发一封加密邮件发送到注册邮箱,解密即可拿到 flag。

Solution

Step 1: 检查本地是否已有 GPG 密钥,没有则生成:

1
2
$ gpg --list-keys
$ gpg --list-secret-keys

如果已有可用密钥(secssb 不带 #)可跳过生成。否则:

1
2
3
4
5
6
7
8
$ gpg --batch --gen-key <<EOF
Key-Type: RSA
Key-Length: 2048
Name-Real: WeChall GPG
Name-Email: wechall-gpg@example.com
Expire-Date: 0
%no-protection
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----- 头尾