# 20253907 2025-2026-2《网络攻防实践》第12次作业

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

写在前面

从第一周连虚拟机网络模式都分不清,到能看懂IDA的反汇编代码、能在gdb里调试栈溢出、能用Metasploit拿到靶机shell,这学期的11次实验下来,回头看变化确实挺大的。最开始的几次实验确实很折磨,连蜜网网关的网卡都配不明白,每次配置环境都要搞到半夜,一遍遍试错。但正是这些折腾让我对网络攻防有了一个完整的认识——它不是某个单一的技术,而是一整套从信息收集到漏洞利用再到取证分析的体系。这篇总结不是单纯地罗列"做了什么",而是想梳理清楚这学期我到底学会了什么、理解了哪些之前不懂的东西。

1. 内容总结

第1次实践 网络攻防环境的搭建

第一次实践让我对"虚拟机是什么"有了全新的认识。以前用虚拟机只是为了装个Linux,从来没想过虚拟机还能组网。这次实验要搭一个完整的攻防环境:Kali攻击机、Windows靶机、SEED实验机、蜜网网关,每台机器负责不同的功能模块,通过VMnet1和VMnet8两个虚拟网段连接起来。

蜜网网关是这次实验最难啃的骨头。它要配置三个网卡,eth0连攻击区、eth1连靶机区、eth2做管理口。配好之后还要进后台配置IP和路由。我当时折腾到晚上一点多,浏览器还是打不开https://192.168.200.8的管理界面。后来和同学一起排查,发现是DNS和默认网关填错了,改完就能打开了。这次经历让我养成一个习惯:每次配完网络,先ping一下网关再走下一步,别等到最后才回头找问题

第2次实践 网络信息收集技术

第二次实践开始接触真正的"攻击前期准备"——信息收集。前半部分用Whois查sina.com.cn的域名注册信息、IP归属地,后半部分用Nmap和Nessus扫靶机。Nmap的-sS半开扫描、-O操作系统识别、-sV服务版本探测都跑了一遍,Nessus扫出一堆SMB高危漏洞,尤其是445端口,后来第六次实验的MS08-067就是通过这个端口打的。

这次让我印象最深的是一开始攻击机和靶机之间死活ping不通,查了半天发现是网关设置冲突了,需要在宿主机上加路由转发。和同学讨论后才解决了这个问题。信息收集看着简单,但网络不通一切白搭,环境才是实验的基础

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

第三次实践练的是tcpdump和Wireshark。tcpdump抓访问Web的流量,Telnet连复旦BBS,Wireshark的过滤器语法和Follow TCP Stream功能在这次用得很熟。不过复旦BBS当时连不上,换了好几个才找到能用的,这也说明做实验不能太死板,外部服务随时可能变。

重点是分析listen.pcap:通过大量SYN包判断存在TCP SYN半开扫描,通过Nmap特征串确认扫描工具,通过SYN/ACK响应统计出蜜罐开放端口——21、22、23、25、80、139、445、3306这些。再用p0f辅助判断攻击机操作系统。这次流量包又长又杂,不像CTF题目那样目的明确,更接近实战取证

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

第四次实践集中做了五种经典攻击:ARP缓存欺骗、ICMP重定向、SYN Flood、TCP RST、TCP会话劫持。ARP欺骗让我意识到局域网里的IP-MAC映射根本不靠谱,一个伪造的ARP响应就能把流量引到自己机器上。ICMP重定向则说明路由控制信息也能被利用。

SYN Flood攻击时靶机Telnet明显卡顿,抓包看到大量半连接状态,直观感受到了三次握手设计上的脆弱。Ettercap做ARP投毒后,Telnet的账号密码直接在Wireshark里明文显示,再次验证了明文协议在不可信网络里有多危险。

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

第五次实践从攻击转向防御。iptables部分先丢弃ICMP让主机不响应Ping,再设置默认INPUT DROP,只按源IP放行特定主机访问Telnet。这里我理解了规则顺序的重要性:先DROP再放行,或者忘记放行管理流量,都会把自己挡在外面

Snort部分遇到了版本问题——教程是Snort2,Kali默认装的是Snort3,配置方式和命令参数都不一样。后来手动开了内置规则,在local.rules里补了针对Nmap各种扫描的检测规则。IDS规则其实就是把协议字段、标志位、频率写成可匹配的条件,不是什么黑盒

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

第六次实践用Metasploit复现MS08-067和MS06-040。MS08-067选windows/smb/ms08_067_netapi模块,设好RHOST、LHOST和payload就能拿到shell。MS06-040踩了个坑:默认payload会导致Windows 2000的service.exe崩溃关机,后来换windows/shell_bind_tcp才稳定。这个坑让我明白:payload不是随便选的,要根据目标系统的稳定性来调整

取证分析部分通过逐条TCP流还原了攻击链:攻击者先探测IIS,用Unicode路径穿越读boot.ini,再通过/msadc/msadcs.dll/AdvancedDataFactory.Query触发命令执行,然后复制cmd.exe、写ftpcom脚本、下载nc.exe和pdump.exe、用Netcat拿shell、提取口令。Metasploit显示session opened只是结果,流量里看到的才是完整过程

第7次实践 Linux操作系统攻防

第七次实践是Linux版的对标实验。用Metasploit打Metasploitable上的Samba usermap_script漏洞,配置exploit/multi/samba/usermap_scriptcmd/unix/bind_netcat payload,直接拿root shell。老版本服务暴露在外有多危险,这次体会很深——一个用户名映射脚本的漏洞就能直接拿到最高权限

这次还进行了攻防对抗实践:攻击方用Metasploit渗透,防守方用Wireshark抓包分析。实战感很强,也让我意识到防守方真的不容易——攻击只需要找一个点,防守要防所有的面。

第8次实践 恶意代码分析实践

第八次实践内容很综合。RaDa样本先用file判断是PE32,用PEiD识别UPX壳,脱壳后用IDA和字符串搜索定位作者信息。动态分析用Process Monitor和Process Explorer,看到RaDa会复制自身到特定目录、改注册表自启动、周期性访问10.10.10.10上的控制页面,根据返回命令执行上传下载截图等操作。结合这些行为判断它是后门木马,不是传统病毒或蠕虫

把静态样本、动态行为和网络通信串在一起判断恶意代码,这是我这次最大的收获——单看哪一块都可能误判,三块合在一起才能还原真相。

第9次实践 软件安全攻防--缓冲区溢出和shellcode

第九次实践是我整个学期最喜欢的一次。围绕pwn1程序做了三种利用:手工改机器码把call foo改成call getShell;用gets的BOF覆盖返回地址跳到getShell;注入shellcode到栈上执行。

shellcode注入卡了我最久。关了ASLR、开了栈可执行,gdb里run看到的buffer地址在终端运行时就是不对。后来向师弟请教才知道,gdb run产生的栈帧地址和实际运行时不一样,需要用gdb attach到真实进程看地址。这个坑让我明白漏洞利用对运行环境极其敏感,不能把调试器的结果当最终答案

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

第十次实践是SEED Labs的SQL注入和XSS。SQL注入环境需要自己搭Docker、配hosts。登录处直接把用户名拼进SQL,用admin'#就能绕过密码验证。UPDATE注入更离谱,在nickname字段里构造闭合语句就能改工资字段。防御部分试了过滤危险字符,但真正靠谱的还是参数化查询

XSS从弹窗开始,逐步做到读取Cookie、把Cookie发到攻击者监听端口、自动加好友、自动改资料,最后构造了能自我复制的XSS蠕虫。关键是抓取正常请求,搞清楚Elgg加好友和改资料需要哪些参数,然后用JavaScript自动发请求。SQL注入是把输入当SQL执行,XSS是把输入当脚本执行,本质上都是数据和代码边界没处理好

第11次实践 浏览器安全攻防实践

第十一次实践用Metasploit配MS06-014、MS06-055等浏览器漏洞模块,Windows 2000的IE访问恶意URL后建立shell。浏览器漏洞和服务端漏洞不同:服务端是攻击者主动连目标,浏览器漏洞要等受害者访问攻击者控制的页面

网页木马分析从start.html开始,一路追到隐藏iframe、外部脚本、MD5命名的文件,解码过程涉及Base64、XXTEA、十六进制、packer、%uXXXX shellcode等多种混淆。Base64和混淆不是加密,只是拖慢分析速度。防守方需要结合源码、HTTP请求、外联连接和主机行为一起判断。

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

第9次二进制漏洞利用与shellcode注入是我做得最扎实的一次,原因很简单——这是我第一次真正认识pwn

以前打CTF的时候,看到pwn题都是绕着走的,总觉得那是re手和pwn手才玩的东西,跟我这种Web选手没关系。这次实验逼着我正面面对它,才发现其实没那么神秘,但也没那么简单。操作系统课上学过EBP、ESP、EIP、返回地址这些概念,背完就忘,完全没有直觉。这次通过IDA看函数结构、gdb看寄存器和栈、Python构造payload,才真正串起来——payload前面堆一堆"A"是为了覆盖局部变量和旧ebp,最后4个字节才是返回地址。小端序也不是考试题里的抽象概念,而是必须把0x0804847d倒过来写成\x7d\x84\x04\x08才能用。

shellcode注入部分卡了我最久。在gdb里能看到buffer地址,感觉一切都在掌握之中,一离开gdb就打不通。后来折腾了很久才发现是gdb run产生的栈地址和实际运行不一致,需要用gdb attach到真实进程才能看到真正有效的地址。这个坑让我第一次意识到:漏洞利用不是写对payload就行了,运行环境、调试器、ASLR、栈对齐,任何一个细节不对都可能失败

这次实践把我以前零零散散学过的逆向、操作系统、汇编、C语言漏洞和Python构造数据全都串起来了。作为一个以前只做Web的人,这次算是我真正意义上的pwn入门——不是说有多厉害,而是终于知道这个方向是怎么一回事了。

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

3.1 安全加固和检测技术

Nmap的-sn做主机发现,-sS做SYN半开扫描,-sV识别服务版本,-O推断操作系统。Nessus则更进一步,根据服务版本给出具体漏洞风险。前期扫描结果真正有价值的地方在于帮我们选择攻击入口:Windows靶机的445端口对应MS08-067,Linux靶机的Samba和distcc服务对应不同的exploit模块。

防火墙方面,iptables的INPUT/OUTPUT/FORWARD链配合默认DROP策略,规则顺序极其重要——先DROP再放行,或者忘记放行管理连接,都会把自己挡在外面。Snort让我理解IDS和防火墙的分工:防火墙做访问控制,IDS做流量监视,两者配合才能形成完整防御。

3.2 Web安全技术

SQL注入的本质是数据和代码未分离。登录处把用户名直接拼进SQL,用admin'#就能绕过验证。UPDATE注入更危险,改工资、改密码都能通过构造闭合语句实现。防御上过滤关键字不够可靠,参数化查询才是正解

XSS是把用户输入当脚本执行了。存储型XSS写入数据库后,所有访问者都会中招。从弹窗到偷Cookie、自动加好友、改资料、蠕虫传播,关键是抓取正常请求的参数格式,然后用JavaScript自动发请求。防御需要输入过滤、输出编码、HttpOnly、CSP等多层配合。

3.3 逆向分析技术

通过RaDa样本和pwn1程序,我学会了静态分析看文件格式、壳、字符串、导入函数,动态分析看进程、文件、注册表、网络行为。IDA Pro从只会看字符串,到能分析main、foo、getShell之间的调用关系。gdb从完全不会用,到能设断点、看寄存器、看栈、算偏移。

加壳与脱壳也是重点。UPX压缩壳可以用脱壳机直接处理,加密壳则复杂得多。PEiD和Detect It Easy都能识别加壳工具,strings命令在脱壳前后提取字符串的差异,往往是找到关键线索的突破口。

3.4 主流代码审计技术

SQL注入和XSS的根源都能从源码里直接看到。审计时要沿着输入流动路径走:从$_GET$_POST、表单字段、Cookie这些入口开始,看数据最终进入数据库查询、命令执行、文件路径还是HTML输出。PHP里的evalsystemexec、文件包含都是高危函数,Python里的evalpicklesubprocess也需要注意。

3.5 程序设计

第9次用Python构造payload,把填充字节、返回地址、NOP sled、shellcode拼成二进制文件;第10次用JavaScript构造Ajax请求,自动读取token和时间戳实现蠕虫传播。工具能完成通用任务,但实验里经常遇到需要自己构造数据、整理证据的场景,脚本能力很重要。

3.6 计算机病毒技术

RaDa样本让我理解了病毒、蠕虫、木马、后门的区别。RaDa没有感染其他文件的能力,也不主动传播,更像后门木马——安装后改注册表自启动,周期性访问控制端获取命令。C2通信方式也很典型,早期僵尸网络常用IRC频道发命令,通过NICK、USER、JOIN消息就能追踪。

3.7 网络溯源及防范技术

从第3次的pcap取证,到第6、7次的攻击流量分析,到第11次的网页木马溯源,我养成了按时间线排查的习惯。一次攻击通常由探测、验证、利用、投递、回连、维持等阶段组成,证据也要分层看待:扫描包只能说明探测行为,出现命令执行和shell回显才能判断攻击成功。

3.8 加密解密技术

第11次网页木马分析用到了大量编码和混淆:Base64、十六进制、%uXXXX、packer、XXTEA。分析时要根据数据格式判断编码方式,逐层还原。MD5用于样本定位——对解密出的URL算MD5,再到hashed目录里找对应文件。

3.9 信息系统运行维护

第1次实验的虚拟机兼容性问题、第2次的网络路由问题、第10次的Docker容器问题,让我积累了不少运维经验。Windows 2000装VMware Tools要先打SP4补丁,VMnet1和VMnet8不通要开宿主机路由转发,Docker容器异常退出要docker-compose down再重启。快照也是好习惯,很多实验会把靶机打崩,有快照就能随时回滚。

3.10 网络协议分析

协议分析贯穿了整门课。ARP欺骗改的是IP-MAC映射,ICMP重定向影响路由表,SYN Flood利用半连接队列,RST攻击依赖TCP连接状态。Wireshark的Follow TCP Stream是还原会话内容最常用的功能。Telnet明文暴露账号密码,HTTP请求路径定位网页木马,SMB流量体现Windows漏洞利用过程,IRC的NICK/USER/JOIN说明僵尸网络通信——不同协议有不同字段和行为模式,分析时不能只看端口号

3.11 数据库

SQL注入实验让我熟悉了MySQL的基本操作:show databasesshow tablesselect。SELECT注入影响身份认证,UPDATE注入影响数据修改。防御上除了参数化查询,还要关错误回显、限制数据库账号权限、对敏感字段加密存储

3.12 法律

网络攻防技术必须有授权边界。Nmap扫描、Nessus漏扫、Metasploit利用、抓包、XSS、SQL注入、木马样本分析,放到未经授权的真实网络里都可能违法。《网络安全法》《数据安全法》《个人信息保护法》以及等保条例都需要了解。基本原则:只在授权范围内测试,只用自己的靶机,不传播攻击代码,不攻击真实系统

3.13 基础

从408的视角看,计算机网络、操作系统、计算机组成、数据结构的知识在这次实践中全用上了。VMnet不通要理解路由,SYN Flood要理解半连接队列,pwn要理解栈和返回地址,SQL注入要理解数据库查询语法,XSS要理解浏览器解析HTML和JavaScript的方式。很多实验出问题时,不是工具不会用,而是基础概念没想清楚

4. 课堂的收获与不足

主要收获

入门了re和pwn。以前只做Web方向,对IDA、gdb、汇编指令、栈帧结构、返回地址、小端序、shellcode都很陌生。第9次实验让我完整经历了从分析程序结构、定位关键函数,到构造payload、覆盖返回地址、调试栈空间、执行shellcode的过程。虽然还是入门水平,但至少知道怎么着手了。

排错能力明显提升。整个课程遇到的问题非常多:虚拟机兼容性、网卡路由配置、工具版本差异、漏洞模块无法复现、payload在gdb里成功但实际运行失败。很多问题一开始看不出原因,只能观察现象、查资料、抓包、调试、反复验证。尤其是gdb run和attach的差异这个坑,让我意识到不能只依赖调试器。

对网络攻防有了一个系统的认知。以前对"红蓝对抗"的了解只停留在短视频里,这次真正参与到攻防实践中去,才明白攻击方和防守方各自的思路——攻击只需要找一个点,防守要防所有的面。第六次和第七次实验真正完成了一次完整的攻击和防守操作,认识到了信息收集和找漏洞的重要性。

主要不足

独立分析的能力还不够强。部分实验前期还是照步骤走,比如漏洞模块为什么选这个target、payload内部怎么工作、Snort规则为什么这样写,我还没有完全吃透。IDA主要会看字符串和流程图,详细的操作利用方法还需要补。

遇到不懂的问题就老想着问同学,缺少自主解决问题的能力。很多作业上都是和同学相互讨论下完成的。虽然网络攻防本质也是团队作战,但如果只想着交流学习,缺少主动分析问题的能力,很难走远。

后续计划

今后会继续学习网络攻防,将理论用于实践,同时与课程上认识的优秀同学保持深度交流。

重点补三个方向:一是网络流量分析和日志关联,二是Web安全和代码审计,三是二进制逆向和漏洞利用基础。这几个方向在这次课程中都接触过,但深度还不够,需要继续往下挖。

posted @ 2026-06-18 10:46  navada  阅读(20)  评论(0)    收藏  举报