本地靶场搭建与复现步骤预测

17 人参与

前几天我在家里把一台老旧的树莓派翻出来,想给自己练手的CTF队伍装一个本地靶场。说实话,刚开始的时候我还以为只要装几个Docker镜像就能搞定,结果却像在拼装乐高——每块都得对位、每根线都得插对。

搭建前的准备

我先把树莓派刷上最新版的Raspberry Pi OS,顺手把SSH打开,免得每次要拔键盘。然后在本地网络里跑了个arp-scan,把所有活跃的IP扫了一遍,确认目标机器的IP是192.168.1.102,这一步其实比我想象的省了不少时间。

一步步搭建靶场

  • 在树莓派上装Docker,curl -sSL https://get.docker.com | sh,几分钟搞定。
  • 拉取常用的漏洞镜像,例如vulnbox/webgoatvulnbox/juicyshop,每个镜像都配好端口映射。
  • 写一个docker-compose.yml,把所有容器编排在一起,顺手加了个restart: always防止意外掉线。
  • 启动容器后,用nmap -sC -sV 192.168.1.102确认服务是否暴露,发现Webgoat的8080端口竟然直接响应了默认页面。
  • 把靶场的源码目录挂载到宿主机,方便随时修改题目或加入新的漏洞。

复现过程中的小坑

复现一个已知的SQL注入时,我本来打算直接用sqlmap跑,却被容器内部的防火墙拦住了。翻看Docker的网络设置后,我把network_mode: "host"改成了桥接模式,并在iptables里打开了3306端口,问题瞬间消失。还有一次,我忘记给容器加上--cap-add=NET_ADMIN,导致在尝试抓包时提示权限不足,结果只好重新部署一次。

# 示例:启动带调试权限的容器
docker run -d --name juicyshop 
    --cap-add=NET_ADMIN 
    -p 8081:8080 
    vulnbox/juicyshop

预测下一步的演进

站在现在的角度,我觉得本地靶场的下一个趋势会是“自动化题目生成”。如果把每个漏洞的PoC包装成一个可调用的函数,配合CI流水线,直接在提交代码时生成对应的挑战环境,整个复现链路会像玩游戏一样流畅。再配上Prometheus监控容器的CPU、内存使用情况,甚至还能把选手的解题时间做成排行榜,想想就有点小激动。

参与讨论

17 条评论
  • 寂寞的沙漠

    端口映射那块儿老出幺蛾子

    回复
  • 夜莺吟者

    host模式改桥接,折腾半天233

    回复
  • 云归岫

    镜像拉取慢死了,换源没?

    回复
  • 野路子

    这种本地环境对新手友好吗

    回复
  • 玄鸟使

    之前搞过类似的,权限问题确实烦

    回复
  • 更夫朱

    监控加排行榜,想法不错啊

    回复
  • 黄粱一梦

    sqlmap直接跑不了可太真实了

    回复
  • 风中的足迹

    老设备废物利用,可以可以

    回复
  • 时空行者

    docker-compose写起来费劲不

    回复
  • 发呆的黄瓜

    配置iptables的步骤能细说吗

    回复
  • EchoOfTheDeep

    prometheus监控这玩意儿有用?

    回复
  • 宇宙之歌

    8080端口直接能访问,安全吗

    回复
  • 残月行者

    下次试试用旧笔记本,性能可能更好

    回复
  • 月下白鹭

    树莓派做靶场,真有你的

    回复
  • 阳关故人

    老哥这动手能力可以啊

    回复
  • 月光女神

    挂载源码目录这步挺实用

    回复
    1. 枫少@KillBoy (作者)

      @ 月光女神 挂出来改题方便多了,省得老进容器

      回复