王济昂 朱雨晨 马越 田珂
(中国民航大学计算机学院 天津市 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。