简介这份资源是2022年全国职业院校技能大赛中职组网络安全竞赛试题1套的A、B模块答案解析面向备战全国职业院校技能大赛的中职选手、指导教师以及需要系统梳理网络安全实操要点的学习者。内容围绕基础设施设置与安全加固、网络安全事件响应、数字取证调查和应用安全两大模块展开涵盖登录安全加固、数据库安全策略、流量完整性、事件监控、防火墙策略、IP协议安全配置以及主机发现与信息收集等典型任务逐项给出操作思路与参考答案便于对照赛题复盘关键配置与验证方法。资源包为1个docx文档约2.74MB结构紧凑适合按模块检索学习。目前已有3936人学习下载可作为赛前查漏补缺、理解评分要点与规范答题格式的实用参考。1. 从一套中职组赛题说起AB 模块到底在考什么2022 年全国职业院校技能大赛中职组网络安全竞赛的 AB 模块是很多刚接触网络安全赛事的人第一次系统性地面对「加固 渗透」双线任务。A 模块通常给一台有漏洞的靶机或一段有缺陷的配置要求你完成安全加固B 模块则反过来给你一个目标环境要求你找到入口、拿到 flag。这套题的解析价值不在于答案本身而在于它把 Nmap 扫描、iptables 规则、MySQL 权限、CTF 夺旗思路这几件事串成了一条完整的链路。如果你正在准备网络安全相关赛事或者刚入门想找一个能跑通全流程的练手场景这套 AB 模块的拆解思路可以直接复用。它不依赖特定平台你在本地用虚拟机搭两台机器就能复现大部分操作。下面我按「先看清考什么、再动手复现、最后说坑在哪」的顺序把这套题的解析逻辑讲透。2. A 模块加固线从 Nmap 扫描结果反推 iptables 规则2.1 先用 Nmap 把靶机暴露面摸清楚A 模块的加固任务第一步永远是信息收集。很多新手拿到题目直接改配置文件结果改了半天发现漏了端口。我一般会先用 Nmap 做一次全端口扫描把靶机当前开放的服务列出来再对照题目要求逐条封堵。# 对目标 172.16.100.10 做全端口 SYN 扫描-sS 半开扫描速度快-v 显示过程-n 不做 DNS 解析-T4 提速 nmap -sS -v -n -T4 -p- 172.16.100.10 # 如果只想看常见端口加版本探测用这条 nmap -sV -sC -p 1-10000 172.16.100.10第一条命令的-p-表示扫描 1 到 65535 全部端口-sS是 SYN 半开扫描不会完成三次握手速度快且不容易被日志记录。-T4是时序模板在局域网里用 T4 比较合适T5 容易丢包。第二条命令的-sV做版本探测-sC跑默认脚本能直接看出 MySQL 版本、SSH 版本这些关键信息。扫描结果里如果看到 3306 开放说明 MySQL 对外暴露了看到 22 开放说明 SSH 可访问。A 模块的加固要求通常就是把这些不必要的对外端口关掉或者限制来源 IP。2.2 iptables 规则怎么写才不会被自己锁死知道要封哪些端口之后下一步是写 iptables 规则。这里有个血泪经验千万不要在远程 SSH 会话里直接iptables -A INPUT -j DROP一旦执行你当前的连接也会被切断只能去机房或者用 VNC 救回来。正确做法是先放行已建立的连接再追加拒绝规则。# 先放行已建立的连接和本地回环避免把自己锁死 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT # 放行 SSH 22 端口只允许管理网段 192.168.1.0/24 访问 iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT # 禁止特定 IP 202.98.7.148 访问任何端口 iptables -A INPUT -s 202.98.7.148 -j DROP # 拒绝 3306 MySQL 端口对外只允许本机访问 iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP # 最后设置默认策略为 DROP iptables -P INPUT DROP这几条规则的顺序很关键。iptables 是从上往下匹配的一旦匹配到就执行动作并停止后续匹配。所以放行规则必须写在拒绝规则前面。-m state --state ESTABLISHED,RELATED这一条是保命用的它让已经建立的 SSH 连接继续通行不会因为你后面加了 DROP 就断掉。-s 202.98.7.148 -j DROP这条就是热词里提到的「iptables 禁止 202.98.7.148 命令」的标准写法。注意用 DROP 而不是 REJECTDROP 是直接丢包不回应REJECT 会返回一个错误信息暴露你的规则存在。改完规则后很多人会问「iptables 配置后需要重启程序吗」。答案是iptables 规则是即时生效的不需要重启任何服务。但如果你重启了机器规则会丢失所以要用iptables-save持久化。# 保存当前规则到文件 iptables-save /etc/iptables/rules.v4 # 开机自动恢复在 /etc/rc.local 里加一行 iptables-restore /etc/iptables/rules.v4iptables-save把当前内存中的规则导出成文本iptables-restore从文件读回来。不同发行版持久化的路径不一样Debian/Ubuntu 常用/etc/iptables/rules.v4CentOS 7 用service iptables save。如果你不确定用iptables-save手动导出再写进启动脚本是最稳的。2.3 MySQL 侧的安全加固不能只靠防火墙A 模块里 MySQL 的加固通常有两层网络层用 iptables 限制 3306 访问应用层还要检查 MySQL 自身的用户权限。很多参赛者只做了 iptables 就以为完事了结果题目里要求「删除匿名用户」「禁止 root 远程登录」这些是 iptables 管不到的。-- 查看当前所有用户和允许登录的主机 SELECT user, host FROM mysql.user; -- 删除匿名用户 DELETE FROM mysql.user WHERE user; -- 禁止 root 从非本机登录只保留 localhost DELETE FROM mysql.user WHERE userroot AND host NOT IN (localhost, 127.0.0.1, ::1); -- 如果题目要求设置某个字段默认值为 0用 ALTER TABLE ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 0; -- 刷新权限 FLUSH PRIVILEGES;SELECT user, host FROM mysql.user是排查 MySQL 用户配置的第一步。如果看到user为空的行那就是匿名用户必须删掉。host字段为%表示允许从任何主机登录root 用户如果 host 是%那等于把数据库完全暴露了。ALTER TABLE ... ALTER COLUMN ... SET DEFAULT 0对应热词里「mysql 设置默认值为 0」的需求。注意 MySQL 8.0 和 5.7 的语法略有差异8.0 推荐用ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 05.7 可能需要用MODIFY COLUMN重写整个列定义。FLUSH PRIVILEGES在直接操作mysql.user表之后必须执行否则权限变更不会立即生效。如果你用的是GRANT和REVOKE语句那不需要手动 flush因为 MySQL 会自动刷新。3. B 模块渗透线从 CTF 夺旗思路到 flag 定位3.1 CTF Web 题的一般入口在哪B 模块的渗透任务本质上就是一道 CTF Web 题。中职组赛题里常见的入口有三类命令执行、文件包含、SQL 注入。热词里提到的「ctf 命令执行 passthru」就是其中一种典型场景。?php // 假设靶机上有这样一个存在漏洞的 PHP 文件 $cmd $_GET[cmd]; passthru($cmd); ?passthru函数会直接执行传入的命令并把输出原样返回。如果题目里给了你一个 URL 参数?cmd那基本可以确定是命令执行漏洞。你可以先试?cmdwhoami看当前权限再试?cmdls看目录结构。# 通过 URL 参数执行命令查找 flag 文件 curl http://target.com/vuln.php?cmdfind / -name flag* 2/dev/null # 如果 find 被禁用用 ls 逐层翻 curl http://target.com/vuln.php?cmdls -la /var/www/html/find / -name flag*是从根目录搜索文件名包含 flag 的文件2/dev/null把权限不足的报错丢掉避免输出太乱。如果 find 被禁用就用ls一层层翻先看 web 目录再看/tmp、/home、/root这些常见位置。3.2 拿到 shell 之后怎么找 flag命令执行只能一条条执行命令效率低。如果能反弹一个 shell 回来操作会方便很多。但中职组赛题通常不允许反弹到外网所以你只能在靶机本地找 flag。# 在命令执行里用 base64 编码绕过一些字符过滤 echo Y2F0IC9mbGFn | base64 -d | bash # 上面这行解码后是 cat /flagbase64 -d解码后再用bash执行可以绕过一些对关键字cat、flag的过滤。这是 CTF 里很常见的绕过手法。如果题目过滤了空格可以用${IFS}代替空格比如cat${IFS}/flag。flag 的常见位置包括/flag、/root/flag.txt、/var/www/html/flag.php、数据库里的某个表。如果 web 目录下有flag.php直接访问可能不显示需要配合文件包含或者 SQL 注入读出来。3.3 用 Nmap 做内网横向时的注意事项有些 B 模块题目会给你一台已经拿下的机器要求你以它为跳板扫描内网其他主机。这时候 Nmap 的用法和 A 模块不一样要注意扫描速度和隐蔽性。# 扫描内网 192.168.184.0/24 网段只做 ping 扫描看哪些主机存活 nmap -sP 192.168.184.1/24 # 对存活主机做端口扫描-Pn 跳过 ping 检测适合禁 ping 的主机 nmap -Pn -sS -p 22,80,3306,8080 192.168.184.1/24-sP是 ping 扫描只判断主机是否存活不扫端口速度快。-Pn是跳过主机存活检测直接扫端口适合目标禁 ping 的情况。-p 22,80,3306,8080指定只扫这几个常见端口减少扫描时间和流量。内网横向时不要用-T5虽然快但容易触发 IDS 告警而且丢包率高反而更慢。-T3或-T4是比较稳妥的选择。如果题目环境里有流量监控扫描间隔可以加--scan-delay 1s降低频率。4. 避坑与排查这套题最容易翻车的五个地方4.1 iptables 规则顺序写反导致 SSH 断连现象执行完 iptables 规则后当前 SSH 会话卡死重新连接提示超时。原因默认策略设为 DROP 之后没有放行已建立连接的规则或者放行规则写在了 DROP 后面。解决永远把-m state --state ESTABLISHED,RELATED -j ACCEPT放在第一条。如果已经断连通过 VNC 或物理终端登录执行iptables -F清空规则再重新按正确顺序配置。4.2 Nmap 扫描结果和实际开放端口不一致现象Nmap 显示 3306 开放但用 mysql 客户端连不上。原因Nmap 的 SYN 扫描只判断端口是否响应 SYN不判断应用层是否正常。有可能 MySQL 服务挂了但端口还被占用或者 iptables 只放行了特定源 IP。解决用nmap -sV -p 3306做版本探测如果显示tcpwrapped说明被防火墙拦截了。再检查 iptables 规则里 3306 的放行条件确认扫描主机的 IP 在允许范围内。4.3 MySQL 8.0 修改默认值语法报错现象执行ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 0提示语法错误。原因MySQL 8.0 之前版本不支持ALTER COLUMN ... SET DEFAULT这种写法需要用MODIFY COLUMN重写列定义。解决先SHOW CREATE TABLE 表名看当前列定义然后用ALTER TABLE 表名 MODIFY COLUMN 字段名 类型 DEFAULT 0修改。注意 MODIFY 要写全列的类型和属性否则会丢失原有约束。4.4 CTF 命令执行被过滤了关键字现象?cmdcat /flag返回空白或者提示 forbidden。原因靶机对cat、flag、空格等关键字做了黑名单过滤。解决用base64编码绕过或者用tac、head、tail替代cat用${IFS}替代空格用通配符fla?替代完整文件名。如果passthru被禁用试试system、exec、shell_exec这些函数。4.5 flag 文件找到了但读不出内容现象find找到了/flag但cat /flag提示权限不足。原因当前 shell 权限是 www-dataflag 文件权限是 root 600。解决先看有没有 SUID 文件可以提权find / -perm -4000 -type f 2/dev/null。或者检查 sudo 配置sudo -l看当前用户能执行哪些命令。如果题目只要求读 flag也可以试试通过 MySQL 的LOAD_FILE(/flag)读取前提是 MySQL 有 FILE 权限且 secure_file_priv 允许。5. 进阶技巧用一条命令完成端口扫描到规则生成的半自动化这套 AB 模块的题目做多了之后你会发现 A 模块的加固流程其实可以半自动化。我的习惯是先用 Nmap 输出 XML 格式的扫描结果再用一个 Python 脚本解析出开放端口自动生成 iptables 规则草稿最后人工审核一遍再执行。import xml.etree.ElementTree as ET # 解析 Nmap XML 输出提取开放端口 tree ET.parse(scan.xml) root tree.getroot() open_ports [] for host in root.findall(host): for port in host.findall(.//port): state port.find(state) if state is not None and state.get(state) open: port_id port.get(portid) service port.find(service) service_name service.get(name) if service is not None else unknown open_ports.append((port_id, service_name)) # 生成 iptables 规则草稿默认拒绝所有入站只放行必要端口 print(# 自动生成的 iptables 规则草稿请人工审核后执行) print(iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT) print(iptables -A INPUT -i lo -j ACCEPT) for port_id, service_name in open_ports: if service_name in (ssh, http, https): print(f# 放行 {service_name} 端口 {port_id}请确认来源 IP 范围) print(f# iptables -A INPUT -p tcp --dport {port_id} -s 你的管理网段 -j ACCEPT) else: print(f# 建议封堵 {service_name} 端口 {port_id}) print(fiptables -A INPUT -p tcp --dport {port_id} -j DROP) print(iptables -P INPUT DROP)这段脚本先用xml.etree.ElementTree解析 Nmap 的 XML 输出提取所有状态为 open 的端口和服务名。然后根据服务名判断SSH、HTTP、HTTPS 这类管理端口生成放行注释提醒你手动填来源网段其他端口直接生成 DROP 规则。最后输出默认策略为 DROP。注意脚本里放行规则是注释掉的因为来源网段需要根据实际环境填不能写死。这是自动化脚本的安全边界可以自动生成草稿但放行规则必须人工确认。我见过有人直接跑脚本把 3306 也放行了结果加固题反而被扣分。生成草稿后我会把规则写到一个临时文件里用iptables-restore --test先做语法检查确认没问题再正式加载。# 先测试规则文件语法是否正确 iptables-restore --test rules.v4 # 测试通过后再正式加载 iptables-restore rules.v4--test参数只做语法解析不实际修改内核规则表。这个习惯救过我很多次尤其是规则多的时候一条写错可能导致整个文件加载失败用--test可以先排掉语法错误。最后说一个我自己的教训做 A 模块加固时不要一上来就追求「全部封死」。先把题目要求的必封端口列出来逐条加规则每加一条就验证一次 SSH 是否还通。我早期比赛时图快一次性把规则全贴进去结果 SSH 断了重启靶机又回到初始状态白白浪费二十分钟。后来我养成的习惯是改 iptables 之前先开两个 SSH 会话一个用来操作一个用来兜底万一操作会话断了兜底会话还能进去清规则。这个习惯比任何技巧都管用。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
本地化Superset编排平台:统一管理AI代码助手与自动化QA测试实践 “Superset”这个词,做数据的人第一反应多半是Apache Superset那个BI可视化工具。但如果你最近混在AI代码助手这个圈子里,会发现还有另一类叫Superset的存在——它不是用来画报表的,而是把一堆AI代码助手、代码扫描器、自动化测试工具统一编排… · 2026/9/24 22:26:05
企业整体拥抱AI:不止于营销AIGC提效的落地路径 “十相周骏:企业整体拥抱AI,而不仅仅是营销团队使用AIGC提升内容生产效率”——这个观点在我最近参加的一次行业评审活动上被反复提及。作为常年混迹在品牌方和代理公司之间的营销技术从业者,我听过的关于AI的讨论不在少数,但真正… · 2026/9/24 22:25:52
Ricon组态系统:工业物联网协议转换与MQTT/WebSocket双通道数据中枢 1. Ricon组态系统不是“又一个可视化工具”,而是物联网现场的协议翻译官很多人第一次听说Ricon组态系统,下意识会把它归类为“类似组态王、力控、WinCC那样的工业画面组态软件”——能拖拉控件、画流程图、点动按钮、看实时曲线。这种理解没错࿰… · 2026/9/24 23:00:47
一文读懂程序里的魔数:从0xCCCCCCCC到0xDEADBEEF 我第一次认真琢磨“魔数”这件事,是在一个Windows崩溃现场:程序Debug版一启动就挂,调用栈里全是0xCCCCCCCC,变量窗口里也都是这个值。带我的同事扫了一眼,直接判断“栈上变量没初始化,编译器下了毒”。我当… · 2026/9/24 23:00:47
Qt与OpenCV图像视觉框架源码解析:从环境搭建到多线程架构 项目标题: Qt OpenCV图像视觉框架源码探秘项目正文: 基于标题及热词网络搜索的内容关键词: Qt, OpenCV, 图像视觉框架, 源码做图像视觉开发这些年,有件事我越来越确定:OpenCV只是工具箱,Qt才是把整个视觉系统真正撑起来的那个“骨架”。很多… · 2026/9/24 23:00:47
Qt+OpenCV图像视觉框架:核心机制、构建部署与常见坑解析 Qt OpenCV做图像视觉框架这件事,很多做上位机、工业检测、机器人项目的朋友迟早都会碰上。我见过太多人把OpenCV的demo跑通了,到Qt里一集成就各种翻车:要么图像显示黑屏,要么界面卡死,要么打包到别的机器上直接缺DLL跑… · 2026/9/24 23:00:47
Eudemon1000E密码遗忘恢复:从BootROM到配置找回全指南 当你发现 Eudemon1000E 的登录密码被遗忘时,通常不是一瞬间的事,而是某天打开终端准备改一条安全策略,敲回车,弹出 Login / Password,你翻遍手机备忘录和抽屉里的标签纸,试了七八个似是而非的密码ÿ… · 2026/9/24 23:00:47
OLAP高可用架构设计:从原理到故障恢复的工程实践指南 凌晨两点接到值班电话,说报表平台卡死,运营看板全部白屏,用户那边已经炸了锅。我打开监控一看,OLAP集群的查询接口P99延迟已经飙到30秒开外,几个核心节点CPU打满,队列里堆了几万个查询请求。那天晚上我盯着… · 2026/9/24 23:00:40
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44