20251905 2025-2026-2 《网络攻防实践》课程总结

20251905 2025-2026-2 《网络攻防实践》课程总结

1. 内容总结

第1次实践 虚拟化网络攻防实验环境搭建

第一次实践主要任务是搭建一套能够支撑后续攻防实验的虚拟化网络环境。我在 VMware 中配置攻击机网段和靶机网段,将 Kali、WinXPattacker、SEEDUbuntu、Metasploitable、Win2kServer 和 Roo Honeywall 等虚拟机放入不同网络位置,再通过 Honeywall 作为透明网关连接两个子网。这个过程看似只是“配环境”,实际涉及虚拟交换机、NAT、Host-only、子网掩码、默认网关和连通性测试等一整套基础知识。最后能够让攻击流量必须经过蜜网网关,也为之后的检测、防御和取证分析打好了基础。

第2次实践 网络信息搜集

第二次实践围绕攻击前的信息搜集展开。我使用 Whois、nslookup、dig 和 IP 地理位置查询工具获取目标域名、IP 地址、注册机构和网络归属信息;通过 Windows 资源监视器观察 WeChat.exe 的网络连接,体会即时通信软件在特定通信场景下可能暴露的网络信息;再使用 Nmap 对靶机进行主机存活探测、TCP/UDP 端口扫描、服务版本识别和操作系统指纹识别。最后通过 Nessus 对 Windows 靶机进行漏洞扫描,看到 SMB、RPC、IIS、RDP 等服务暴露出的高危漏洞,也认识到信息搜集质量会直接决定后续渗透攻击的效率和方向。

第3次实践 网络嗅探与协议分析

第三次实践主要训练流量捕获和协议分析能力。我使用 tcpdump 抓取 Web 访问流量,理解命令行抓包工具通过过滤条件提取目标数据包的方式;再使用 Wireshark 抓取 Telnet 登录过程,通过 Follow TCP Stream 直接看到明文传输的用户名和口令。对 listen.pcap 的取证分析则更接近真实安全分析场景,需要从数据包统计、TCP 标志位、扫描频率和操作系统指纹等线索中判断攻击者使用了 Nmap,并识别其采用 SYN 半开扫描。这次实践让我第一次比较直观地理解“数据包会说话”。

第4次实践 TCP/IP 协议栈攻击

第四次实践把网络协议的设计缺陷转化为可观察的攻击效果。我使用 netwox 等工具完成 ARP 缓存欺骗、ICMP 重定向、SYN Flood、TCP RST 和 TCP 会话劫持等实验。ARP 欺骗利用的是局域网内 ARP 缺少认证机制,ICMP 重定向利用的是主机对路由提示消息的信任,SYN Flood 利用的是 TCP 三次握手中半连接队列会消耗资源,TCP RST 和会话劫持则让我进一步理解了序列号、确认号和连接状态的重要性。做完这次实验后,我对“协议设计之初没有充分考虑安全性”有了非常具体的认识。

第5次实践 网络安全防范技术

第五次实践从攻击转向防守,核心是防火墙和入侵检测。我使用 iptables 编写包过滤规则,实现丢弃 ICMP 回显请求、按源 IP 限制访问等功能,也理解了规则顺序、默认策略、链和表之间的关系。Snort 部分通过离线分析 pcap 文件识别扫描行为和异常流量,让我熟悉了基于规则的 IDS 工作方式。进一步分析 Honeywall 的防火墙脚本、Snort 配置和 inline 模式后,我认识到真实防御不是单点工具,而是由访问控制、检测告警、日志记录和阻断策略共同构成的体系。

第6次实践 Windows 系统安全攻防

第六次实践聚焦 Windows 靶机的远程渗透和取证分析。我使用 Metasploit 中的 MS08-067 模块对 Windows 2000 靶机进行攻击,通过配置 RHOST、LHOST 和 Payload 获取远程 Shell。取证部分更考验耐心,需要从蜜罐捕获的流量中还原一次 NT 系统破解攻击:攻击者先利用 Web 服务漏洞探测和入侵,再通过 FTP 下载 nc.exe、pdump.exe 等工具,建立反向 Shell,执行系统信息收集、口令导出和痕迹清理等操作。这次实践让我明白,漏洞利用只是攻击链中的一个环节,真正的安全分析还要能还原攻击者之后做了什么。

第7次实践 Linux 系统安全攻防

第七次实践转向 Linux 靶机,主要利用 Metasploitable 中的 Samba usermap_script 漏洞进行攻击。该漏洞本质上是命令注入:攻击者构造包含 shell 元字符的用户名,使 Samba 在调用脚本时执行恶意命令,从而获得远程控制权限。攻防对抗中,防守方使用 tcpdump 和 Wireshark 对攻击过程进行抓包,从 SMB 会话中提取包含 mkfifo、nc 和 /bin/sh 的反向 Shell 命令。相比 Windows 实验,这次让我更清楚地看到 Linux 服务漏洞、命令注入和反向连接之间的关系。

第8次实践 恶意代码分析与僵尸网络

第八次实践是恶意代码分析入门。我先使用 DIE 判断 RaDa.exe 是 Windows 32 位 PE 程序,并识别其使用 UPX 加壳;脱壳后再交给 IDA 分析字符串、作者信息、可疑 IP 和注册表操作。结合微步云沙箱、Process Explorer 等工具,可以看到样本会访问 10.10.10.10、创建目录、操作注册表并尝试建立持久化。Crackme 分析部分则训练了从字符串、函数调用图和参数判断逻辑中倒推出正确输入的能力。最后的 IRC 僵尸网络流量分析让我理解了 Botnet 如何通过服务器和频道统一控制大量受害主机。

第9次实践 缓冲区溢出和 Shellcode

第九次实践是我投入精力最多的一次。实验分为三个层次:第一,直接用 IDA 修改二进制文件,把 main 中的 call foo 改成 call getShell;第二,分析 pwn1 中 gets() 导致的栈溢出,构造“28 字节填充 + 4 字节覆盖 EBP + getShell 地址”的 Payload,让函数返回时跳转到指定函数;第三,关闭地址随机化后,用 gdb 定位输入字符串在栈上的位置,构造包含 Shellcode 的攻击字符串,使程序执行栈中的自定义代码。这次实践把反汇编、栈帧、返回地址、小端序、Shellcode 和调试验证真正串了起来。

第10次实践 Web 应用程序安全攻防

第十次实践围绕 SQL 注入和 XSS 展开。在 SQL 注入部分,我先熟悉 Users 数据库和 credential 表结构,再通过单引号测试确认登录页面存在拼接 SQL 的问题,构造恒真条件绕过登录验证;在更新资料页面中,通过闭合 nickname 字段并追加 salary 更新语句,实现 UPDATE 注入。防御部分用 prepare 和 bind_param 将 SQL 语句改写为参数化查询。XSS 部分则在 Elgg 个人资料中注入 JavaScript,实现弹窗、读取 Cookie、发送 Cookie、自动添加好友、修改资料和蠕虫传播。最后通过输入过滤、输出编码、CSP 和 HttpOnly Cookie 理解了前端漏洞的防御思路。

第11次实践 Web 浏览器渗透攻击与网页木马分析

第十一次实践综合性最强。首先使用 Metasploit 的 MS06-014 模块生成恶意页面,Windows 2000 靶机使用 IE 访问后成功建立反向 Shell。随后进入网页木马取证分析:从 start.html 中发现隐藏加载路径,追踪到 new09.htm、1299644.js 和 kl.htm;对 URL 计算 MD5,在样本目录中定位对应文件;面对混淆脚本时,识别 Base64、XXTEA、十六进制字符串和 document.write 等特征,逐层恢复真实代码;最后结合 IDA 分析下载得到的二进制文件,提取可疑 URL、URLDownloadToFileA 等关键行为。攻防对抗部分还尝试将多个浏览器漏洞入口隐藏到统一页面中,并从防守角度做解混淆分析。

2. 最喜欢且做得最好的实践是哪次?为什么?

我最喜欢、也认为自己做得最好的是第九次实践:缓冲区溢出和 Shellcode。

前面的很多实验虽然也很有成就感,但不少环节是围绕成熟工具展开的。例如使用 Metasploit 时,只要选好模块、设置目标地址和 Payload,就能得到比较直接的反馈。第九次实践不一样,它要求我真正理解程序在内存中的运行方式。gets() 为什么危险,缓冲区为什么会覆盖 EBP 和返回地址,返回地址为什么要按小端序写入,Shellcode 又为什么能够作为机器码被 CPU 执行,这些问题都不能只靠“照着做”解决。

这次实践最让我印象深的是从三个层次逐步接近控制流劫持。第一步直接修改二进制文件,能非常直观地看到机器指令决定程序路径;第二步用栈溢出覆盖返回地址,让我理解攻击者并不是随便输入一串很长的字符串,而是在精确计算偏移量;第三步构造 Shellcode,则进一步要求我找到输入数据在栈中的实际地址,并考虑地址随机化、gdb 内外环境差异等问题。

在这个过程中,我也遇到了具体问题。比如文件传到虚拟机后无法执行,需要用 chmod +x 赋予权限;调试时断点位置选得不合适,程序没有按预期中断;构造 Payload 时,地址写错一个字节就会导致程序崩溃。正是这些问题逼着我反复回到反汇编、栈布局和寄存器状态中去确认原因。最后看到 Shell 弹出来时,我对“漏洞利用的本质是控制程序执行流”这句话才算真正有了体会。

选择这次实践还有一个原因:它把我之前学过但掌握不牢的基础知识重新串了起来。计算机组成中的机器码和寄存器,操作系统中的进程地址空间和栈,程序设计中的危险函数,网络攻防中的漏洞利用,在这次实验里全部汇合到一个小小的 pwn1 程序中。它让我感觉自己不只是会用工具,而是在开始理解工具背后的原理。

3. 本门课学到的知识总结

3.1 安全加固和检测技术

本课程最早建立起来的是检测和加固意识。第二次实践中,Nmap 和 Nessus 让我理解了资产发现、端口扫描、服务识别、漏洞扫描之间的递进关系。Nmap 适合快速确认目标是否存活、开放了哪些端口、运行什么服务;Nessus 则会把服务版本与漏洞库匹配,给出更系统的风险报告。例如 Windows 靶机上暴露的 SMB、RPC、IIS、RDP 等服务,本身只是开放端口,但结合版本和漏洞信息后,就能对应到 MS08-067、MS17-010、MS03-026 等高危漏洞。

第五次实践则从防御侧补上了加固方法。iptables 的规则不是简单地写几条命令,而是要理解 INPUT、OUTPUT、FORWARD 链,理解 ACCEPT、DROP 的匹配顺序,理解默认拒绝和白名单策略。Snort 让我认识到 IDS 的核心是规则匹配和流量特征识别:端口扫描、SYN 异常、ARP 欺骗等攻击虽然方式不同,但都会在流量层留下可识别的模式。Honeywall 中防火墙、Snort 和日志系统的配合,也体现了实际安全防御中“控制、检测、记录、响应”的完整链条。

3.2 Web 安全技术

Web 安全部分主要集中在第十次实践。SQL 注入的根源是程序把用户输入当作 SQL 代码的一部分拼接执行。登录页面中,name='$input_uname' and Password='$hashed_pwd' 这样的拼接方式给了攻击者闭合引号、添加条件和使用注释符的机会;资料更新页面中的 UPDATE 注入则说明,注入不只会导致越权登录,也可能直接篡改数据库字段。

XSS 的危险在于脚本执行位置从攻击者变成了受害者浏览器。最开始只是一个 alert 弹窗,但继续向下做,就能读取 Cookie、向攻击者主机发送请求、自动添加好友、修改受害者资料,甚至把恶意脚本复制到新的页面中形成蠕虫传播。它让我意识到,前端输入输出同样是安全边界。防御 SQL 注入要使用 Prepared Statement,把语句结构和数据分离;防御 XSS 则要输入过滤、输出编码、限制脚本来源,并给 Cookie 设置 HttpOnly 等属性。

3.3 逆向分析技术

逆向分析在第八、九、十一次实践中反复出现。第八次的 RaDa 样本让我熟悉了恶意代码静态分析流程:先判断文件类型和平台,再识别是否加壳,脱壳后提取字符串、查看导入函数和关键调用,最后结合动态行为确认样本功能。DIE、IDA、Process Explorer 和沙箱工具各自承担不同角色,组合使用比单独依赖一个工具可靠得多。

Crackme 实验则让我理解逆向分析的基本思路:从输出字符串入手,通过交叉引用找到判断分支,再分析程序对参数、文件名或字符串的比较逻辑。第九次实践中,IDA 不再只是“看代码”的工具,而是直接用于定位 mainfoogetShell 的地址和调用关系。第十一次的网页木马分析又把逆向范围扩展到 JavaScript 混淆和二进制载荷分析,要求先解开 Base64、XXTEA 和十六进制字符串,再继续分析下载程序的行为。

3.4 主流代码审计技术

代码审计的关键是追踪不可信输入如何进入敏感操作。第十次实践中,我通过浏览器开发者工具确认登录请求到达 unsafe_home.php,再查看源码发现用户名和密码直接拼接到 SQL 查询中;编辑资料功能中的 unsafe_edit_backend.php 也同样将 nickname、email、address 等参数拼接进 UPDATE 语句。这就是典型的数据与代码混杂问题。

第七次 Samba usermap_script 漏洞与 SQL 注入在本质上也有相似之处:外部输入被带入命令解释环境,导致攻击者能够改变原本的执行语义。第十一次网页木马分析中,代码审计对象从 PHP 变成 JavaScript,需要重点关注 evaldocument.writeunescape、ActiveX 对象创建和远程 URL 下载等危险行为。通过这些实践,我逐渐形成了一个审计习惯:先找输入入口,再找解释器或敏感 API,最后判断中间是否有过滤、编码或权限限制。

3.5 程序设计

这门课让我认识到,程序设计能力不仅是写业务代码,也包括理解程序如何被滥用。第九次实践中,gets() 这样的危险函数说明,缺少边界检查会直接破坏栈结构。构造 Payload 时,我使用 pwntools 生成数据,按偏移量拼接填充、返回地址和 Shellcode;调试时使用 gdb 观察栈地址和程序执行状态。这些操作都要求对 Python、汇编、C 语言调用约定和 Linux 进程内存布局有一定了解。

第十次实践中,对 PHP 后端代码进行 Prepared Statement 改写,也让我体会到安全编码不是额外装饰,而是功能实现的一部分。第十一次实践中,用 Python 搭建简单 Web 服务、隐藏多个恶意入口、再对 JavaScript 进行混淆和解混淆,则进一步说明脚本能力在攻防实验中非常实用。今后如果要提升攻防能力,不能只会调用工具,还需要能自己写脚本处理数据包、生成 Payload、批量分析日志和自动化复现实验。

3.6 计算机病毒技术

第八次实践让我对病毒、蠕虫、木马、后门和僵尸网络之间的区别有了更清楚的认识。病毒通常依附宿主文件传播,蠕虫更强调主动复制和网络扩散,木马侧重伪装和远程控制,后门则为攻击者保留长期访问入口。RaDa 样本表现出远控木马的典型特征:创建目录、复制自身、写注册表、连接 C2 地址并执行远程指令。

僵尸网络分析部分尤其有代表性。IRC 协议中的 NICK、USER、JOIN 等消息看起来只是聊天协议的一部分,但攻击者可以让大量受控主机加入同一频道,通过频道消息统一下发命令。分析蜜罐主机与多个 IRC 服务器通信、统计连接主机数量、识别默认端口 6667 的流量,让我理解 Botnet 为什么能够用于 DDoS、垃圾邮件、恶意软件传播和跳板攻击。

3.7 网络溯源及防范技术

网络溯源的核心是从日志和流量中还原攻击时间线。第三次实践中的 listen.pcap 分析是第一次训练:通过源 IP、目的 IP、TCP 标志位和数据包数量判断扫描者、扫描目标和扫描方式。第六次实践的 NT 系统破解取证更完整,需要从 HTTP、FTP、反向 Shell 等多个流中找出攻击者的每一步操作,最终还原从漏洞利用到下载工具、执行命令、导出口令和清理痕迹的攻击链。

第七次和第十一次实践也都强化了这种能力。Linux 攻防中,防守方通过 Wireshark 看到 SMB 请求中的命令注入载荷和反向连接内容;浏览器木马分析中,则要从 start.html、new09.htm、kl.htm、下载 URL、MD5 样本和二进制程序之间建立关系。溯源不是只找一个 IP,而是把证据串成能解释攻击过程的链条。

3.8 加密解密技术

加密解密知识在第十一次实践中体现得最集中。网页木马为了隐藏真实意图,使用了 Base64、XXTEA、十六进制字符串和多层脚本拼接。分析时不能直接运行可疑代码,而是要先识别编码方式,将危险执行函数替换为输出函数,逐层恢复真实脚本内容。实验中 xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74') 这类代码让我直观理解了恶意代码如何利用加密和编码对抗分析。

此外,哈希也在取证中发挥了作用。对 URL 计算 32 位 MD5 后在样本目录中定位文件,可以避免直接暴露恶意链接;对下载文件计算哈希值,则可以判断多个 URL 是否指向同一份样本。哈希不是加密,但它在完整性校验、样本去重和证据固定中非常重要。

3.9 信息系统运行维护

第一、五、六、七次实践都涉及系统运维能力。虚拟机网络配置、静态 IP、网关、路由、服务启动、文件权限、工具安装和环境排错贯穿整个学期。第一次搭建 Honeywall 时,我需要理解三块网卡分别承担外部、内部和管理接口的角色;第二次安装 Nessus 时,需要启动 nessusd 服务并等待插件初始化;第九次文件无法执行时,需要用 chmod +x 解决权限问题。

安全运维的核心原则也逐渐清晰:只开启必要服务,及时修复高危漏洞;防火墙默认拒绝,只放行明确需要的流量;关键服务要有日志,方便后续审计;实验环境必须隔离,避免攻击流量影响真实网络。很多攻击能成功,并不是因为攻击者多高明,而是因为系统长期未打补丁、服务暴露过多、配置缺少最小权限。

3.10 网络协议分析

网络协议分析是本课程最基础也最反复使用的能力。TCP/IP 协议栈中的 ARP、ICMP、TCP、HTTP、Telnet、FTP、SMB、IRC 等协议都在不同实验中出现。第三次实践让我看到 Telnet 明文传输的风险;第四次实践让我理解 ARP 无认证、ICMP 可伪造、TCP 半连接队列和 RST 包的攻击面;第六、七次实践中,SMB、FTP 和反向 Shell 流量成为还原攻击过程的重要证据。

Wireshark 的 Follow TCP Stream 是我用得最多的功能之一,它能把零散的数据包恢复成更接近应用层会话的内容。tcpdump 则适合在命令行环境中快速抓取和过滤流量。理解协议不是为了背字段,而是为了知道一次攻击在网络层、传输层和应用层分别留下什么痕迹。

3.11 数据库

数据库知识主要在 SQL 注入实验中得到强化。实验开始前,我先使用 show databasesuse Usersshow tablesselect * from credential 熟悉数据库结构,了解 credential 表中包含 eid、password、salary、ssn 等敏感字段。之后再构造 SELECT 和 UPDATE 注入,就能清楚知道每个 Payload 影响的是哪条 SQL 语句、哪个字段和哪类数据。

这次实践让我认识到数据库安全不仅是数据库管理员的问题,也和 Web 开发紧密相关。应用如果使用 root 账号连接数据库、拼接 SQL、缺少权限隔离,那么一个输入点就可能造成登录绕过、数据泄露、字段篡改甚至进一步提权。参数化查询、最小权限、错误信息隐藏和敏感字段保护,是数据库安全的基本要求。

3.12 法律

网络攻防技术必须建立在合法授权的边界内。课程中的所有扫描、攻击、嗅探和恶意代码分析都在隔离的实验环境中完成,这是底线。真实网络中,未经授权的扫描、漏洞利用、流量截获、账号窃取和恶意代码传播都可能触犯法律。

我国网络安全相关法律体系中,“三法两条例”尤其重要。《网络安全法》明确网络运营者安全保护义务和网络活动基本规则;《数据安全法》强调数据分类分级和全生命周期安全;《个人信息保护法》规范个人信息处理和用户权利保护;《关键信息基础设施安全保护条例》和网络数据安全相关条例则进一步细化重点行业和数据处理活动的安全要求。学习攻防技术越深入,越要意识到技术能力必须服务于授权测试、防护加固和应急处置,而不能越界使用。

3.13 基础

这门课对计算机基础的要求比我一开始想象得高。计算机网络方面,子网划分、路由、ARP、DNS、TCP 三次握手、HTTP 请求响应和各种应用协议都在实验中反复出现;操作系统方面,Windows 和 Linux 的服务、权限、进程、文件系统、注册表、Shell 和日志都成为攻防对象;计算机组成方面,第九次实践直接用到了寄存器、栈帧、机器码、小端序和函数调用约定。

我最大的感受是,基础知识如果只停留在考试层面,很难真正变成能力。比如以前知道 TCP 有三次握手,但做 SYN Flood 时才理解半连接队列为什么会被耗尽;以前知道栈会保存返回地址,但做缓冲区溢出时才知道偏移量和地址写法为什么决定成败;以前知道 Web 输入要过滤,但做 SQL 注入和 XSS 时才真正看到不安全输入会造成什么后果。

5. 课堂的收获与不足

这门课最大的收获是把零散的安全概念变成了一条完整的学习路径。从最开始搭环境,到信息搜集、协议分析、协议攻击、防火墙与 IDS、Windows 和 Linux 系统渗透、恶意代码分析、缓冲区溢出、Web 安全,再到浏览器木马取证,十一次实践基本覆盖了网络攻防入门阶段最核心的一圈知识。以前我对很多工具只是听过名字,现在至少知道 Nmap、Nessus、Wireshark、tcpdump、Snort、Metasploit、IDA、gdb、pwntools 在什么场景下使用,以及输出结果应该怎么理解。

第二个收获是问题排查能力提升了。环境配置、网络不通、工具参数错误、权限不足、脚本混淆、地址定位失败,这些问题在实验中经常出现。刚开始遇到问题时容易只想找教程答案,后来逐渐会先判断问题属于网络、系统、权限、工具还是代码逻辑,再用抓包、日志、调试器或源码去验证。很多实验中真正有价值的部分,反而不是一次成功的截图,而是排查失败原因的过程。

第三个收获是安全意识明显增强。做完 SQL 注入和 XSS 后,我再看 Web 表单会下意识思考输入是否被参数化、输出是否被编码;做完协议攻击后,会意识到明文协议和局域网信任假设的风险;做完恶意代码和网页木马分析后,也更能理解陌生链接、旧版浏览器插件和可疑可执行文件的危害。

不足也比较明显。首先,我对一些底层原理还没有完全吃透。比如 Metasploit 模块内部的漏洞触发细节、不同 Payload 的工作机制、浏览器漏洞利用中的堆喷射和 Shellcode 执行过程,还需要继续深入学习。其次,自动化能力不足,很多分析仍依赖手工操作。如果能更熟练地使用 Python、scapy、pwntools、日志解析脚本和批处理工具,实验效率和分析深度都会提高。最后,逆向和二进制安全基础仍然偏薄,IDA 和 gdb 目前只会完成基本分析,距离独立分析复杂样本和真实漏洞还有很长距离。

总体来说,这门课让我真正进入了网络安全实践的大门。它不只是教会我使用某几个工具,更重要的是让我建立了攻防两端的思维:攻击者如何找到入口、扩大影响、隐藏行为;防守者又如何加固系统、监测异常、保留证据、还原攻击链。课程结束后,我还需要继续补基础、练脚本、做复盘,把这学期形成的实践经验继续沉淀下去。

posted @ 2026-06-21 15:53  安和_零樂  阅读(10)  评论(0)    收藏  举报