跳转至

線下攻防經驗小結

首先,正常比賽會提供提交 flag 的接口,接口地址類似 http://172.16.4.1/Common/submitAnswer。一般我們需要根據主辦方給出的文檔要求通過接口提交 flag。在比賽中要求接口地址使用 Post 方式提交,提交時帶兩個參數,一個是 Answer,其值爲獲取到的 flag 字符串,而另一個則是 token ,其值爲各個隊伍的隊伍 Token。

然後比賽時主辦方也會給每個參賽隊伍提供一臺用於 分析網絡流量的虛擬機 ,選手需要訪問地址下載流量文件進行分析。

關注 Gamebox 狀態

比賽中可以查看己方和敵方 GameBox 狀態。時刻關注可以儘早獲取比賽信息,根據信息做出調整。

對於己方 GameBox,有存在如下原因造成 GameBox 被 down 掉:

  1. 主辦方裁判系統存在失誤,誤判 GameBox 爲不可用狀態。這種情況一般在比賽開始前可以發現,如果發現存在這種情況,要儘早向工作人員示意處理以減少損失。
  2. 程序 patch 失誤導致服務不可用。在程序 patch 完之後要進入下一輪關注 GameBox 狀態,如果 patch 失誤導致不可用,需要及時挽救。但是也不要過度擔心把原來的未修補過的漏洞程序換回去。因爲 down 掉是所有隊平分得很少的分,而直接上漏洞程序會使得強勢的隊伍直接利用得到很高的得分。所以要依據具體情況對待。
  3. 對手不正當攻擊導致 GameBox 不可用。如果發現,需要及時補救。
  4. 主辦方加強程序 check。這種情況主辦方會對所有隊員進行通知公告。在 GameBox 狀態牆上的狀態會顯示該題的各隊 GameBox 大面積不可用。

對於敵方 GameBox。我們可以獲取以下信息。

  1. 根據攻擊流觀測哪些隊伍的 GameBox 沒有防禦成功。針對這些隊伍可以更多地實現攻擊
  2. 有隊伍拿出一血時。可以根據各隊 GameBox 狀態推斷出一血隊伍是否已經寫出利用腳本。寫出利用腳本後可以觀測己方是否做好了防禦。

分清區段與端口

比賽過程中會主辦方會安排好合理的網段分佈。

維護的時候需要連接到本隊 GameBox 所在網段上,根據主辦方提供的 CTF 賬號與密碼登錄。而與其他隊伍的 GameBox 交互時則需要連接到對應的網段裏與漏洞程序進行交互。提交 flag 則需要到指定的答題平臺上提交。

Warning

這裏尤其需要注意的就是端口。如果端口在不輕易間弄錯的話,這樣的錯誤是挺難察覺到的,而這樣的失誤也會帶來不必要的損失。甚至會出現長時間無法提交 flag 的致命情況。所以需要小心注意。

服務 patch 與防禦

  1. 程序 patch 要合理並同時符合裁判系統 check 條件。雖然系統的 check 並未公開是 check 哪裏,但是一般情況下,系統是不會過度爲難的。
  2. 程序 patch 使用 IDA 進行修改,IDA 提供了三種方式的 patch:byte,word,assemble.其中字節碼修改比較好用。因爲逐字節修改不需考慮彙編指令,一般這樣的修改改動也很小,在一定場合下十分好用。彙編指令級別的修改雖然方便不需要修改字節碼,但是也造成了一定的不便。比如需要額外考慮彙編指令的長度,結構是否合理完整,邏輯是否和原來一樣,修改的彙編指令是否合法等問題。
  3. 在 patch 程序時要記得備份原來的漏洞程序,以供隊伍分析使用。在上傳 patch 的時候應該先刪除原來的漏洞程序,然後將 patch 過的程序複製進去,複製進去之後還需要給程序賦予相應的權限。
  4. 一般比賽中,漏洞程序會有十幾處需要 patch 的地方。Patch 的時候不僅要講究有效合理,還要滿足能夠在一定程度上防範或混淆對手的分析。

構造腳本框架快速展開攻擊

在攻防比賽過程中,一血顯得尤其重要。因此有一個攻擊腳本框架是非常有利的。快速開發攻擊腳本,可以在前期保持優勢地位,也可以在不斷拿分的同時省下時間去做好防禦。

比賽的一些策略

  1. 在比賽過程中,不宜死耗在一道題上,由於一血的優勢性,在比賽過程中更應該全面瞭解賽題難度,先從 簡單題 開始進行分析,步步爲營。
  2. 比賽過程中,兩極會嚴重分化。應該着力打擊和自己實力相當和比自己隊伍更強的隊伍,尤其是分數相差無幾的情況下,更要嚴防嚴守。
  3. 比賽中 NPC 會不定時發出攻擊流量。從攻擊流量中可以得到 payload。
  4. 一定要把 NPC 往死裏打。
  5. 在開賽初可以將所有的管理密碼都設置爲同一個密碼,這樣方便隊員登錄管理。在初期將所有文件備份下來供隊內分享。