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

一、内容总结

实验一

本次实验的核心任务是搭建一个用于捕获攻击信息的蜜网(Honeynet)。Honeywall作为蜜罐网关部署,对外网不可见;WinServer作为诱饵吸引攻击流量,Kali和SeedUbuntu作为攻击端,所有攻击流量均需经过Honeywall以实现数据捕获。实验中反复配置Honeywall的虚拟网卡,在此过程中深入理解了虚拟机桥接模式、NAT模式和仅主机模式的工作原理及适用场景:桥接模式下虚拟机与宿主机网络地位对等;NAT模式将虚拟机置于宿主机后方,外部不可直接访问;仅主机模式最为封闭,虚拟机间可通信但无法访问外网。

实验二

本次实验聚焦于攻击前的情报收集阶段。使用Whois命令查询目标域名的注册商信息和注册人联系方式,结合Nslookup解析域名对应的IP地址;通过Wireshark监听网络流量获取通信双方的IP地址;利用Nmap对局域网进行主机发现、端口扫描和服务版本识别;最后使用Nessus漏洞扫描平台对目标主机进行全面的安全漏洞评估,了解常见漏洞的威胁等级和影响范围。信息收集是攻击链的起点,其质量直接决定了后续渗透的效率。我记得这次实验过程中遇到了 Kali 无法上网问题,通过宿主机网卡共享成功解决。

实验三

本次实验围绕网络流量的捕获和分析展开。使用Tcpdump对网络通信过程进行嗅探,统计访问的IP地址信息;使用Wireshark和科来网络分析工具对TELNET登录BBS的全过程进行抓包,解码获得BBS服务器地址、端口号以及明文传输的用户名和密码;使用p0f工具对攻击流量数据包进行被动指纹识别,推断攻击主机的操作系统版本和所使用的扫描方式。掌握了不同扫描技术比如如SYN扫描、全连接扫描在流量层面的特征差异。

实验四

本次实验在虚拟机环境中完成了TCP/IP协议栈的攻击实践:ARP缓存欺骗攻击【利用ARP协议无认证机制,通过Netwox伪造ARP应答篡改目标主机的ARP缓存表】;ICMP重定向攻击【伪造ICMP Redirect消息劫持路由】;SYN Flood攻击【利用TCP三次握手机制发起半连接泛洪】;TCP RST攻击【伪造RST包中断已有TCP连接】;TCP会话劫持攻击【使用Shijack工具接管已建立的Telnet会话】。上面这些攻击的共同根源在于协议设计之初对安全性考虑不足,而非实现层面的Bug。

实验五

本次实验从防御视角切入,学习了Linux系统下iptables防火墙的规则配置,实现了ICMP数据包过滤和基于IP地址的访问控制类似白名单机制。使用Snort入侵检测工具对PCAP文件进行离线分析,通过编写检测规则识别攻击流量并生成报警日志。分析了Honeywall中防火墙与IDS/IPS的协同配置,理解蜜罐在允许攻击流量进入和防止攻击者利用蜜罐攻击他人之间的机制。

实验六

本次实验使用Metasploit框架,以MS08-067漏洞为突破口对Windows靶机进行渗透攻击,获取远程Shell。取证分析环节通过逐条解析PCAP文件中的TCP会话,完整还原了一次NT系统破解攻击的全过程,包括攻击者使用的工具、执行的命令和操作的时间线。团队攻防对抗中,攻击方利用MS03-026漏洞发起渗透,防守方使用Wireshark实时捕获流量,事后通过过滤和流追踪功能对攻击行为进行了完整复盘

实验七

本次实验使用Metasploit框架,利用Samba服务漏洞获取Linux靶机的远程访问权限。攻防对抗环节中,选用distcc_exec漏洞进行渗透,通过设置cmd/unix/reverse反向Payload实现远程控制。防守方通过Wireshark捕获攻击流量,分析出攻击请求中构造的sh -c命令注入载荷。实践中发现靶机上很多已知漏洞的对应端口并未开放,说明漏洞利用的前提是准确的服务探测。

实验八

本次实验涵盖恶意代码的四个分析层面:文件类型识别【使用PEiD检测RaDa.exe为UPX 0.89.6加壳】;脱壳与字符串提取【使用超级巡警脱壳机脱壳后,通过IDA Pro的String Window定位作者信息】;逆向分析【使用IDA Pro对crackme1.exe和crackme2.exe进行静态反汇编和伪代码分析,寻找特定输入条件以触发正确的程序输出】;取证分析【分析蜜罐捕获的Botnet数据包,统计攻击源IP、攻击手段和成功与否】。

实验九

本次实验通过三种途径使pwn1程序执行非预期的getshell函数:1.直接修改可执行文件的机器指令,使用objdump反汇编定位关键跳转,以xxd工具修改十六进制码;2.利用foo函数只分配28字节缓冲区的漏洞,构造超长输入覆盖栈上的返回地址,使其跳转至getshell函数;3.构造完整的Shellcode注入Payload,在关闭ASLR和栈执行保护后成功获取Shell。实验中需要精确计算返回地址偏移、确保Shellcode不含空字节,体会到现实漏洞利用的复杂度。

实验十

本次实验分为SQL注入和XSS跨站脚本两个部分。SQL注入部分:通过分析unsafe_home.php的源码,发现用户名和密码参数以字符串拼接方式嵌入SQL语句,构造"Admin'#"的注入载荷注释掉密码校验条件,成功绕过登录验证并获取管理员权限;对UPDATE语句同样利用拼接漏洞修改数据库数据。XSS部分:在用户简介中嵌入恶意JavaScript代码,实现弹窗告警、Cookie窃取以及蠕虫式自动传播;防御端使用HTMLLawed插件对用户输入进行HTML标签过滤,阻止了XSS攻击。

实验十一

本次实验首先使用Metasploit中的漏洞对IE浏览器进行渗透攻击,生成的恶意链接通过钓鱼邮件诱导受害者点击获取Shell。网页木马取证分析环节较为复杂:从start.html出发逐层追踪文件调用链,通过Base64解码和XXTEA解密还原被加密的恶意代码,使用IDA Pro对最终Payload进行反汇编分析,发现其利用了多个软件比如暴风影音、PPStream、百度搜霸等漏洞,一次性下载20个可执行文件并修改了系统日期。

二、最喜欢的且做的最好的一次实践是哪次?为什么?

实践八印象最深。这次实验不像之前几次那么顺利,但这种网络侦探式的工作让我觉得非常有意思。这次实验改变了我对于安全的认知。之前几次实践主要站在攻击者的角度——找漏洞、打进去、拿Shell,节奏快、反馈直接。但恶意代码分析是另一种完全不同的工作方式,面对一个完全未知的二进制文件,你不知道它干了什么、怎么干的,所有的答案都必须通过工具和推理从二进制中找出来,这种从零开始逐步还原真相的过程我觉得很有意思。还有就是这次实验串联了很多我之前都不知道的概念和重要技能像PE文件结构、加壳与脱壳原理、静态反汇编与动态行为监控、网络流量取证分析,以及病毒、蠕虫、木马、后门的分类鉴别。这些知识点单个拿出来都不算特别复杂,但放在一个完整的恶意代码分析流程中,这些就相互联系,构成了一套完整学习方法,这个实验设计的很巧妙。这套方法不只适用于这次实验的样本,对今后遇到任何类似未知问题都有参考价值。

三、本门课学到的知识总结

实践一:网络攻防环境搭建

第一次实验的核心是搭建一套基于虚拟化技术的隔离实验网络,之后的十次实践都在这个环境里跑。知识点包括三块。一是虚拟化网络模式的理解:VMware提供了NAT、仅主机和桥接三种模式——NAT适合需要联网更新软件的场景,仅主机适合封闭实验网络,桥接让虚拟机和宿主机处于同一局域网。实验中把靶机网段设为192.168.200.128/25、攻击机网段设为192.168.200.0/25,虽然都在200段里,但子网掩码255.255.255.128把它们隔成了两个子网,必须通过蜜网网关才能互通。配路由的时候靶机网关要指向蜜网网关的接口地址,配错了就全不通,这个排查过程让我对子网划分、路由配置和网关角色有了比课本上直观得多的理解。二是蜜网架构:Honeywall作为透明网关部署在三类节点之间,所有进出蜜罐的流量都被它捕获,配合iptables和Snort实现入侵检测和攻击数据记录。三是Linux基础命令和虚拟机操作——配置静态IP、修改网络适配器设置、排查ping不通的问题,这些基础操作在后面每次实验都用到了。SEED Ubuntu更新太慢,换了阿里云镜像源之后速度正常。

实践二:网络信息收集技术

这次实验训练的是攻击前的找信息的这部分。DNS与IP信息查询方面,用whois baidu.com查的注册组织,用nslookup解析IP地址,再对IP做whois查询获取网络归属信息。在时通讯追踪方面,通过Windows资源监视器中的网络活动,观察打微信电话时新出现的TCP连接,尝试定位好友的公网IP和地理位置。Nmap是本次实验的核心工具,sP做主机发现、sS做半开扫描,sV识别端口后运行的服务和版本、-O通过协议栈指纹猜操作系统。这些扫描结果是后续漏洞利用的依据。Nessus在Nmap的基础上更进一步,将扫描结果与CVE漏洞库自动匹配,直接给出漏洞编号和风险等级。安装Nessus时Web端插件下载容易超时,改用命令行更新解决。最后通过搜索引擎精确匹配规则和社交平台检索做了开源情报收集,评估自己真实信息的网上暴露情况——查完发现确实有不少东西不该公开,隐私保护不能掉以轻心。

实践三:网络嗅探与协议分析

这次实验围绕流量捕获和分析展开,几个工具的使用各有侧重。tcpdump方面,用它抓取访问网站完整网络活动,整个流程在数据包层面一目了然。遇到的一个问题是:抓80端口一直没流量,查了才发现现在网站全走HTTPS/443端口,HTTP请求被301重定向了,改抓443端口后数据就出来了。这个经验在后面每次抓包分析时都用上了:先确认目标服务的协议和端口,再设过滤条件。Wireshark方面,用它们抓TELNET登录BBS的全过程,追踪TCP流后用户名guest直接明文显示在数据包中,这也理解了为什么TELNET现在基本没人用、中间人攻击为什么能有用。
p0f方面,这是一个被动操作系统指纹识别工具——不主动发探测包,单纯分析别人发来的TTL、窗口大小等特征就能猜出操作系统版本,比Nmap 更隐蔽。安装p0f时遇到了GPG签名密钥过期的问题,更新存储库密钥解决。取证分析方面,分析给定的listen.pcap数据包,通过Wireshark会话功能,发现172.31.4.178向172.31.4.188发送了大量TCP包,从而推断出攻击机和靶机的IP。再用p0f识别出攻击方使用了nmap扫描工具和SYN扫描方式。

实践四:TCP/IP网络协议攻击

这次实验的核心不是学新工具,而是把协议的工作原理反过来用。ARP欺骗,在我理解来看,ARP协议设计时,假设局域网是可信的,任何人声称"我是192.168.200.1,MAC是多少多少,接收方就更新ARP缓存。用netwox伪造一个ARP应答,告诉靶机"网关的MAC是攻击机的MAC",靶机的流量就被骗过来了。做的时候有个坑就是只欺骗了靶机没开IP转发,靶机直接断网了,后来ai之后发现解决。ICMP重定向类似于攻击者伪装成网关发伪造消息,大概说去外面的网走我这条路更快,目标就更新路由缓存把流量送过来。SYN Flood和TCP RST分别利用TCP的不同机制。SYN Flood发大量伪造源IP的SYN包,服务端给每个都分配资源等ACK,但永远等不到,半连接队列满了就拒绝新连接,而且我做的时候Kali虚拟机资源不够直接卡死了。TCP RST伪造窗口内的RST包,强制中断已有连接。TCP会话劫持,在Telnet明文会话中插入伪造数据包冒充对方执行命令。

实践五:网络安全防范技术

之前是攻击,现在到了防守知识。iptables防火墙配置学到了两个核心点。一是ICMP过滤:添加iptables -A INPUT -p icmp -j DROP规则后,外部ping本机直接超时,实现了网络隐身。二是基于IP的白名单访问控制,只允许特定IP访问本机HTTP服务。实验踩了一个典型的坑就是先加了DROP全部来源的规则,再加ACCEPT特定IP的规则,结果所有来源都被拒了。iptables是按顺序逐条匹配的,DROP在ACCEPT前面就全拦截了。删除重建后才正常。这个防火墙规则不是写对就行,重要的是写对顺序才是关键。Snort入侵检测方面,在IDS模式下配置规则文件和日志目录,对给定的pcap文件做离线分析,通过特征匹配输出报警日志。Snort的本质就是规则引擎——每条规则定义一种可疑流量模式,命中就报警。Honeywall的防火墙脚本分析方面,翻看了蜜网网关中rc.firewall里的create_chains函数,理解了iptables和Snort在实际蜜罐系统中是怎么协同的。

实践六:Windows操作系统安全攻防

用MS08-067漏洞打Windows 2000靶机,基本流程是:msfconsole进控制台到search ms08_067找利用模块再到设置,攻击。遇到了一个问题就是攻击提示完成但没拿到反弹Shell。排查发现两台虚拟机NAT和桥接混用了,反向路由不可达,全切桥接模式后解决。后渗透阶段用net user命令创建用户时报语法错误,原因是反弹Shell的环境变量没完全继承,net.exe路径没被识别,用绝对路径执行即可。
取证分析方面,分析了一次真实的NT系统破解攻击日志。用Wireshark打开逐条翻TCP流,找出了完整的攻击链。团队攻防对抗中,攻方用MS03-026漏洞渗透靶机,防守方用Wireshark同步抓包,事后过滤攻防双方的IP追踪流,能看到对方执行的每一条命令。

实践七:Linux操作系统攻防

这次换Linux靶机,用Samba的usermap_script漏洞打。流程和Windows类似设置好后攻击。遇到了一个和Windows实验不同的问题,选用bind_netcat做正向连接时,exploit显示成功但连不上4444端口,排查发现是Metasploitable的ufw防火墙开着,阻止了外部对非服务端口的访问。sudo ufw disable关掉防火墙就好了。这说明漏洞利用的前提不只是漏洞存在,还要网络可达、端口可连。
攻防对抗中选用了distcc_exec漏洞,通过set payload cmd/unix/reverse设置反向代理。防守方用Wireshark抓包分析,到时候可以看到攻击请求中构造的sh -c命令注入,distcc服务在处理请求时把用户输入直接拼进了命令行。和SQL注入本质上是一回事,代码和数据混在一起,解释器分不清哪部分是命令哪部分是参数。取证分析完能提取出攻击者IP、目标IP、利用的漏洞、payload类型以及攻击成功后执行的命令。

实践八:恶意代码分析实践

第一部分是RaDa.exe样本分析。用file命令确认是32位Windows PE文件后,strings命令输出的全是乱码——说明被加壳了。PEiD检测确认是UPX壳,用超级巡警脱壳机脱壳后,再次strings就能看到清晰的函数名和URL了。在IDA Pro的String Window中找到了作者信息。MD5在线工具计算了样本的哈希摘要作为唯一标识。
第二部分是crackme逆向。crackme1用IDA Pro看流程图和伪代码,分析出成功信息。crackme2多了一个障碍,同样输入正确的密码还是报错,在IDA里仔细追才发现程序对argv[0]也做了校验,必须叫crackmeplease.exe才行。所有逆向分析不能只看字符串窗口,函数调用图里的每一个比较指令都可能是关键。WinAttacker自带的IDA版本太低,很多功能不全,换Pro版才搞定。
第三部分是RaDa行为分析。用Process Explorer监控脱壳后的程序运行,发现它主动访问下载C&C指令、在C盘创建C:\RaDa\tmp、将自身复制到C:\RADA\bin、修改注册表加开机启动,判定为功能完善的后门程序。第四部分是Botnet取证分析。面对蜜罐,统计出主机访问了僵尸网络和IP发起攻击。逐端口分析TCP流,445端口发现了PSEXESVC.EXE和Dv1dr32蠕虫特征,最后攻击成功。额外的收获是区分了病毒、蠕虫、木马和后门。

实践九:软件安全攻防——缓冲区溢出与Shellcode

这次实验从三个层次让pwn1程序跳转到不该执行的getShell函数。第一种是直接改二进制:objdump -d反汇编找到getShell入口地址,用xxd把二进制转成十六进制,定位到main函数中call foo的指令位置,把跳转目标改成getShell,%!xxd -r还原,等于拿十六进制编辑器修了程序的执行逻辑。第二种是缓冲区溢出,foo函数只给输入数据分配了28字节缓冲区,用Perl生成超长输入,把栈上的返回地址覆盖掉,函数返回时就跳到了getShell。第三种是Shellcode注入,关闭ASLR和栈执行保护后,构造NOP sled + Shellcode+ 返回地址的经典三段式Payload。Shellcode里不能有\x00——C字符串以null结尾,strcpy拷贝到null字节就截断了,后面的Shellcode根本进不去。这个实验把本科组成原理和操作系统的内容用上了,内存布局像栈帧结构,返回地址位置。CPU寄存器职责,EIP/ESP/EBP等、系统保护机制这些。这些真动手构造Shellcode的时候才发现处处依赖它们。

实践十:Web应用程序安全攻防

Web安全分为SQL注入和XSS两大部分。SQL注入方面,先登录MySQL熟悉数据库操作。然后访问给定网站,打开开发者工具,随便输用户名密码看HTTP请求走到了unsafe_home.php。翻源码发现SQL语句是拼字符串的——WHERE Name='$username' and Password='$password',外部输入直接嵌入查询模板。构造Admin'#注入,#是SQL注释符,把后面的密码校验条件全注释掉了,直接进管理员界面。UPDATE注入也是同样思路——在修改昵称的输入框里截断SQL语句再拼接,把别人的工资改成9000。参数化查询,SQL模板先编译,用户输入用参数绑定,再怎么输入也不会改变语义结构。数据库不应用root连接,只给SELECT,INSERT等必要权限,即使注入成功也做不了删除之类的高危操作。
XSS攻击在Elgg社交平台上做。在用户简介里插漏洞就能弹窗,进阶的包括窃取Cookie、强制添加好友、篡改他人主页、编写蠕虫脚本让恶意代码自动传播,这些每个访问被感染页面的用户都会变成新的传播源。存储型XSS很危险,恶意代码存在服务器数据库里,用户什么都不用干,正常浏览就中招。所以Web安全来说攻击者找到一个注入点就够了,防御者得守住每一个输出点。

实践十一:浏览器安全攻防实践

最后一次实验。浏览器渗透攻击方面,用Metasploit的MS06-014漏洞生成恶意网页脚本,靶机IE访问后拿到反向Shell。取证分析是最复杂的部分,从start.html出发,追踪iframe解密后的JavaScript到最终shellcode,每一层都可能用不同的编码和加密。kl.htm中发现了变量t和解密方法,先Base64解码,再XXTEA解密,最后转成字符串,还原后才发现这段恶意代码利用了好几个软件的漏洞。用MD5比对不同URL指向的文件,发现四个不同链接下载的是同一份文件,避免了重复分析。最后用IDA Pro分析shellcode,发现它一次性下载了20个文件,生成Autorun脚本打开IE,还改了系统日期。
攻防对抗中,用Metasploit构造了钓鱼邮件,把MS06-014生成的渗透链接嵌入邮件正文,诱导点击。防守方用Wireshark监听流量并在浏览器查看源代码。Metasploit渗透、编码解密、哈希文件比对、逆向分析、网络取证,这些前面学到的技能几乎全用上了。这也是最复杂的一个实验,花费的实践最多,出现的问题也最多。

四、课堂的收获与不足

这学期刚开始的时候,我对这门课其实是有点怵的,本科只学了一点理论内容。第一次实验配Honeywall的时候,看着视频一步一步跟,以为很顺利,结果网段怎么都配不通,ping来ping去全是超时。后来发现是虚拟机网络适配器的模式选错了,那时候就意识到,这课不是光看视频能过的,每个步骤都得自己动手过一遍。后面的实验也差不多是这个节奏。跟着视频和资料一步一步走。但是,这些折腾的过程反而是记得最牢的。比起那些顺风顺水做完的实验,那些踩过坑的反而印象深得多。让我不仅对理论有了认识,也有了实践基础,养成了不少好习惯,比如英语打卡。
这门课学下来我发现又很多不足,比如我对工具掌握的深度不够,目前对Nmap、Metasploit等工具的使用主要停留在常用功能的层面,一些高级功能尚未系统学习,后续需要针对性地深入钻研每个工具。此外独立编写利用脚本的能力偏弱,像在XSS蠕虫实验和缓冲区溢出实验中,涉及JavaScript和Perl的代码部分只能对现有代码进行修改和调试,严重依赖ai。还有就是实验记录的及时性有待改进,部分实验完成后间隔较长时间才开始撰写报告,导致部分操作细节需要重新运行实验才能准确还原,造成时间上的重复消耗。虽然这门课已经结束,但之后写论文做项目的时候要养成边实验边记录、边截图边整理的良好习惯。
总体而言,这门课程为我打开了一个的新领域,更重要的是收获了一个新的学习方式方法。感谢老师创造的学习平台和机会,也感谢在环境配置和工具调试中互相帮助的同学们。课程虽已结束,但在安全方向的学习才刚刚开始。