ctf靶场搭建
作者:探索 来源:百科 浏览: 【大 中 小】 发布时间:2026-10-17 06:21:59 评论数:
装CTF靶场这事,场搭最怕一上来就翻教程。场搭我见过太多人照着博客敲命令,场搭结果卡在Docker网络那一步,场搭两天没动静。场搭其实核心就一句话:靶场不是场搭"装"出来的,是场搭"拼"出来的——你需要的每个漏洞环境都是独立容器,它们之间靠网络规则串起来。场搭
先说最省事的场搭方案。Ubuntu 20.04装Docker,场搭一行命令搞定:
curl -fsSL https://get.docker.com | bash 别用CentOS 7,场搭它的场搭内核太老,很多靶场镜像跑不起来。场搭我试过用CentOS 7搭Pikachu,场搭MySQL容器反复重启,场搭换Ubuntu后一次通过。系统选对了,后面省一半时间。
拉靶场镜像有个坑。比如Vulhub,直接git clone下来,进到对应目录执行docker-compose up -d就行。但有些镜像默认监听127.0.0.1,外部访问不了。改法很简单,在docker-compose.yml里找ports字段,把127.0.0.1:8080:80改成8080:80。这个细节教程很少提,但卡住过不少人。
网络隔离必须做。我习惯用Docker的--internal网络建一个ctf-net,靶场容器全丢进去,攻击机单独接一个nat网络。这样即使靶场被拿shell,也跳不到宿主机。命令不复杂:
docker network create --internal ctf-net docker network create ctf-nat 然后启动容器时用--network ctf-net指定。攻击机(比如Kali)接ctf-nat,再加一条路由规则指向ctf-net的网关。这一步不做,比赛时别人一个反弹shell就能扫你内网。
Web靶场推荐三个:DVWA、Pikachu、SQLi-Labs。DVWA要手动改config.inc.php里的数据库密码,默认是p@ssw0rd,但有些镜像改成root了。Pikachu的安装向导有个坑——它检测install目录是否存在,装完必须手动删掉,否则一直提示重装。SQLi-Labs最简单,拉起来就能用,但注意它的sql-connections目录里数据库配置写死了localhost,容器内没问题,跨容器访问要改。
CTF靶场不只是Web。Pwn题需要pwnable环境,推荐用ubuntu:20.04基础镜像自己装pwntools和gdbserver。别用现成的ctf-pwn镜像,很多带后门。我审计过一个热门镜像,/tmp下藏了个反向shell脚本,定时任务每分钟执行一次。自己搭虽然慢,但干净。
流量分析题用tcpdump加tcpreplay就够了。把pcap文件挂载到容器里,起个nginx提供下载,选手自己分析。别搞太复杂,有人用Elasticsearch做流量检索,结果内存吃满,靶场直接崩了。
最后说个真实教训。有次比赛前夜,我图省事用了某大佬的all-in-one靶场脚本,结果它把宿主机iptables规则全清了。第二天选手连不上平台,查了三小时才发现是脚本里一句iptables -F。所以,任何自动化脚本,跑之前先cat一遍。靶场搭建没有银弹,每个容器都自己起,虽然慢,但你知道它到底在干什么。
