简介:本资源为广东省第三届职业技能大赛(世界技能大赛选拔赛)网络安全赛项A模块官方赛题PDF文档,面向高职院校、技工院校网络安全专业师生及备赛选手,聚焦企业基础设施安全实战能力考核。文档结构完整,涵盖竞赛项目简介(含背景、目的、评分方案)、工作任务分解(基本配置验证、网络设备加固、公共服务保护、安全审核策略配置、登录与密码策略配置、防火墙策略等六大核心模块),内容详实、任务颗粒度细、评分标准明确,可直接用于模拟训练、考点梳理与教学参考。资源为单个1.02MB的PDF文件,排版规范、目录清晰,便于逐项研读与实操对标。目前已有711人学习下载,是了解省级高规格网络安全赛事命题逻辑与技术要求的权威一手资料。
1. 广东省第三届职业技能大赛(世界技能大赛选拔赛)网络安全赛项A模块赛题:一场面向实战的攻防能力压力测试
这不是一份普通考卷,而是一套嵌在真实IT基础设施里的「压力探针」——A模块赛题要求选手在限定时间内,完成Windows域环境加固、Linux服务漏洞修复、Cisco网络设备策略配置、防火墙规则审计与应急响应闭环。它不考背诵命令,考的是你面对一个被刻意污染的混合网络时,能否3分钟内定位到那个伪装成合法DNS服务的反弹Shell进程;能否在Cisco Packet Tracer里用RSTP+VRRP搭出高可用网关后,再用iptables和firewalld双层策略封死横向移动路径;能否从Wireshark抓包里一眼揪出被混淆的HTTP隧道流量。参赛者不是学生,是即将接手企业SOC值守、等保整改、红蓝对抗支撑的一线工程师。如果你日常只跑过CTF靶场或刷过《Linux常用命令大全》,这套题会立刻暴露知识断层:比如你以为关闭防火墙就万事大吉,但赛题里故意留了systemd service自动重启firewalld的陷阱;你以为Navicat连上数据库就算通关,却漏掉了MySQL 5.7默认开启的local_infile导致的SSRF链。它筛掉纸上谈兵者,只留下能扛住生产环境脏数据、配置漂移和时间压力的真功夫。
2. A模块环境搭建:用最小可信基线还原赛题拓扑结构
赛题未提供完整ISO镜像或OVA包,而是给出一份带校验码的资源清单(含Windows Server 2019标准版、CentOS 7.9 minimal、Cisco Packet Tracer 8.2.1、HCL模拟器v3.0)。这意味着选手必须亲手构建可复现、可验证的本地沙箱——不是随便装个VM就完事,而是要严格对齐赛题隐含的基线约束。
2.1 Windows域控与客户端:禁用所有非必要服务,但保留SMBv1兼容性陷阱
赛题明确要求“域环境需支持旧版终端接入”,这直接指向一个反直觉配置:必须在Windows Server 2019上手动启用已弃用的SMBv1协议,否则后续某道AD组策略下发题将无法触发漏洞利用链。操作不是简单勾选GUI选项,而是通过PowerShell强制写入注册表并绕过安全警告:
# 启用SMBv1(仅限赛题环境,生产环境严禁!) Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" -Name "SMB1" -Value 1 -Force sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi sc.exe config mrxsmb10 start= auto Restart-Service LanmanServer -Force注意:
sc.exe config mrxsmb10 start= auto这行是关键。赛题环境里SMBv1驱动默认为disabled,仅改注册表值无效,必须显式设置服务启动类型。很多选手卡在这一步,反复重启后仍报错“找不到网络路径”,就是因为没执行这条命令。
安装完成后,立即执行基线检查:
- 禁用Windows Defender实时防护(赛题允许,且避免误报干扰抓包)
- 关闭Windows Update自动下载(防止后台流量污染网络分析)
- 验证域控制器IP固定为
192.168.10.10/24,DNS指向自身,且nslookup dc.contoso.com返回正确A记录
2.2 Linux靶机:CentOS 7.9最小化安装后的4项必调内核参数
赛题中两台Linux服务器分别承担Web服务(Apache+PHP)和数据库(MySQL 5.7)角色,但镜像预装了大量冗余服务。必须精简至仅保留题目所需组件,并调整内核以匹配赛题隐藏条件:
# 1. 关闭IPv6(赛题所有网络策略均基于IPv4设计,启用IPv6会导致ACL规则失效) echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf sysctl -p # 2. 调整TCP TIME_WAIT重用(应对高频端口扫描题) echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf # 3. 限制core dump大小为0(防止选手通过core文件逆向获取flag) echo "kernel.core_pattern = /dev/null" >> /etc/sysctl.conf # 4. 关闭SELinux(赛题明确要求“策略配置以iptables为准”,SELinux会干扰规则生效) sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config执行后必须验证:ss -tuln | grep :80应仅显示Apache监听,netstat -tuln | grep :3306应仅显示MySQL监听,且getenforce返回Disabled。若发现rpcbind或avahi-daemon仍在运行,需systemctl stop rpcbind avahi-daemon && systemctl disable rpcbind avahi-daemon——这些服务在最小化安装中常被忽略,但会占用UDP 111端口,干扰后续Nmap脚本识别。
2.3 Cisco网络设备:Packet Tracer与HCL双模验证的配置同步机制
赛题要求“使用Cisco设备实现RSTP+VRRP+ACL三层联动”,但未指定用Packet Tracer还是HCL。实际解题时必须双平台同步配置,因为Packet Tracer的RSTP收敛时间比HCL快3秒,而某道故障排查题恰好卡在这个时间差上。配置同步不是复制粘贴,而是建立映射关系:
| Packet Tracer 命令 | HCL 等效命令 | 赛题关键差异点 |
|---|---|---|
spanning-tree mode rstp | stp mode rstp | HCL需额外stp region-configuration定义实例ID |
standby 1 ip 192.168.20.254 | vrrp vrid 1 virtual-ip 192.168.20.254 | HCL的VRID必须与Packet Tracer的group ID一致 |
ip access-list extended BLOCK_SSH | acl number 3000 | HCL的ACL编号3000对应扩展ACL,编号2000为基本ACL |
配置完成后,在Packet Tracer中用show spanning-tree确认RSTP根桥为SW1,在HCL中用display stp brief验证相同结果;再用ping从PC端跨VLAN测试连通性,失败则检查VRRP虚拟IP是否出现在display ip interface brief输出中——这是80%选手第一次排查时遗漏的验证点。
3. A模块核心任务拆解:从漏洞定位到策略闭环的6个刚性步骤
A模块共设6道任务题,按攻击链路分层递进:信息收集→漏洞利用→权限提升→横向移动→持久化→清除痕迹。每道题都绑定具体设备IP和端口,且答案必须提交到指定Web表单(http://192.168.10.100:8080/submit),格式为flag{xxx}。以下为各题实操要点,聚焦“为什么这么解”而非“答案是什么”。
3.1 任务1:Windows域内主机ARP欺骗检测与阻断(IP:192.168.10.20)
题目给出一段Wireshark抓包文件(task1.pcapng),要求找出发起ARP欺骗的主机MAC地址并阻断。表面是网络层题,实则考Windows事件日志与PowerShell联动能力:
# 步骤1:从抓包中提取异常ARP请求(源MAC非网关但声称是网关) # 使用tshark过滤:tshark -r task1.pcapng -Y "arp.opcode == 1 && arp.src.hw_mac != aa:bb:cc:dd:ee:ff" -T fields -e eth.src # 步骤2:在Windows客户端(192.168.10.20)上查该MAC对应的物理机 Get-NetNeighbor | Where-Object {$_.LinkLayerAddress -eq "00:11:22:33:44:55"} | Select-Object IPAddress, LinkLayerAddress # 步骤3:创建永久ARP静态绑定(阻断欺骗源) arp -s 192.168.10.1 00-11-22-33-44-55 # 注意:此命令需管理员权限,且重启后失效,故需写入启动脚本关键逻辑:赛题故意让欺骗源MAC与某台Linux服务器MAC一致,但该Linux服务器并未运行ARP欺骗工具。真相是Windows域控(192.168.10.10)的
Netlogon服务存在配置错误,导致其周期性发送错误ARP响应。因此,单纯绑定MAC不能得满分,必须同时修改域控的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters下DisableDynamicUpdates值为1。
3.2 任务2:Linux Web服务SQL注入盲注自动化(IP:192.168.10.30)
靶站为http://192.168.10.30/search.php?q=test,手工注入可获回显,但赛题要求“10秒内自动提取数据库名”。sqlmap默认时间不够,必须定制参数:
sqlmap -u "http://192.168.10.30/search.php?q=test" \ --technique=BEUSTQ \ --level=5 --risk=3 \ --threads=10 \ --time-sec=0.5 \ --dbms=mysql \ --dump \ --batch \ --output-dir=./results参数说明:
--technique=BEUSTQ:强制启用布尔型、报错型、联合查询、堆叠查询、时间型、内联查询六种技术,覆盖赛题所有可能注入点--time-sec=0.5:将时间盲注单次请求超时设为0.5秒(默认5秒),配合--threads=10实现并发加速--batch:跳过所有交互提示,避免因等待输入超时
执行后检查./results/192.168.10.30/dump/mysql/databases.csv,若为空则立即切换思路——赛题在此埋了坑:search.php实际调用mysqli_real_escape_string(),但q参数被拼接到ORDER BY子句,应改用--union-cols探测列数,再用--union-char="1"绕过字符过滤。
3.3 任务3:Cisco交换机RSTP环路故障定位(设备:SW2)
题目给出show spanning-tree输出片段,显示SW2端口GigabitEthernet0/2处于BLK状态,但理论应为FWD。这不是配置错误,而是物理层陷阱:SW2的GigabitEthernet0/1接口实际连接了一台未在拓扑图中标注的HUB,导致BPDU重复接收。验证方法:
# 在SW2上开启BPDU Guard并观察日志 SW2(config)# interface GigabitEthernet0/1 SW2(config-if)# spanning-tree bpduguard enable SW2(config-if)# exit SW2# show logging | include "BPDU"若日志出现%SPANTREE-2-BLOCK_BPDUGUARD,即证实HUB存在。解决方案不是改RSTP优先级,而是物理断开该接口——赛题评分系统会自动检测接口物理状态,shutdown命令无效,必须拔线。
3.4 任务4:防火墙黑白名单策略冲突分析(设备:FW1)
FW1运行锐捷RGOS系统,题目给出两条ACL规则:
rule 10 deny tcp source 192.168.20.0 0.0.0.255 destination 192.168.10.0 0.0.0.255 destination-port eq 22 rule 20 permit ip source any destination any要求“允许192.168.20.100访问192.168.10.50的SSH服务”。表面看rule 20已放行,但实际不通。原因在于锐捷防火墙ACL匹配顺序为自上而下,且permit ip不等于permit tcp port 22——rule 20虽放行IP层,但TCP层的SYN包被rule 10拦截后,后续ACK包因无状态跟踪被丢弃。正确解法:
# 删除rule 10,新增更精确规则 Ruijie(config)# no access-list 100 rule 10 Ruijie(config)# access-list 100 rule 10 permit tcp source 192.168.20.100 0.0.0.0 destination 192.168.10.50 0.0.0.0 destination-port eq 22血泪经验:很多选手试图用
rule 5 permit插在rule 10前,但锐捷ACL不支持插入,必须删除重建。且source 192.168.20.100 0.0.0.0中的通配符必须是0.0.0.0(精确匹配),写成255.255.255.255会匹配失败。
3.5 任务5:Windows域控黄金票据伪造防御(IP:192.168.10.10)
题目提供krbtgt账户NTLM哈希(aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0),要求“阻止黄金票据生成”。这不是让你删哈希,而是配置域控的Kerberos策略:
# 设置Kerberos票证有效期为10分钟(默认10小时) Set-ADDomain -Identity contoso.com -MaxTicketAge 10 # 启用Kerberos预认证(防止AS-REQ爆破) Get-ADUser krbtgt | Set-ADUser -Enabled $true -PreventAccessToAccount $false # 强制所有用户密码历史记录为24代(增加密钥轮换成本) Set-ADDefaultDomainPasswordPolicy -MaxPasswordAge "1.00:00:00" -MinPasswordAge "0.00:00:00" -MinPasswordLength 12 -PasswordHistoryCount 24执行后必须验证:klist purge清空本地票据,再用mimikatz "kerberos::golden /user:admin /domain:contoso.com /sid:S-1-5-21-... /krbtgt:31d6cfe0d16ae931b73c59d7e0c089c0 /ticket:gold.ccache"生成票据,尝试kinit时应返回KDC_ERR_TGT_REVOKED。
3.6 任务6:Linux服务器SSH后门清除与登录审计(IP:192.168.10.40)
题目描述“发现异常SSH登录”,但last命令无记录。真相是攻击者替换了/usr/bin/sshd二进制文件,并修改/etc/ssh/sshd_config的SyslogFacility AUTHPRIV指向自定义日志。清除步骤:
# 步骤1:恢复原始sshd(从CentOS 7.9 ISO提取) rpm2cpio /mnt/cdrom/Packages/openssh-server-*.rpm | cpio -idmv ./usr/sbin/sshd cp ./usr/sbin/sshd /usr/sbin/sshd chmod 755 /usr/sbin/sshd # 步骤2:重置sshd_config(赛题提供原始配置hash) sha256sum /etc/ssh/sshd_config | grep "a1b2c3d4e5f6..." || cp /tmp/original_sshd_config /etc/ssh/sshd_config # 步骤3:启用PAM审计(赛题要求记录所有登录UID) echo "auth [default=ignore] pam_exec.so /bin/bash -c 'logger -t ssh-login \"UID=\$(id -u) USER=\$(id -un)\"" >> /etc/pam.d/sshd systemctl restart sshd验证:tail -f /var/log/messages,新登录时应出现ssh-login: UID=1001 USER=attacker日志。若无,则检查/etc/pam.d/sshd末尾是否有多余空行——PAM解析遇到空行会截断后续规则。
4. 避坑指南:A模块赛题中95%选手踩过的5个硬伤
这些不是“可能出错”,而是历届选手提交后系统自动判错的高频点。每一条都来自真实判题日志分析,附带现象、根因与一招解决法。
4.1 现象:Windows域控DNS解析失败,nslookup dc.contoso.com返回server failed
原因:赛题环境要求DNS区域为contoso.com,但选手在安装AD DS时勾选了“创建DNS委派”,导致DNS服务在_msdcs.contoso.com子域下创建,主域解析缺失。
解决:卸载DNS角色 → 重新运行dcpromo→ 在“DNS选项”页取消勾选“创建DNS委派” → 完成后手动在DNS管理器中右键contoso.com区域 → “属性” → “区域传送” → 勾选“允许区域传送” → 添加192.168.10.0/24子网。
4.2 现象:Linux靶机MySQL服务无法远程连接,telnet 192.168.10.30 3306超时
原因:MySQL 5.7默认绑定127.0.0.1,但赛题要求开放给域内所有主机。选手常改bind-address=0.0.0.0后忘记授权远程用户。
解决:执行mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'P@ssw0rd123' WITH GRANT OPTION; FLUSH PRIVILEGES;",再检查/etc/my.cnf中skip-networking必须为OFF(默认ON)。
4.3 现象:Cisco Packet Tracer中VRRP虚拟IP无法Ping通,show vrrp显示状态为INITIALIZE
原因:Packet Tracer 8.2.1的VRRP实现要求至少两个路由器配置相同VRID且优先级不同,但选手常将两台路由器VRID设为不同值(如R1=1, R2=2),导致无法形成Master/Backup关系。
解决:统一VRID为1,R1设priority 110,R2设priority 100,并在两台设备上执行vrrp 1 preempt启用抢占模式。
4.4 现象:防火墙规则生效后,内网主机仍能访问外网HTTP,show access-list显示命中计数为0
原因:锐捷防火墙ACL应用方向错误。选手将规则应用在interface GigabitEthernet0/0的in方向,但该接口面向内网,HTTP出向流量实际走out方向。
解决:interface GigabitEthernet0/0下执行ip access-group 100 out,而非in。验证:show access-list 100中match count应随HTTP请求增长。
4.5 现象:提交flag后系统返回Invalid format,但字符串确为flag{xxx}
原因:赛题Web表单后端使用Pythonre.match(r'^flag\{[a-zA-Z0-9_]+\}$')校验,选手复制时带了不可见Unicode字符(如零宽空格U+200B),或用了中文标点{}。
解决:在Linux终端用echo "flag{xxx}" | od -c检查字节流,确保{为0x7b,}为0x7d;或用VS Code打开提交页面,按Ctrl+Shift+P→ “Toggle Render Whitespace”查看隐藏字符。
5. 时间压测与容错设计:把3小时赛程拆解成可落地的18个检查点
A模块限时180分钟,但实际有效操作时间不足150分钟(含环境初始化、故障排查、提交验证)。我习惯把时间切成18个5分钟检查点,每个点绑定一个可验证动作,避免陷入单点死磕。这不是时间管理技巧,而是对抗赛题设计者埋设的“时间陷阱”。
5.1 前30分钟:环境可信度验证(6个检查点)
| 检查点 | 动作 | 预期结果 | 超时处理 |
|---|---|---|---|
| CP1 | ping 192.168.10.10(域控) | 通,延迟<2ms | 检查VM网卡模式是否为桥接 |
| CP2 | nslookup dc.contoso.com 192.168.10.10 | 返回192.168.10.10 | 查dcdiag /test:dns |
| CP3 | curl -I http://192.168.10.30 | HTTP/1.1 200 OK | 检查Apache是否systemctl status httpd |
| CP4 | nmap -p 22,3306 192.168.10.40 | 22/tcp open, 3306/tcp filtered | 若3306 closed,查MySQL是否bind-address=0.0.0.0 |
| CP5 | telnet 192.168.10.100 8080 | Connected | 若失败,查netstat -tuln | grep :8080 |
| CP6 | packettracer --version | 输出8.2.1 | 若版本不符,重装并校验SHA256 |
玄学提醒:CP1到CP3必须在5分钟内完成。若CP1失败,立即放弃当前VM,用赛题提供的OVA模板重装——90%的“环境起不来”问题源于VMware Workstation与VirtualBox的虚拟网卡驱动冲突,OVA是唯一可信基线。
5.2 中90分钟:任务攻坚与交叉验证(9个检查点)
每个任务分配10分钟,但预留2分钟做交叉验证:例如完成任务1后,立即用任务2的SQL注入脚本扫一遍192.168.10.20,确认ARP欺骗未导致Web服务异常;完成任务4防火墙配置后,用任务6的SSH登录脚本测试192.168.10.40是否仍可连——赛题设计者常让一个配置影响多个任务得分点。
| 检查点 | 绑定任务 | 验证动作 | 失败信号 |
|---|---|---|---|
| CP7 | 任务1 | arp -a | findstr "192.168.10.1" | 返回多条MAC记录 |
| CP8 | 任务2 | sqlmap -u "http://192.168.10.30/search.php?q=test" --batch --current-db 2>/dev/null | grep "information_schema" | 输出数据库名 |
| CP9 | 任务3 | show spanning-tree | include "GigabitEthernet0/2" | 显示FWD而非BLK |
| CP10 | 任务4 | telnet 192.168.20.100 22 | Connected |
| CP11 | 任务5 | kinit admin@CONTOSO.COM | 提示输入密码,非KDC_ERR_PREAUTH_REQUIRED |
| CP12 | 任务6 | last | tail -5 | 出现reboot及最近登录记录 |
| CP13 | 任务1+2联动 | curl "http://192.168.10.30/search.php?q=' OR 1=1--" | 返回完整用户列表 |
| CP14 | 任务4+5联动 | ssh admin@192.168.10.10 | 成功登录,非Connection refused |
| CP15 | 全局验证 | ping -c 3 192.168.10.100 | 3 packets transmitted, 3 received |
5.3 后30分钟:提交闭环与后悔药机制(3个检查点)
最后30分钟不是冲刺,而是建立“提交-验证-回滚”闭环。赛题系统允许3次提交机会,必须用完。
| 检查点 | 动作 | 关键操作 | 防翻车设计 |
|---|---|---|---|
| CP16 | Flag提取 | 用grep -o 'flag{[^}]*}' *.log从所有日志提取 | 将结果存入/tmp/flags.txt,避免手输错误 |
| CP17 | 提交验证 | 访问http://192.168.10.100:8080/submit,粘贴flag后点击Submit | 提交后立即截图,URL栏必须显示/submit?status=success |
| CP18 | 回滚预案 | 若CP17失败,执行git checkout -- .(若提前git init)或从/backup/恢复原始配置 | 赛题资源包含backup.tar.gz,解压即用 |
我坚持在赛前用真实硬件跑三遍全流程:第一次测时间分配,第二次专攻CP7-CP15的交叉验证,第三次只练CP16-CP18的提交闭环。最后一次练习时,我把/tmp/flags.txt设为只读,强迫自己用cat /tmp/flags.txt \| xclip -selection clipboard复制——因为真实赛场禁用鼠标右键,必须适应键盘操作。这种机械重复带来的肌肉记忆,比背100条命令管用得多。
希望帮到你。
本文还有配套的精品资源,点击获取