🛡️ 安全实验室

像素街机配套靶场 · 仅供授权学习环境使用 · 服务器代码见仓库 server/ 目录

使用方式

本页是靶场控制台。漏洞接口只存在于配套的本地靶场服务器上(node server/server.js,默认 http://127.0.0.1:8420), 静态托管(GitHub Pages / Cloudflare Pages)上没有这些接口。

演练方法:先自己攻击下面的接口,再打开服务器控制台 / server/logs/access.log,对照每个模块的"检测线索"在日志里找到自己的攻击痕迹。

① 反射型 XSS — /lab/xss?q=

搜索词直接回显进 HTML,未转义。

curl "http://127.0.0.1:8420/lab/xss?q=<script>alert(1)</script>"
检测线索:日志里 q= 参数出现 %3Cscriptalert(onerror=%3Cimg 等编码/明文注入特征。

② 路径穿越 — /lab/file?name=

文件下载接口用 path.join(root, name) 拼接且未校验边界。

curl "http://127.0.0.1:8420/lab/file?name=../../server.js"
检测线索:日志 URL 中出现 ..%2F..\\etc%2Fpasswd 等穿越特征;同一 IP 短时间大量 404/500 后紧跟 200。

③ IDOR 越权 — /lab/user?id=

用户资料接口不校验调用者身份,可横向枚举任意用户。

curl "http://127.0.0.1:8420/lab/user?id=1"
检测线索:同一 IP 对 /lab/userid=1,2,3,4… 连续递增请求(枚举速率远超人类)。

④ 开放重定向 — /lab/go?url=

跳转地址完全由参数控制,可用于钓鱼跳板。

curl -i "http://127.0.0.1:8420/lab/go?url=https://evil.example"
检测线索:日志中 /lab/go?url= 后跟非本站域名(http%3A%2F%2F 且非白名单)。

⑤ 弱会话 + 破损访问控制 — /lab/login、/lab/admin

会话令牌是 md5(用户名+固定盐) 可离线伪造;/lab/admin 只检查客户端 Cookie role,改 Cookie 即提权。

curl -i -X POST -d "user=bob&pass=bob123" http://127.0.0.1:8420/lab/login
# 拿到 Cookie 后改 role=user → role=admin 再访问 /lab/admin
检测线索:单 IP 对 /lab/login 的高频 POST(爆破);/lab/admin 的访问来自非 admin 会话;同 IP 多账号交替登录。

⑥ 存储型 XSS — /lab/comment

留言不转义存入内存,所有后续访客都会执行(重启即清空,无真实危害)。

curl -X POST -d "text=<script>alert(1)</script>" http://127.0.0.1:8420/lab/comment
检测线索:/lab/comment 的 POST body 含 %3Cscript / onerror;随后大量 GET /lab/comment(受害者被引爆)。

⑦ Referer 防外链 — /roms/*

靶场服务器对 /roms/ 目录做 Referer 校验:外站引用返回 403 并在日志标记 [HOTLINK]

curl -i -H "Referer: https://evil.example/" "http://127.0.0.1:8420/roms/test.nes"   # 403
curl -i "http://127.0.0.1:8420/roms/test.nes"                                        # 空 Referer 按配置放行
检测线索:日志 [HOTLINK] 标记集中出现 = 你的资源被人盗链。

⚠️ 本靶场只允许在 127.0.0.1 或你完全拥有的服务器上运行。所有数据存于内存,重启即清空;不含任何出站请求,不会被用作攻击跳板。请勿将其部署到公网不加防护。