Web渗透测试课程与CTF竞赛结合的创新教学模式探索
作者: 向训文 吕波 罗宜元 谢中华 陈泽虹摘要:Web渗透测试是网络空间安全专业的一门重要课程,具有极强的实践性,要求学生动手进行Web网站的渗透测试。然而,传统的讲授与实验结合的教学方式在该课程中的效果并不理想。CTF,即Capture The Flag(夺旗赛) ,是利用网络安全知识寻找题目中隐藏的Flag(旗) 。将CTF竞赛形式的题型引入教学演示和实验中,学生在动手完成演示示例或实验(找到Flag) 后,能够显著提升学习成就感,增强对网络安全知识的兴趣,从而提高课程的教学效果。
关键词:Web;渗透测试;CTF;竞赛;网络空间安全
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2025)08-0165-03
开放科学(资源服务) 标识码(OSID)
0 引言
Web渗透测试课程主要的教学内容为常见的Web渗透漏洞的攻击和防范,包括信息收集、Web基础、SQL注入漏洞、文件上传漏洞、反序列化漏洞、暴力破解漏洞、命令执行漏洞、文件包含漏洞、XXE漏洞、XSS漏洞等。课程要求学生掌握这些常见Web渗透测试的方法,尤其是能够进行动手实操,完成相应Web网站的渗透任务。然而,传统的讲授与实验结合的教学方式存在诸多问题,导致教学效果不佳。因此,针对这些问题进行教学改革,将CTF竞赛模式引入教学中,以提升教学效果[1-3]。
1 问题分析
1.1 学生想学习实用的网络安全知识,但难以下手、容易放弃
网络安全专业的学生大多怀有“黑客”的梦想(在法律允许的情况下进行渗透攻击) ,认为“黑客”形象十分酷炫。然而,要达到“黑客”的水平,学生需要掌握大量计算机基础知识和网络安全知识,部分同学往往不知道从何入手,容易产生放弃的心理,因此需要相应的引导。而传统的讲授+实验的方式,实验上手难度相对较大,目的不明确,导致学生在入门学习的时候跟不上,容易放弃。
1.2 学生想参与网络安全竞赛,但是入门不容易,成绩不佳
国内外网络安全相关竞赛众多,学生参与这些竞赛可以获得丰富的知识。如果能在竞赛中获奖,将对就业或继续深造大有裨益。然而,竞赛入门并不容易,许多同学参与后成绩不佳。
1.3 传统的教学方式难以满足该课程对动手能力和学生兴趣的要求
Web渗透测试课程要求学生具备较强的动手能力,能够完成Web网站的渗透测试操作。而传统、单一的PPT模式的知识传授方式,已经不适用于这种动手能力要求较高的课程;传统的实验,配置烦琐,目的性、趣味性也不强,浪费学生不少时间,学生的兴趣也不强。
1.4 传统的考核方式难以满足该课程对动手能力的要求
Web渗透测试课程不要求学生开发出某个系统或工具,该课程的考核重点在学生的动手能力,要求学生能灵活运用所学的渗透方法进行实际操作,因此,笔试、大作业等传统形式的考核都不太适用该课程。
1.5 课程内知识不足以满足优秀就业、深造的要求
Web渗透测试课程学时有限,旨在引导学生入门Web渗透测试领域,学习所需的基础知识和操作方法。然而,优秀的就业机会和深造要求学生在网络安全知识的深度与广度上具备更高水平,因此需要对学生的知识拓展进行相应引导。
2 课程改革
2.1 改革实验环境搭建
课程中常需使用特定环境进行演示和测试,如Kali、SQLi-labs(包含phpMyAdmin) 、Upload-labs、XSS闯关和XSS平台。然而,这些环境的搭建步骤烦琐,容易出错,不同系统间可能出现兼容性问题,若在学生个人电脑上搭建,耗时较长。
以SQLi-labs实验环境为例,其安装配置步骤较多:首先需安装PHP环境,通常使用phpStudy;为方便数据库管理,建议安装数据库管理工具如phpMyAdmin。接着,下载SQLi-labs的源代码,解压至网站对应目录,修改数据库配置文件,并执行数据库初始化操作。学生在实际安装配置过程中,由于电脑软件配置各异,可能会遇到一些问题。例如,有些同学在学习Web开发课程时安装了其他Web服务器,可能与phpStudy集成的Web服务器发生冲突;而在学习数据库课程时,安装的数据库服务器也可能与phpStudy集成的Web服务器产生冲突。解决这些问题往往需要耗费大量时间。因此,课程教学应更多地集中于Web渗透的原理与实操,而不应在环境搭建上耗费过多时间。
为此,在校内服务器上搭建了一个CTF形式的实验网站(使用开源的GZCTF竞赛平台) ,将常用的环境直接放置于平台上(如图1所示) 。学生无须在个人电脑上重复搭建环境,只需打开实验网站,点击相应的实验环境即可使用。
每个实验环境以CTF题的形式提供,都使用docker镜像进行配置[4-5],如某个学生在实验网站上启动了SQLi-labs这个实验环境,就会启动独立的一个docker容器,这个docker容器的实验环境只服务于该同学,与其他同学开启的实验环境是相互独立、隔离的,不同同学之间的操作不会相互影响。该docker镜像使用Dockerfile来进行自定义的环境配置(如图2所示) ,首先使用基础的base_image_nginx_mysql_php_73镜像,该基础镜像包含通用的Web服务器、数据库、PHP环境,然后将SQLi-labs、phpMyAdmin、数据库备份文件等拷贝到容器中,修改SQLi-labs的数据库配置文件,并将已经初始化好的数据库备份文件导入到数据库中,Web服务器和PHP的一些特定配置,也在这里修改好。使用该Dockerfile构建出来的docker镜像,即包含完整可用的SQLi-labs和phpMyAdmin环境,其他的环境,如kali、Upload-labs、xss-lab、xssplatform,使用类似的方法进行搭建。
学生在实验网站上点击开启对应环境即可使用,这些环境运行在实验网站对应的服务器上,而不是学生本地的电脑上,节约学生时间的同时,也不会与学生本地电脑上的软件配置有冲突,使用便捷,且不容易出问题。
2.2 改革示例演示
在课程教学中,首先讲解相关理论知识,然后通过实例演示以更好地理解和运用这些知识。之前的实例演示通常在某些基础环境上进行,例如讲解Union SQL注入时,需要先配置好SQLi-labs环境,然后使用该环境中的示例进行演示。然而,这些环境的搭建耗费了学生大量时间,且SQLi-labs中的题目众多,示例演示的针对性较弱。改革后,常用的基础环境无须学生自行搭建,学生只需在实验网站上点击即可开启使用。同时,大部分示例演示已改为CTF题形式,这些CTF题不需要学生自行搭建基础环境,直接在实验网站上点击即可开启。每个CTF题与对应知识点紧密相关,具有更强的针对性,演示效果显著提升。
学生完成CTF题形式的示例演示后,实验网站能够即时判断对错,并给予相应分数,增强了成就感,有效激发了学生的学习兴趣。学生在课程中提前接触CTF竞赛形式的题目,为后续想参加CTF竞赛的学生提供了良好的入门途径。
此外,课程中部分知识点内容较多,演示步骤烦琐,所需时间较长,导致许多同学在演示过程中难以跟上。改革后,将这些内容较多的示例拆解为多个CTF题,每个CTF题对应一部分步骤。在示例演示结束后,给予学生一定时间进行动手实操,学生在完成相应CTF题后,能够充分理解前面的步骤,再继续演示后续步骤对应的CTF题,这样有助于学生更好地理解内容较多的知识点。如讲解Union SQL注入时(如图3所示) ,将示例演示拆分为6个CTF题,第1题为登录框绕过,用于演示SQL注入的基本原理,第2题用于演示使用Union SQL注入获取数据库名,第3题用于也用于演示数据库名的获取,但是对目标网站的数据库查询语句用的列数进行了变化,加深对Union SQL注入的理解,第4题用于演示某个数据库中所有表名的获取,第5题用于演示某个表中所有列名的获取,最后,第6题演示了Union SQL注入的所有步骤,包括上述的数据库名获取、表名获取、列名获取,以及最后某个表中数据的获取。改革前,大约一半的学生能够在课堂上完成Union SQL注入的示例;改革后,几乎所有学生都能在课程中完成这一示例。
2.3 改革课程考核
Web渗透测试课程重点考核学生的动手实践能力,因此,课程考核的改革重点关注实验和大作业这两个部分。
改革前,实验考核主要通过两个方面进行:一是学生现场实验的检查,但由于该课程实验题操作性强且步骤较多,课堂时间有限,导致检查时间不足;二是学生提交的实验报告,主要描述实验过程,部分同学可能出现抄袭,教师在查看实验报告时需耗费大量时间进行抄袭检查。此外,通过实验报告的方式,难以有效考核学生的真实实践能力。
引入CTF形式的实验网站进行教学改革后,实验考核可以在实验网站上方便地进行。教师发布CTF形式的实验题目,学生打开题目,利用所学知识完成相应步骤后提交答案。实验时间截止后,教师可以轻松导出学生成绩,从而节省判题时间。此外,实验网站集成了作弊检测功能,同一道题每位学生提交的答案均不同,若直接复制他人答案将被平台检测出来。因此,学生必须掌握解题的全部步骤才能得分,这样可以更客观、公正地考核学生对课程的掌握程度。
对于大作业的考核,在改革前,要求学生提交一定数量的CTF题的解题报告,对于参加CTF竞赛遇到的题目或较难的题,有得分加成,这种方式在一定程度上能考查出学生的实践动手能力,因此,在改革后,保留了该方式,并在此基础上增加了期末测验环节。期末测验同样在实验网站上进行,如图4所示,为某次期末测验的排行榜结果的部分截图,期末测验要求学生在固定时间内线下集中进行,测验题型为CTF形式,考查范围包括整个课程的教学内容,分为低、中、高不同的难度,并有少部分拓展题,需要学生有很好的自学能力。这种期末测验的方式,相比大作业实验报告的形式,可以更好地考查出学生真实的实践动手能力。
2.4 改革课外引入
Web渗透测试课程内教学学时有限,为进一步提升学生学习网络安全知识的欲望,提高知识储备的深度或广度,重点对CTF竞赛进行课外引入。在课程内引入了CTF形式的实验和期末测验,这种形式与CTF竞赛类似,因此,学生在课程内就可以对CTF竞赛有一定的了解。在课外,对感兴趣的学生进行竞赛相关培训,整理竞赛相关的学习资料,录制教学视频,不定期转发线上CTF竞赛通知,并在学校内组织了CTF竞赛,指导学生参加线上、线下不同级别的CTF竞赛。
3 改革成效
本课程以2021级网络空间安全1、2班和2022级网络空间安全1、2班为研究对象进行教学改革。前者为改革前的两个班级,学生人数共计89人;后者为改革后的两个班级,学生人数共计80人。如表1所示,改革前后成绩对比的数据表明,改革后80分及以上的学生占比明显增加,说明学生对课程内容的掌握程度更好。改革后,70分以下学生占比也明显降低,学生上课积极性更高,学生跟不上教学节奏的情况更少。
在改革后,对学生竞赛进行了更多的引导、培训和组织,学生能够更快入门CTF竞赛,拓展了学生网络安全相关知识的深度和广度,对应竞赛获奖也更多。改革前,2023年蓝桥杯网络安全赛省赛获奖8人,进入国赛1人;改革后,2024年蓝桥杯网络安全省赛获奖增长至13人,进入国赛2人。
4 总结
实践证明,将CTF形式引入Web渗透测试课程的教学模式是可行的,通过搭建CTF形式的实验平台,改革实验环境搭建、示例演示、课程考核、课外引入,尝试解决学生学习容易放弃、竞赛上手不易、动手能力不够、兴趣不强、考核方式不够科学、课外知识引入不够等问题,取得了很好的效果。
参考文献:
[1] 豆利.基于CTF模式的网络安全课程教学改革实践研究[J].电脑知识与技术,2023,19(21):125-127.
[2] 曾煌存.CTF竞赛融入网络安全课程教学的研究[J].网络安全技术与应用,2024(6):90-92.
[3] 洪宝惜.融合CTF模式的网络安全防护课程教学实践[J].电脑与电信,2023(3):94-97.
[4] 朱晓阳,桑林俐,廖章杰,等.基于Docker部署赛题的CTF竞技仿真靶场设计与开发[J].信息与电脑(理论版),2022,34(17):17-19.
[5] 王济昂,朱雨晨,马越,等.基于Docker容器化部署的CTF线上靶场系统[J].电子技术与软件工程,2021(7):210-212.
【通联编辑:王 力】