线下攻防经验小结¶
首先,正常比赛会提供提交 flag 的接口,接口地址类似 http://172.16.4.1/Common/submitAnswer
。一般我们需要根据主办方给出的文档要求通过接口提交 flag。在比赛中要求接口地址使用 Post 方式提交,提交时带两个参数,一个是 Answer
,其值为获取到的 flag 字符串,而另一个则是 token
,其值为各个队伍的队伍 Token。
然后比赛时主办方也会给每个参赛队伍提供一台用于 分析网络流量的虚拟机 ,选手需要访问地址下载流量文件进行分析。
关注 Gamebox 状态¶
比赛中可以查看己方和敌方 GameBox 状态。时刻关注可以尽早获取比赛信息,根据信息做出调整。
对于己方 GameBox,有存在如下原因造成 GameBox 被 down 掉:
- 主办方裁判系统存在失误,误判 GameBox 为不可用状态。这种情况一般在比赛开始前可以发现,如果发现存在这种情况,要尽早向工作人员示意处理以减少损失。
- 程序 patch 失误导致服务不可用。在程序 patch 完之后要进入下一轮关注 GameBox 状态,如果 patch 失误导致不可用,需要及时挽救。但是也不要过度担心把原来的未修补过的漏洞程序换回去。因为 down 掉是所有队平分得很少的分,而直接上漏洞程序会使得强势的队伍直接利用得到很高的得分。所以要依据具体情况对待。
- 对手不正当攻击导致 GameBox 不可用。如果发现,需要及时补救。
- 主办方加强程序 check。这种情况主办方会对所有队员进行通知公告。在 GameBox 状态墙上的状态会显示该题的各队 GameBox 大面积不可用。
对于敌方 GameBox。我们可以获取以下信息。
- 根据攻击流观测哪些队伍的 GameBox 没有防御成功。针对这些队伍可以更多地实现攻击
- 有队伍拿出一血时。可以根据各队 GameBox 状态推断出一血队伍是否已经写出利用脚本。写出利用脚本后可以观测己方是否做好了防御。
分清区段与端口¶
比赛过程中会主办方会安排好合理的网段分布。
维护的时候需要连接到本队 GameBox 所在网段上,根据主办方提供的 CTF 账号与密码登录。而与其他队伍的 GameBox 交互时则需要连接到对应的网段里与漏洞程序进行交互。提交 flag 则需要到指定的答题平台上提交。
Warning
这里尤其需要注意的就是端口。如果端口在不轻易间弄错的话,这样的错误是挺难察觉到的,而这样的失误也会带来不必要的损失。甚至会出现长时间无法提交 flag 的致命情况。所以需要小心注意。
服务 patch 与防御¶
- 程序 patch 要合理并同时符合裁判系统 check 条件。虽然系统的 check 并未公开是 check 哪里,但是一般情况下,系统是不会过度为难的。
- 程序 patch 使用 IDA 进行修改,IDA 提供了三种方式的 patch:byte,word,assemble.其中字节码修改比较好用。因为逐字节修改不需考虑汇编指令,一般这样的修改改动也很小,在一定场合下十分好用。汇编指令级别的修改虽然方便不需要修改字节码,但是也造成了一定的不便。比如需要额外考虑汇编指令的长度,结构是否合理完整,逻辑是否和原来一样,修改的汇编指令是否合法等问题。
- 在 patch 程序时要记得备份原来的漏洞程序,以供队伍分析使用。在上传 patch 的时候应该先删除原来的漏洞程序,然后将 patch 过的程序复制进去,复制进去之后还需要给程序赋予相应的权限。
- 一般比赛中,漏洞程序会有十几处需要 patch 的地方。Patch 的时候不仅要讲究有效合理,还要满足能够在一定程度上防范或混淆对手的分析。
构造脚本框架快速展开攻击¶
在攻防比赛过程中,一血显得尤其重要。因此有一个攻击脚本框架是非常有利的。快速开发攻击脚本,可以在前期保持优势地位,也可以在不断拿分的同时省下时间去做好防御。
比赛的一些策略¶
- 在比赛过程中,不宜死耗在一道题上,由于一血的优势性,在比赛过程中更应该全面了解赛题难度,先从 简单题 开始进行分析,步步为营。
- 比赛过程中,两极会严重分化。应该着力打击和自己实力相当和比自己队伍更强的队伍,尤其是分数相差无几的情况下,更要严防严守。
- 比赛中 NPC 会不定时发出攻击流量。从攻击流量中可以得到 payload。
- 一定要把 NPC 往死里打。
- 在开赛初可以将所有的管理密码都设置为同一个密码,这样方便队员登录管理。在初期将所有文件备份下来供队内分享。