简介:这份文档是2022年全国职业院校技能大赛中职组网络安全赛项的完整赛题(第9套),面向职业院校网络安全参赛选手、指导教师以及备赛训练的学习者,用于模拟真实赛场环境、检验技能掌握程度。赛题围绕基础设施设置与安全加固、网络安全事件响应与数字取证、CTF夺旗攻击与防御四大模块展开,涵盖Windows与Linux双平台的密码策略、用户权限管理、SSH与VSFTPD及IIS中间件加固、iptables防火墙策略、Nmap扫描与Web渗透测试等具体任务,并附有详细的分值权重与竞赛注意事项。资源包内仅含1个docx文档,大小约49KB,内容为完整赛题原文,便于打印或对照练习。目前已有849人学习下载,适合需要系统梳理赛项考点、开展模拟训练或进行教学参考的读者使用。
1. 从一份中职组赛题 docx 说起:网络安全竞赛试题9到底在考什么
如果你手头拿到一份名为「2022 年全国职业院校技能大赛(中职组)网络安全赛项赛题网络安全竞赛试题9.docx」的文件,第一反应大概率是:这到底是一套 CTF 夺旗赛,还是一份偏运维的安全加固任务书?答案往往是两者都有。全国职业院校技能大赛中职组网络安全赛项,典型结构是「理论 + 单兵闯关 + 团体对抗」三段式,单兵部分常以 CTF 形式出现,覆盖渗透测试、安全加固、数字取证、流量分析几大块,团体部分则偏向攻防对抗和应急响应。这份试题9,从命名看属于赛题序列中的一套完整任务包,里面通常包含若干台靶机、若干道 flag 题、以及配套的加固与取证要求。
对读者来说,真正有价值的问题不是「这套题考了多少分」,而是:我能不能用一套通用方法论,把这类赛题拆成可复现的操作流程?答案是能。网络安全竞赛试题9这类赛题,本质上是把渗透测试流程、安全基线检查、数字取证流量取证三条主线压缩进一个限时环境。你只要掌握「信息收集 → 漏洞定位 → 利用提权 → 加固修复 → 取证溯源」这条链路,换一套题也只是换皮。下面我按自己带学生打比赛和做企业内训的实操顺序,把这条链路拆开讲清楚,重点放在每一步的命令、参数和翻车点,而不是空谈概念。
2. 赛题环境还原与信息收集:从 docx 到可操作靶场
2.1 先判断赛题类型,再决定工具链
拿到「网络安全竞赛试题9.docx」这类文件,不要急着打开就做题。第一步是判断它属于哪一类赛制。常见做法是看文档结构:如果里面有「任务一、任务二」并附带 IP 段、账号密码、服务列表,那基本是靶场实操题;如果只有零散描述和 flag 提交格式,那更接近 CTF 单兵题。中职组赛题通常两者混合,文档里会给出靶机 IP 范围,比如 192.168.1.0/24,以及一组初始凭据。
我一般会先建一个工作目录,把文档里的关键信息抽成一张表,避免做到一半忘了哪台机器对应哪个任务。这一步看似笨,但能省下大量来回翻文档的时间。
| 信息项 | 示例值 | 用途 |
|---|---|---|
| 靶机网段 | 192.168.1.0/24 | 扫描范围 |
| 初始账号 | admin/123456 | 登录测试 |
| 目标服务 | Web、FTP、SMB | 决定工具 |
| flag 格式 | flag{xxx} | 提交校验 |
| 加固要求 | 关闭匿名访问 | 任务清单 |
2.2 用 nmap 做第一轮存活与端口扫描
信息收集的核心命令是 nmap。不要一上来就全端口 -p- 扫,先做存活探测和常见端口,再针对性深挖。下面是我在赛题环境里常用的两段命令。
# 第一轮:快速存活探测,不扫端口,先确认哪些 IP 活着 nmap -sn 192.168.1.0/24 -oG alive.txt # 第二轮:对存活主机扫常见端口,带服务版本和默认脚本 nmap -sV -sC -p 21,22,80,135,139,443,445,1433,3306,3389,8080 192.168.1.0/24 -oN ports.txt第一段-sn只做 ping 扫描,速度快,适合先圈定范围。第二段-sV探测服务版本,-sC跑默认脚本,能直接暴露一些弱配置,比如 SMB 匿名访问、FTP 匿名登录。参数上,-oG和-oN分别输出 grep 友好格式和普通格式,方便后续用 grep 过滤。注意:赛题环境里如果开了防火墙禁 ping,-sn可能漏掉主机,这时要加-Pn跳过存活检测,直接扫端口。
2.3 Web 服务的信息收集与目录爆破
如果扫描发现 80 或 8080 端口开放,下一步就是 Web 信息收集。常见做法是先用 whatweb 或 curl 看指纹,再用 dirsearch 或 gobuster 爆破目录。
# 查看 Web 指纹和响应头 whatweb http://192.168.1.10 curl -I http://192.168.1.10 # 目录爆破,指定常见后缀和线程数 dirsearch -u http://192.168.1.10 -e php,asp,aspx,jsp,html -t 20 -w /usr/share/wordlists/dirb/common.txt-e指定扩展名,-t控制线程,线程太高容易被 WAF 封 IP,赛题环境一般 20 左右够用。字典优先用 dirb 的 common.txt,体积小、命中率在赛题环境里反而高。如果目录爆破结果里有 admin、login、upload 这类路径,就重点跟进。这里有个血泪经验:很多中职组赛题的 Web 题并不考复杂漏洞,而是考「默认口令 + 文件上传 + 一句话木马」这种基础链路,所以看到登录框先试 admin/admin、admin/123456、guest/guest。
3. 渗透测试实战:从漏洞定位到提权拿 flag
3.1 常见漏洞类型的快速验证手法
赛题环境里的漏洞通常集中在几类:SQL 注入、文件上传、命令执行、弱口令。验证 SQL 注入最直接的方式是手工加单引号看报错,再用 sqlmap 自动化。
# 手工测试:在 id 参数后加单引号,观察是否报错 curl "http://192.168.1.10/news.php?id=1'" # sqlmap 自动化,指定参数和数据库类型 sqlmap -u "http://192.168.1.10/news.php?id=1" --dbms=mysql --batch --dbs--batch让 sqlmap 自动选择默认选项,避免交互卡住;--dbs列出数据库。如果手工测试时页面返回正常但内容有变化,可能是布尔盲注,这时用--technique=B指定盲注技术。命令执行漏洞常见于 ping 测试、文件包含这类功能点,验证时用;id或|whoami拼接。
# 命令执行验证:假设存在 ping 功能 curl "http://192.168.1.10/ping.php?ip=127.0.0.1;id"如果返回里有 uid= 信息,说明命令执行成功。接下来就是反弹 shell 或直接读 flag。注意:赛题环境里反弹 shell 要确认靶机能不能出网,很多内网靶场不出网,这时只能用盲执行或写文件的方式。
3.2 提权与 flag 定位的实操路径
拿到低权限 shell 后,提权是拿高分的关键。Linux 下先看内核版本、SUID 文件、定时任务。
# 查看内核版本和系统信息 uname -a cat /etc/os-release # 查找 SUID 文件 find / -perm -4000 -type f 2>/dev/null # 查看定时任务 cat /etc/crontab ls -la /etc/cron*SUID 文件里如果有 nmap、find、vim 这类,可以直接用来提权。比如 find 有 SUID 时:
find . -exec /bin/sh -p \; -quitWindows 下则看补丁、服务权限、注册表。赛题里常见的 Windows 提权是 MS16-032、MS17-010 这类老漏洞,用 msf 或对应 exp 即可。flag 通常放在/root/flag.txt、C:\Users\Administrator\Desktop\flag.txt或数据库里。如果找不到,用find / -name "flag*" 2>/dev/null全盘搜。
3.3 安全加固:赛题里的反向任务
很多赛题不只要攻,还要守。安全加固部分通常要求你修复刚才利用的漏洞,或者按基线检查清单整改。常见加固项包括:关闭匿名 FTP、修改弱口令、限制目录浏览、打补丁。以 Apache 为例,关闭目录浏览和隐藏版本号:
# 在 httpd.conf 或 apache2.conf 中 ServerTokens Prod ServerSignature Off <Directory /var/www/html> Options -Indexes AllowOverride None </Directory>改完重启服务:systemctl restart apache2。加固后要验证:用 curl 访问目录看是否返回 403,用 nmap 看版本号是否隐藏。这里容易翻车的是改完配置没重启,或者改错文件导致服务起不来。建议改前先备份:cp httpd.conf httpd.conf.bak。
4. 数字取证与流量分析:从 pcap 里捞出 flag
4.1 流量取证的基本流程与工具
数字取证流量取证是赛题里区分度很高的一块。给一个 pcap 文件,要求你找出攻击者 IP、被利用的漏洞、传输的 flag。我一般按「协议分层 → 会话重组 → 关键字搜索」三步走。工具首选 Wireshark 和 tshark,命令行下 tshark 更适合批量处理。
# 查看 pcap 的基本统计信息 capinfos capture.pcap # 列出所有 HTTP 请求 tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri # 搜索包含 flag 的流量 tshark -r capture.pcap -Y "frame contains \"flag\"" -T fields -e frame.number -e data.data-Y是显示过滤器,-T fields指定输出字段。如果 flag 被分片传输,需要先重组:tshark -r capture.pcap -Y "http" --export-objects http,export_dir把 HTTP 对象导出来,再在文件里搜。
4.2 常见编码与隐写题的破解思路
CTF 杂项题里经常出现编码嵌套和隐写。常见编码有 Base64、URL 编码、十六进制、Unicode。工具方面,随波逐流 CTF 编码工具在 Windows 下很好用,Linux 下可以用 CyberChef 的 CLI 版本或者自己写脚本。
import base64 # 多层 Base64 解码示例 data = "ZmxhZ3t0aGlzX2lzX2FfZmxhZ30=" for i in range(3): try: data = base64.b64decode(data).decode() print(f"第{i+1}层: {data}") except Exception as e: print(f"第{i+1}层解码失败: {e}") break这段代码循环解码,每层打印结果,遇到异常就停。参数上,base64.b64decode默认严格模式,如果字符串里有换行或空格会报错,可以加validate=False。隐写题常见于图片,用binwalk看是否附加了文件,用steghide提取隐藏内容。
# 查看图片是否包含附加文件 binwalk image.jpg # 提取附加文件 binwalk -e image.jpg # steghide 提取,密码为空时直接回车 steghide extract -sf image.jpg4.3 日志分析与攻击链还原
取证题有时给的是系统日志或 Web 日志,要求还原攻击链。Web 日志重点看 200 状态码里带参数的请求,尤其是 union select、../、cmd= 这类特征。
# 从 access.log 里筛选可疑请求 grep -E "union|select|\.\./|cmd=|exec" access.log | awk '{print $1, $7}' | sort | uniq -c | sort -nr这条命令先过滤关键字,再提取 IP 和 URL,统计出现次数。出现频率高的 IP 大概率是攻击者。系统日志则看/var/log/auth.log里的登录失败和 sudo 记录。还原攻击链时,按时间排序:sort -k4 access.log,把攻击者的每一步按时间线串起来。
5. 避坑与常见问题:赛题环境里最容易翻车的 5 个点
5.1 扫描太猛导致靶机宕机或 IP 被封
现象:nmap 全端口扫描或 dirsearch 高线程跑了几分钟,靶机 Web 服务无响应,或者自己的 IP 被防火墙拉黑。原因:赛题靶机配置通常不高,全端口扫描加高并发会把服务打挂;部分环境有 fail2ban 或 WAF,触发阈值就封 IP。解决:扫描分阶段,先常见端口再全端口;dirsearch 线程控制在 10-20;如果被封,换 IP 或等封禁时间过。我一般会在扫描前先ping一下靶机,确认存活再动手。
5.2 拿到 shell 后找不到 flag,以为没提权成功
现象:低权限 shell 里find / -name "flag*"搜不到,以为 flag 在 root 目录。原因:flag 可能放在数据库、环境变量、或者需要特定用户才能读的路径。解决:先env看环境变量,再mysql -u root -p进数据库show databases;找,最后看/home下各用户目录。Windows 下看注册表和C:\Users各桌面。别只盯着/root。
5.3 加固任务改错配置导致服务起不来
现象:按加固要求改了 sshd_config 或 httpd.conf,重启后服务失败,远程连不上。原因:配置文件语法错误,或者改动了监听端口、绑定地址。解决:改前备份,改后用sshd -t或apachectl configtest测试语法,确认无误再重启。如果是远程改 SSH,先开一个备用会话,别把唯一连接断了。
5.4 流量分析时忽略分片和压缩,flag 搜不到
现象:tshark -Y "frame contains \"flag\""没结果,但题目说 flag 在流量里。原因:flag 被 gzip 压缩后传输,或者分片在多个包。解决:先导出 HTTP 对象,tshark --export-objects http,dir,再在导出文件里grep -r flag。如果是 TCP 流,用tshark -z follow,tcp,ascii,0跟踪流看原始内容。
5.5 编码题多层嵌套,解到一半卡住
现象:Base64 解出来还是 Base64,或者解出来是乱码。原因:编码顺序搞反,或者中间夹杂了 URL 编码、十六进制。解决:用 CyberChef 的 Magic 功能自动识别,或者写脚本按「先 URL 解码 → 再 Base64 → 再 Hex」的顺序试。注意有些题会故意加干扰字符,比如在 Base64 里插换行,解码前先strip()去掉空白。
6. 进阶技巧:用自动化脚本把重复劳动压缩到 10 分钟
带过几轮比赛后,我最大的习惯改变是:不再手工重复敲同样的命令,而是把信息收集和常见验证写成脚本。下面这个 Python 脚本,输入一个 IP,自动跑存活确认、端口扫描、Web 指纹、目录爆破,输出一份简报。它不能替代手工分析,但能把前 10 分钟的基础工作压缩到 1 分钟。
import subprocess import sys import os def run(cmd): """执行命令并返回输出,失败时返回空字符串""" try: result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=120) return result.stdout except subprocess.TimeoutExpired: return "[超时]" def recon(target): print(f"=== 目标: {target} ===") # 存活确认 alive = run(f"ping -c 1 -W 1 {target}") if "1 received" not in alive and "1 packets received" not in alive: print("[!] 主机可能禁 ping,继续扫描") # 端口扫描 print("[*] 端口扫描...") ports = run(f"nmap -sV -sC -p 21,22,80,135,139,443,445,1433,3306,3389,8080 {target}") print(ports) # Web 指纹 if "80/tcp" in ports or "8080/tcp" in ports: print("[*] Web 指纹...") web = run(f"whatweb http://{target} 2>/dev/null") print(web) # 目录爆破 print("[*] 目录爆破...") dirs = run(f"dirsearch -u http://{target} -e php,asp,aspx,jsp,html -t 15 -w /usr/share/wordlists/dirb/common.txt --simple-report=/tmp/dirsearch_{target}.txt 2>/dev/null") print(f"目录爆破结果已保存到 /tmp/dirsearch_{target}.txt") if __name__ == "__main__": if len(sys.argv) != 2: print("用法: python3 recon.py <目标IP>") sys.exit(1) recon(sys.argv[1])脚本逻辑很直白:run函数封装 subprocess,带 120 秒超时防止卡死;recon先 ping 确认存活,再 nmap 扫常见端口,发现 Web 就 whatweb 加 dirsearch。参数上,dirsearch 的--simple-report把结果存文件,方便后续翻看。这个脚本的边界也很明显:它只做信息收集,不碰漏洞利用,因为利用阶段需要根据具体服务手工判断。另外,如果赛题环境有 IDS,脚本里的扫描行为可能触发告警,所以团体赛里我一般会先和队友确认扫描策略再跑。
最后一个技巧是关于 flag 提交的:很多赛题平台对 flag 格式敏感,多一个空格或换行都会判错。我习惯拿到 flag 后先echo -n "flag{xxx}" | md5sum核对,或者用cat -A看有没有隐藏字符。这个习惯帮我省过至少两次「明明对了却提交失败」的后悔药。希望帮到你。
本文还有配套的精品资源,点击获取