CTF是怎么出题的?关于今年 D^3CTF 的 OSPF Enhanced
前言 今年给 D^3CTF 出了一道 Web 一道 Misc,非常可惜都TMD有非预期,出的最差的一回了。 Web 那道题暂且不提,那道题在出题角度来说其实没有任何难度,只是把原项目的Docker镜像稍微重打包了一下交给平台。 今给大伙讲讲我们这道 Misc 网络题,这道题前前后后打包容器和平台联调等等,非常有难度,可能耗费了我将近一周的时间。 早期构思 其实一早就定下了出一道网络相关的 Misc 题的基调,问题在于具体整点什么活上去比较有意思。 早先 D^3 CTF 出过一道网络相关的 Misc 赛题,原题叫 O!!!SPF!!!!!! 那道题非常简单,只需连上 OSPF 就可以拿到 flag 了,没有什么难度。 Soha 每年都会出一些网络相关的新年红包,他的题目也是遵循 CTF 的形式的,所以也在我的参考范围之内。 翻阅了很多,决定题目主体就出一个路由劫持,具体劫持的手法来源于一次真实路由劫持,不过那次环境比较复杂没通,但是我觉得这个思路还可以再利用,就只能出成题这样分享一下。 此外,Potat0 还给我提供了一个 rDNS 的小 trick,作为套娃的一部分,这个 trick 也成为了题目的一部分。为了防止选手写了一坨脚本打完卡在这个 trick 上,因此还设计将这个 trick 前置了一下。 开始出题吧 出一道这样的网络题和传统 CTF 题目不一样,他需要去模拟一个网络环境,首先在本地测试的时候,最容易想到的就是 docker compose,可以添加几个 network,然后将他们绑定到容器上构建一些内网出来。 我们大概需要一个这样子的内网环境,简单来说就是三个设备其中一个是路由器,负责两个内网的路由,openvpn 从这里接入并且桥接到 100.64.11.0/24 上。 好吧那就开工吧,把这个网络拓扑写进 docker compose 以下 docker compose 并非最终版本,有意留下了一些错误,后文会纠正 version: '3' name: ospf-enhanced services: router: image: router build: ....