xss-labs Level14 代码审计报告
目标文件:
level14.php| 问题类型: 嵌入不可信第三方站点(iframe)+ 明文 HTTP 引入 | CWE: CWE-829(含不可信组件的功能)/ CWE-614? → 主要 CWE-829、CWE-311(明文传输) | 危害等级: 低-中(无直接代码注入点)
说明: 本关不反射任何用户输入,本身无可直接利用的注入点;但存在架构性风险,按代码审计要求一并报告。
一、问题代码定位
level14.php 第 8 行:
<center><iframe name="leftframe" marginwidth=10 marginheight=10
src="http://www.exifviewer.org/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center>
<center>这关成功后不会自动跳转。成功者<a href=/xss/level15.php?src=1.gif>点我进level15</a></center>
问题点: L8 硬编码内嵌第三方站点 http://www.exifviewer.org/。
二、问题原理
- 页面把外部第三方域名(
exifviewer.org)用 iframe 直接内嵌进来,且使用明文http://。 - 本关教学意图: 借助第三方"EXIF 信息查看器"网站本身的历史 XSS 漏洞过关(该站点面向"上传图片 → 解析 EXIF",历史上存在 XSS),因此攻击面在被内嵌的第三方站点,而非本页代码。
- 从审计角度,本关暴露的风险:
- 不可信外部内容进入可信页面(CWE-829): 若第三方站点被攻陷或变卖,可在受害者打开本页面时,在被嵌入的 iframe 内展示钓鱼/恶意内容;跨站脚本若发生在 iframe 内,仍可影响同源外层页面(取决于浏览器策略)。
- 明文 HTTP(CWE-311/319): 页面与第三方通信可被中间人篡改。
- 外链
/xss/level15.php为绝对路径硬编码,部署目录变化即失效(可用性问题,非安全)。
三、利用方式与 Yakit 可重放数据包
本关无注入 payload。Yakit 中可直接对页面做基线探测,确认无反射点:
GET /level14.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0
Accept: text/html
Connection: close
验证结论: 响应中除 iframe 引入的外部 URL 外,无任何用户可控回显;直接参数注入无效。其"利用"依赖第三方站点的 XSS(不属于本仓库代码),此处不展开。
四、修复建议
// 1. 移除对外部不可信站点的 iframe 依赖(根本修复)
// 如需"查看图片 EXIF"功能,改为自建 / 后端解析,输出纯文本并编码;
// 2. 若确实需要嵌入,仅允许业务自控域,并升级为 https:
<iframe src="https://exif.example.com/" ...></iframe>
// 3. 加 CSP 限制 iframe 可加载的来源:
// Content-Security-Policy: frame-src 'self' https://exif.example.com;
// 4. 外链改为相对路径或可配置项,避免硬编码绝对路径。
要点:
- 优先本地化/后端化第三方功能,减少对不可信域的运行时依赖。
- 若必须嵌入,使用 HTTPS、CSP
frame-src白名单、X-Frame-Options配套策略。 - 链接路径使用相对路径或配置化。
五、备注
- 审计定性: 本关更接近"教学演示第三方依赖风险"而非代码注入漏洞;实际危害取决于第三方站点状态。
- 通用教训: 不要在可信页面里信任/内嵌第三方 iframe 内容,并警惕明文 HTTP 引入的中间人风险。
正文完