線下攻防經驗小結¶
首先,正常比賽會提供提交 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 往死裏打。
- 在開賽初可以將所有的管理密碼都設置爲同一個密碼,這樣方便隊員登錄管理。在初期將所有文件備份下來供隊內分享。