【juice-shop】★ Missing Encoding:消失的图片
0x01 任务简报
💡 核心线索 (Hints)
- 在照片墙中找一张无法正常加载的图片。
- 你只需(字面意义上)检查问题就能看出症结所在。
- 试着点击该条目的推文按钮,观察一下效果。
🎓 实战动作 (Action)• 目标:照片墙里那张加载失败的图片。
• 工具:浏览器开发者工具(F12)。
• 操作:找到图片的真实 URL,手动修复特殊字符后直接访问。
0x02 实战:复现漏洞
1. 发现异常
打开照片墙,发现一个图片位置空白,没有加载出来:

2. 检查病灶
打开开发者工具,查看该图片的 src 地址,问题一目了然——URL 没有做任何转义:

3. 分析原因
原始图片链接是:
|
|
关键知识点:
#在 URL 中是锚点符号(fragment identifier),浏览器遇到第一个#就会截断,后面的内容根本不会发送给服务器。
所以服务器实际收到的请求只有:
|
|
文件名后半段全部丢失,自然找不到图片。
4. 修复并验证
将 # 替换为其 URL 编码形式 %23,手动访问修复后的地址:
|
|
图片成功加载,挑战完成 ✓

0x03 知识延伸
为什么叫"Missing Encoding"?
这类漏洞的根源是:程序在把用户数据(文件名、输入内容等)拼接进 URL 时,忘记对特殊字符进行编码。常见的危险字符包括:
| 字符 | URL 编码 | 含义 |
|---|---|---|
# |
%23 |
锚点,浏览器截断标志 |
? |
%3F |
查询参数开始 |
& |
%26 |
参数分隔符 |
空格 |
%20 或 + |
空格 |
在代码里怎么正确处理?
|
|