介绍
商店从预配置目录导入商品图片。浏览器要求应用抓取图片,而应用拥有购物者不具备的网络访问权限。你将追踪真实请求,并检查无害的内部状态记录,理解服务端请求伪造(SSRF)。
仅使用提供的训练 URL。组织和内部数据均为合成数据。掌握基本终端操作即可:课程会解释 HTTP、URL 字段、网络角色和重定向。容器具有独立网络命名空间,但共享实例内核。
导入普通商品图片
本步骤将导入真实图片,并识别抓取图片的服务器。切换到 Image Importer 标签页。表单将 URL 发送给运行图片功能的服务器 App。URL 是地址:http 是协议(scheme),catalog.test 是主机名,8000 是监听端口,/leaf.png 是资源路径。
在实验界面选择 Image Importer 标签页,开始本步骤。
保持 Image URL 为 http://catalog.test:8000/leaf.png,Import slot 为 normal,点击 Import image。Import result 页面显示真实 HTTP 状态和 JSON 对象,即由命名字段组成的响应。找到 content_type: image/png 和表示抓取字节指纹的哈希值。body 字段包含编码后的图片字节,无需编辑或解码。

在同一标签页选择 Back to Image Importer(或使用浏览器返回按钮),然后刷新页面。Imported responses 下应出现绿色图片。若没有,请检查 URL 与槽位拼写后再次提交。

切换到 Workstation 标签页。这是客户端容器终端。预置的 imagectl.py 向 App 发请求,python3 运行该程序。show normal 读取已有导入,不再次抓取:
运行以下命令前,请切换到 Workstation 标签页。
python3 imagectl.py show normal
关注 HTTP 200、session: learner-c08 和 PNG image content。HTTP 是请求/响应协议;200 表示请求成功。现在阅读 Catalog 的真实请求记录:
python3 imagectl.py requests
每条记录包含 client 地址和请求的 path。Catalog 看到的是 App 在目录网络上的地址,而非 Workstation 或浏览器。发起出站请求的是 App。变化的地址来自真实服务,无需记忆固定值。切换到 Topology 标签页,比较配置的网络连接以及内部消费者的实时健康探测。

比较客户端和服务器的可达性
本步骤仅通过 App 获取预置的内部库存状态。内部服务可通过应用组件专用网络访问。Workstation 仅连接前端网络,App 还连接内部网络。localhost 始终指执行命令的环境:Workstation 的回环地址并非 App 的回环地址。
在实验界面选择 Workstation 标签页,开始本步骤。
先从 Workstation 直接请求。辅助程序会显示预期失败,而不终止 shell:
运行以下命令前,请切换到 Workstation 标签页。
python3 imagectl.py direct http://internal.test:8000/status
预期出现 UNREACHABLE from Workstation。该容器无法解析此主机名,网络还隔离了底层地址,因此不只是名称缺失。现在让 App 抓取相同资源。fetch 执行导入,最后一个参数指定保存响应的槽位:
python3 imagectl.py fetch http://internal.test:8000/status internal
预期出现 HTTP 200,以及包含 service: inventory、status: synthetic-ready 和变化的 training_id 的 JSON 正文。再次读取导入响应:
python3 imagectl.py show internal
记录属于 learner-c08。这就是 SSRF:客户端控制的输入让服务器使用自己的网络访问权限。Workstation 并未获得新的网络连接。若出现 no import,请使用 internal 槽位重试;只有当前虚拟机的合成记录才相关。
跟随目录的重定向
本步骤说明为何仅检查第一个目标可能不够。重定向是要求客户端请求另一个 URL 的 HTTP 响应。本目录的 /redirect 路由返回 302,其 Location 指向同一个合成库存服务。有漏洞的 App 会自动跟随。
在实验界面选择 Workstation 标签页,开始本步骤。
在 Workstation 标签页中将预置路由导入独立槽位:
运行以下命令前,请切换到 Workstation 标签页。
python3 imagectl.py fetch http://catalog.test:8000/redirect redirect
响应的 url 指向 Catalog,而 final_url 指向 Internal。正文是当前合成库存状态,并非图片。检查保存的响应和目录日志:
python3 imagectl.py show redirect
python3 imagectl.py requests
Catalog 记录了 /redirect,随后 App 利用另一个网络抓取 Internal。起始主机可信,不代表后续目标可信。下一实验从独立环境开始,修复目标选择和是否跟随重定向这两项决策。本受控练习不测试恶意 DNS 变化、任意互联网图片源或其他地址编码。
总结
你导入了真实图片,比较了客户端与服务器的可达性,并检查了真实的重定向响应。内部数据是合成的;网络请求是真实的。



