王濟昂 朱雨晨 馬越 田珂
(中國民航大學計算機學院 天津市 300300)
隨著當今社會愈發網絡化、智能化,信息安全也成為互聯網行業的重要組成部分。國家在網絡安全教育上不斷加大建設力度,但網絡人才培養能力與社會需求仍嚴重不符,傳統教育模式下培養的學生綜合素質欠缺,解決實際問題能力不足[1]。隨之各種信息安全類競賽逐漸興起,旨在訓練技術和選拔有能力人群。各行業選拔和培養優秀人才大多通過競賽的方式進行,競賽形式多樣,涵蓋題目范圍廣泛,成了大部分人入門和提升網絡安全技術的首選。
CTF 是英文Capture The Flag 的縮寫,直譯為奪旗賽,是歸于網絡安全領域中的一種關于信息安全的競賽。它起源于1996年的全球黑客大會,是網絡安全技術人員進行技術競技的比賽。它的比賽流程可簡單歸納為,參賽團體通過分析程序、漏洞挖掘、攻擊防守等形式,迅速地從主辦方給出的題目、比賽環境中得出有關的字符串或是其他數據,并在規定時長內提交答案,奪得分數。為了更好地描述這種比賽,我們把得出的答案稱為Flag,選手們的答題過程則稱為奪旗[2]。其主要題型類型包含逆向、漏洞挖掘與利用、Web 滲透、密碼、取證、隱寫、安全編程等。但是當前免費開放的線上靶場較少,使得入門CTF 競賽門檻相對較高,初學者入門較為困難。
Docker 是用GO 語言開發的應用容器引擎,基于容器化,沙箱機制的應用部署技術。可適用于自動化測試、打包,持續集成和發布應用程序等場景。使用較少的命令和腳本快速部署應用,再配合shell 等腳本語言,可實現腳本化一鍵部署。本項目基于docker 容器化部署搭建線上CTF 靶場系統,搜集注入不同類型和不同難度的題目,給用戶提供一個適合自己需求的做題環境,為初學者快速的了解與學習CTF 提供幫助。

圖1:系統功能模塊圖

圖2:題庫模塊

圖3:排名模塊

圖4:博文模塊

圖5:Write Up 模塊

圖6:管理員管理模塊

圖7:CTF 題目分類
開發出一個完整的、操作方便、易于維護的信息安全靶場做題系統,該系統頁面美觀、功能完備,適合不同層次用戶使用,眾多類型的題目可以保證用戶可以有針對性地練習,提高信息安全競賽水平。
本系統共設計了7 個主要界面,分別是:系統登錄界面、網站首頁、題庫、排名、博文、Write Up、管理員管理(管理員登錄時)等模塊。采用HTML 和JavaScript 技術,使用Bootstrap 框架。前端的js 代碼向后端發送數據請求,在后端接收到請求后,解析此請求,將查詢到的數據打包,使用json 將數據傳送回前端,前端收到json 包后,再將其解析成特定的js 對象使用。而Bootstrap 是基于css 和html 的快速開發WEB 應用程序和網站的前端框架。其代碼簡單,提供更加便捷的布局,含有強大的內置組件,易于定制;極大縮短周期,增加效率,后期維護也很方便[3]。
系統主要功能如圖1。
系統用戶分為普通用戶和管理員用戶,用戶在登錄時,輸入用戶名密碼,前端頁面向后端發送數據請求,訪問數據庫,判斷用戶名密碼是否和數據庫中匹配,決定是否登陸成功。
用戶名密碼匹配成功后則進入網站首頁,導航欄上顯示了該系統的六大主要功能:題庫、排名、上傳、比賽、WriteUp 和消息模塊,以及在界面右上角用戶也可以隨時修改密碼。
用戶進入題庫模塊可以按照類別選擇想要解答的題目,之后選擇開啟題目,獲取到flag 后提交,如果中途想要退出做題可以點擊刪除題目,系統會關閉該題目的鏡像。題目列表會實時顯示題目的通過數,便于用戶直觀地了解題目的難易程度。頁面具體展示如圖2。
用戶在提交正確的flag 后,會獲得相應的分數。排名模塊通過統計每個用戶通過的flag 數和獲得的分數對用戶進行排名,并展示給所有用戶,每個用戶都可以實時地看到自己的排名情況,排名模塊樣例如圖3 所示。
管理員和用戶可以將自己認為有學習價值的內容作為博文上傳分享,供其他用戶一起學習交流。用戶確定分享博文鏈接后,由管理員審核,審核成功后,系統會將其發布在相應的模塊。用戶在上傳之后可在消息欄接收到博文鏈接的審核狀態的消息,查看審核進度,具體界面如圖4 所示。
用戶可以將解答題目時的解題思路關鍵步驟或題目代碼整理成筆記,編寫匯總后上傳到Write Up 模塊,可以供給其他用戶一起溝通參考。用戶在上傳Write Up 之后可在消息欄收到管理員提示的審核進程消息,知曉審核結果,如圖5 所示。
以管理員身份登錄網站后,進入管理界面,可以審核用戶上傳的博文鏈接和Write Up,審核通過之后就可以在相應模塊進行發表,供其他用戶閱讀。管理員還可以在后臺向普通用戶發送消息,讓其在上傳博文、Write Up 之后獲得審核進度和審核結果。管理員也可以根據比賽或者練習需要向題庫中錄入其他題目,如圖6 所示。
本系統的后端主要采用apache+PHP+MySQL 的架構,進行web 網站開發。主要使用PHP 語言,采用ThinkPHP3 框架,并使用Docker 容器化部署。
PHP 屬于一種服務器端的語言,可以通過計算把運算出來的結果傳遞給客戶端,因此PHP 經常被使用在事務處理當中。PHP 是一種嵌入式的腳本語言,可以通過模塊以及網頁服務器進行相應的結合,能夠提供各種數據庫的接口。PHP 也是一種跨平臺的語言,它可以把結果傳遞給瀏覽器,PHP 可以跨平臺使用,并且可以使用在任何一種瀏覽器上面。[4]使用PHP 的原因在于其有防注入功能,與Apache 組合使用更提高了系統的安全性能。并且也具有很好的擴展性和移植性,無論是在Windows 還是Linux 系統都可以正常使用,并且開源。
ThinkPHP 框架(原名FCS),由上海頂想信息科技有限公司開發和維護,基于MVC 三層架構,遵循Apache 2 開源協議發布,是為Web 應用快速開發而打造的一款輕量級Web 框架。[5]ThinkPHP3 具有以下的開發優點:輕松動態地創建數據庫視圖,多表查詢相對簡單;模型命名范圍支持;查詢條件和SQL 預處理功能;動態設置自動驗證和自動完成支持;內置AJAX 數據返回方法,支持JSON格式返回客戶端,可隨意使用AJAX 類庫進行操作。
CTF 的賽題范圍涉及很廣,主要包含Web 網絡攻防、逆向工程、Pwn 二進制漏洞利用、Crypto 密碼攻擊、Mobile 移動安全以及Misc 安全雜項等。
CTF 的Web 方面主要包含sql 注入,文件上傳漏洞,敏感信息泄露,命令執行繞過;在密碼學方面包含古典密碼解密,分組密碼解密,流密碼解密,公鑰密碼解密等;在Pwn 方面包含棧的溢出及溢出利用,格式化字符串漏洞;Misc 方面包含流量分析,圖片隱寫術,壓縮包的加密等。在各項內容收錄有入門到進階的難度設計,用戶可以在初步入門之后不斷探索解決更為復雜的題目,如圖7 所示。
題庫的題目搜集主要參考《從0 到1 CTFer 成長之路》,此書籍包含的CTF 題目類型廣泛,基礎題目占比較大,適合于初入門CTF 比賽的用戶學習和提升自身能力。主要圍繞WEB、PWN、CRYPTO、MISC 這四類題目搜集,并且每類都有難易程度不同的題目,用戶可以根據自身情況,在不同階段選擇適合自己的不同類型的題目,循序漸進,逐步提升。
本系統使用Docker 容器化部署。首先分析系統基本要求,明確系統的基本功能模塊并進行數據庫設計,采用apache+ PHP+MySQL 的開發模式以ThinkPHP3 的開發框架,將各個模塊與數據庫相關聯,保證系統的安全穩定和可擴展性。最終開發了一個完整、穩定的CTF 線上靶場。在系統開發完畢后,收錄整理了大量經典的CTF 題目。近些年,網絡安全行業迅速崛起,并越來越受到國家的重視,越來越多的人想要加入這個熱門行業。本系統主要對想要入門網絡安全或者參加CTF 競賽提供一個在線學習平臺,涵蓋CTF 各種類型的基礎題目,并提供解題方法和技巧的分享和討論,可以讓用戶輕松入門CTF。