線下攻防經驗

出自gamedev
跳至導覽 跳至搜尋

{{#tree:

}}

線下攻防經驗小結[編輯]

首先,正常比賽會提供提交 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. 在開賽初可以將所有的管理密碼都設置為同一個密碼,這樣方便隊員登錄管理。在初期將所有文件備份下來供隊內分享。