【juice-shop】★★★★ Easter Egg && Nested Easter Egg:Null Byte 注入与多层加密解析
Part 1 - Easter Egg
任务简报
🎯 挑战目标
找到隐藏的复活节彩蛋。
💡 官方提示 (Hints)
1. 若你已破解四项文件访问挑战中的任意一项,便已知晓彩蛋的藏匿之处。
2. 只需重复使用对上述文件已奏效的技巧即可。
实战:复现漏洞
步骤1:访问 FTP 目录
访问应用暴露的 FTP 目录:
1
|
http://127.0.0.1:3000/ftp/
|
在目录列表中发现隐藏的彩蛋文件 eastere.gg。

步骤2:使用 Null Byte 注入绕过访问限制
直接访问该文件会返回 403,在文件名后添加 %2500.md 进行 Null Byte 注入:
1
|
http://127.0.0.1:3000/ftp/eastere.gg%2500.md
|
Payload 说明:
| 部分 |
说明 |
eastere.gg |
目标文件名 |
%25 |
URL 编码的 % |
00 |
空字节的十六进制表示 |
.md |
绕过扩展名检查的白名单后缀 |
解码流程:
1
2
3
4
|
%2500 → 第一次解码 → %00 → 第二次解码 → \0(空字节)
服务器检查: eastere.gg\0.md → 以 .md 结尾 ✅ 通过检查
文件系统: eastere.gg\0.md → 在 \0 处截断 → eastere.gg ✅ 读取文件
|
结果: 成功下载 eastere.gg 文件,Part 1 挑战完成!🎉
还有第二关?
Part 2 - Nested Easter Egg
任务简报
🎯 挑战目标
使用一些高级加密分析来找到真正的复活节彩蛋。
💡 官方提示 (Hints)
1. 为了应对这一挑战,您可能必须绕过几层"意志坚定"的加密手段。
2. 请务必先解决"寻找隐藏彩蛋"的任务。
3. 为了应对这一挑战,您可能必须绕过几层"意志坚定"的加密手段。
实战:复现漏洞
步骤1:分析 eastere.gg 文件内容
下载的文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
"恭喜,你找到了彩蛋!"
- 极其幽默的开发者
...
...
...
哦等等,这根本不是彩蛋!这只是个无聊的文本文件!真正的彩蛋在这里:
L2d1ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9uYS9ybmZncmUvcnR0L2p2Z3V2YS9ndXIvcm5mZ3JlL3J0dA==
祝你好运,彩蛋猎人!%
|

关键发现: 文件末尾包含一段 Base64 编码的字符串。
步骤2:Base64 解码
1
|
echo "L2d1ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9uYS9ybmZncmUvcnR0L2p2Z3V2YS9ndXIvcm5mZ3JlL3J0dA==" | base64 -d
|
解码结果:
1
|
/gur/qrif/ner/fb/shaal/gurl/uvq/na/rnfgre/rtt/jvguva/gur/rnfgre/rtt
|
发现: 解码后的内容看起来像一个 URL 路径,但字母被替换了,疑似 ROT13 加密。
步骤3:ROT13 解密
1
|
echo "/gur/qrif/ner/fb/shaal/gurl/uvq/na/rnfgre/rtt/jvguva/gur/rnfgre/rtt" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
|
解密结果:
1
|
/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg
|
步骤4:访问真正的彩蛋
1
|
http://127.0.0.1:3000/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg
|
结果: 找到真正的彩蛋,Part 2 挑战完成!🎉
解密流程总结
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
┌─────────────────────────────────────────────────────────┐
│ 原始内容(eastere.gg 文件末尾) │
│ L2d1ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9u... │
└──────────────────┬──────────────────────────────────────┘
│ Base64 解码
┌──────────────────▼──────────────────────────────────────┐
│ 第一层解密结果 │
│ /gur/qrif/ner/fb/shaal/gurl/uvq/na/rnfgre/rtt/... │
└──────────────────┬──────────────────────────────────────┘
│ ROT13 解密
┌──────────────────▼──────────────────────────────────────┐
│ 第二层解密结果 │
│ /the/devs/are/so/funny/they/hid/an/easter/egg/... │
└──────────────────┬──────────────────────────────────────┘
│ 访问 URL
┌──────────────────▼──────────────────────────────────────┐
│ 找到真正的彩蛋! │
│ http://127.0.0.1:3000/the/devs/are/so/funny/... │
└─────────────────────────────────────────────────────────┘
|
关键操作说明
Base64 编码
1
2
3
|
特点:将二进制数据编码为可打印的 ASCII 字符
识别:字符串末尾通常有 = 或 == 填充
解码:echo "..." | base64 -d
|
ROT13 加密
1
2
3
4
5
6
7
8
|
特点:将字母表中每个字母替换为其后第 13 个字母
识别:文本看起来像英文但无法阅读
解密:echo "..." | tr 'A-Za-z' 'N-ZA-Mn-za-m'
示例:
A → N N → A
B → O O → B
g → t t → g
|
参考资源