20252918 2025-2026-2 《网络攻防实践》课程总结
《网络攻防实践》课程总结
1. 内容总结
第1次实践 虚拟化网络攻防实验环境搭建
用VMware搭了一套完整的攻防环境,配了VMnet1(仅主机)和VMnet8(NAT)两个虚拟网络。蜜网网关Roo需要三块网卡,分别连攻击网段、靶机网段和管理网段。攻击机装了Kali、WinXPattacker、SEEDUbuntu9,靶机是Metasploitable和Win2kServer。最后把所有机器的连通性测了一遍,也登上了蜜网网关的Web管理界面。
第2次实践 网络信息搜集
学了网络踩点、扫描、查点这三板斧。用nslookup查域名IP,用WHOIS查注册信息,还试了IP定位。nmap做了主机发现(-sn)、端口扫描(-sS)、系统识别(-O)、服务版本(-sV)。最后用Nessus扫了一遍漏洞,发现靶机有28个高危漏洞。
第3次实践 网络嗅探与协议分析
用tcpdump抓访问163.com的包,配合BPF过滤规则只抓SYN包,统计了浏览器访问的Web服务器数量。用Wireshark分析TELNET登录BBS的流量,TCP Stream跟踪直接看到了明文传输的用户名密码。还对listen.pcap做了扫描取证分析,识别出Nmap的SYN半连接扫描、攻击源IP和开放端口,用p0f被动识别了攻击主机的操作系统。
第4次实践 TCP/IP协议栈攻击
用netwox干了五件事:ARP缓存欺骗(改靶机的IP-MAC映射)、伪造ICMP路由重定向报文(改路由表)、SYN Flood攻击(耗尽半连接队列)、TCP RST攻击(强制中断连接)。还用ettercap通过ARP投毒做了TCP会话劫持,截获了Telnet明文通信里的账号密码。
第5次实践 防火墙与入侵检测
在SeedUbuntu9上用iptables配了ICMP过滤规则,让主机不响应ping;又配了IP白名单,只允许特定主机访问FTP。用Snort对listen.pcap做离线入侵检测,分析了报警日志,认出了Nmap XMAS扫描和ARP欺骗。还看了蜜网网关的防火墙规则(BlackList/WhiteList/FenceList链,默认DROP策略)和IDS/IPS配置,理解了蜜网怎么捕获攻击数据又控制攻击行为。
第6次实践 Windows系统安全攻防
用Metasploit打了Win2kServer的MS08-067漏洞,拿到反向TCP Shell,完全控制了靶机。对snort日志做了NT系统攻击流量取证分析,还原了攻击者的完整链路:IIS Unicode漏洞目录遍历、msadc(2).pl工具攻击MDAC RDS漏洞、通过FTP下载恶意工具、开反向Shell、偷SAM口令、识别蜜罐。团队对抗环节,攻方用MS08-067渗透,守方用Wireshark抓包还原了整个攻击过程。
第7次实践 Linux系统安全攻防
用Metasploit打了Metasploitable靶机的Samba usermap_script漏洞(CVE-2007-2447),注入Shell命令实现远程代码执行,拿到root权限。还利用vsftpd 2.3.4的后门漏洞,在FTP用户名末尾加:)触发后门,6200端口直接开了Shell。用Wireshark抓攻击流量,TCP Stream追踪完整还原了攻击过程,提取了攻击特征。
第8次实践 恶意代码分析与僵尸网络
用file和PEiD发现RaDa.exe是UPX加壳的PE32文件,用超级巡警脱壳器脱了壳。用strings和IDA Pro提取字符串,找到作者信息(Raul Siles和David Perez)。对crackme1.exe和crackme2.exe做静态逆向分析,看Strings窗口、函数调用图和流程图,定位了正确的输入参数。最后分析了僵尸网络流量,识别出IRC协议通信模式,统计了接入主机数量,追溯了攻击IP。
第9次实践 缓冲区溢出攻击
对pwn1程序用了三种攻击方式。第一种是手工改二进制文件,用xxd和objdump修改CALL指令的操作数,让main函数调用getShell而不是foo。第二种是利用foo函数里gets函数的缓冲区溢出,构造包含填充数据和恶意返回地址的字符串,覆盖栈帧中的EIP。第三种是构造带自定义Shellcode和NOP滑板的完整攻击载荷,通过缓冲区溢出注入并执行Shellcode拿到Shell。
第10次实践 Web安全(SQL注入与XSS)
在SEED靶场里做了SQL注入:对SELECT语句注入绕过登录(OR 1=1--这种),对UPDATE语句注入篡改员工薪资。还做了存储型XSS攻击,在Elgg平台的个人简介里注入JavaScript,实现了弹窗警告、窃取Cookie、自动加好友(蠕虫传播)、修改用户资料。防御方面,用参数化查询(Prepared Statement)修复SQL注入,用HTMLawed过滤插件和HttpOnly Cookie防XSS。
第11次实践 Web浏览器渗透攻击与网页木马分析
用Metasploit的ie_createobject模块打IE浏览器的MS06-014漏洞,生成恶意URL让靶机访问,成功拿到Win2kServer的远程Shell。对真实网页木马样本做了多层取证分析:从start.html的隐藏iframe追到new09.htm,解密了XXTEA+Base64加密的kl.htm文件(密钥是"script"),分析了恶意代码利用ADODB.Stream、暴风影音、PPStream、百度搜霸等多个ActiveX控件漏洞的攻击链路。
2. 最喜欢且做得最好的实践是哪次?为什么?
我最喜欢的是第九次实践,缓冲区溢出攻击。
说真的,前面很多实验拿着Metasploit或者netwox,输几条命令就能看到效果,挺爽的,但总觉得少了点什么。那些工具把细节都封装好了,我更像是在点按钮,对底层到底发生了什么其实一知半解。
第九次不一样。这次没有现成的exploit模块可用,得自己动手分析程序、找漏洞、构造payload。刚开始看objdump的反汇编结果时,栈、寄存器、返回地址这些概念在脑子里是散的,我知道它们存在,但不知道怎么串起来。后来一边用gdb调试,一边改payload,反复试,慢慢才看明白:输入的数据写到栈上,超出缓冲区的长度后就会往高位地址覆盖,正好覆盖掉返回地址。修改返回地址,程序就跳到我想要的地方去了。
当那个Shell finally弹出来的时候,我盯着屏幕愣了两秒。那种感觉不是“哦成功了”,而是“我终于搞懂它是怎么成功的”。
这次实验还有一个收获。以前写C语言的时候,数组越界这种错误编译器会警告。通过这次实践,我切身体会到程序边界检查的重要性——一个看似不起眼的小疏忽,在攻击者手里就能变成控制整台机器的入口。
3. 本门课学到的知识总结
3.1 安全加固和检测技术
网络信息收集这部分,我学会了三大技术手段:踩点、扫描、查点。踩点就是用whois、nslookup这些工具从公开渠道挖信息,不会引起目标警觉。扫描是主动探测目标网络,找出活跃主机、开放端口、操作系统类型。书里有个比喻很形象——“实施盗窃之前寻找有人居住的房间,并找出所有可供潜入的门窗”。
nmap的扫描方式各有特点。ICMP Ping扫描发Echo Request探活;TCP ACK Ping扫描发只有ACK标志的包,如果收到RST就说明主机存在,这种方式能穿过一些无状态防火墙;TCP SYN Ping扫描根据端口是否开放返回不同响应。
网络嗅探方面,我熟练了tcpdump和Wireshark。tcpdump是命令行的,配合BPF过滤规则能精准抓包;Wireshark图形化,协议解析和TCP流追踪很方便。两者的原理都是把网卡设成混杂模式,捕获网段上所有数据帧。
防火墙和入侵检测我也系统学了一遍。iptables的filter表负责包过滤(INPUT、OUTPUT、FORWARD链),nat表做地址转换,mangle表改数据包。Snort通过签名匹配检测攻击。在第二次实践里,我用nmap扫了靶机全流程,还用Nessus扫出Win2kServer有28个高危漏洞和68个开放端口。第五次实践里,用iptables配了规则丢弃ICMP包,也设了IP白名单。
3.2 Web安全技术
Web安全这块,SQL注入和XSS是重点。SQL注入的根本原因是Web程序直接把用户输入拼到SQL语句里执行,攻击者可以通过构造特殊输入改变SQL逻辑。防御核心是参数化查询,把数据和命令分开。
XSS分存储型、反射型和DOM型,存储型危害最大,恶意代码存在服务器上,每个访问的人都会中招。防御措施包括输入过滤、输出编码、设置Cookie的HttpOnly属性。
第十次实践让我印象深刻。SQL注入手工构造payload时,得想清楚引号怎么闭合、注释符放哪、UNION查询列数怎么匹配。XSS部分,在Elgg个人简介里注入脚本,看到弹窗弹出、Cookie被窃取的那一刻,我才真正理解了前端攻击是怎么回事。蠕虫传播实验模拟了Samy Worm的攻击场景,让我明白了蠕虫怎么在社交网络里自我复制。
3.3 逆向分析技术
恶意代码分析分静态和动态两种。静态分析不运行代码,看PE文件格式、字符串、反汇编;动态分析在受控环境里跑代码,用调试器监控行为。
加壳是恶意代码常用的对抗手段,压缩壳(比如UPX)把程序压缩,运行时候解压;加密壳更狠,还加了反调试、虚拟机保护。脱壳就是用工具把原始代码还原出来。
工具方面,file命令看文件类型,strings提取可打印字符串,PEiD检测加壳类型。IDA Pro是我用得最多的,控制流图、函数调用图、字符串交叉引用这些功能帮我快速理解程序的逻辑。第八次实践里,用PEiD查出RaDa.exe是UPX加壳,脱壳后用strings和IDA找到了作者版权信息。对crackme程序,通过函数调用图和流程图分析了strcmp的比较逻辑,成功定位了正确输入。
3.4 主流代码审计技术
书中提到的软件安全困境“三要素”——复杂性、可扩展性、连通性——让我对安全问题有了更深的认识。软件越复杂bug越多,可扩展性让攻击者有更多可乘之机,高度连通性让一个小漏洞也能影响很大的范围。
代码审计的核心是白盒测试,看源代码里有没有未过滤的用户输入、危险函数(eval、exec、system这些),跟踪数据从输入到敏感操作的完整路径,判断有没有注入风险。第十次实践里,我读了SEED靶场的PHP后端源码,发现直接把用户输入拼到SQL语句里,没做任何过滤。通过view page source看前端表单的提交地址和方法,理解了数据从输入到SQL执行的完整流程。
3.5 程序设计
缓冲区溢出实验让我重新认识了C语言的内存管理。Shellcode是一段机器码,通常用来弹Shell,需要针对CPU架构编写,还要满足体积小、无坏字符等条件。NOP滑板(0x90)放在Shellcode前面,只要返回地址指向滑板区域的任意位置,CPU就会一路滑到Shellcode执行,大大提高攻击成功率。
Python在网络安全里用途很广,scapy构造数据包、requests写爬虫、写漏洞利用脚本都很方便。objdump反汇编让我掌握了x86指令和机器码的对应关系(CALL是0xE8,RET是0xC3,JMP是0xE9,NOP是0x90)。第九次实践里,用xxd改二进制文件再用xxd -r还原,写包含NOP滑板和Shellcode的exploit字符串,这些操作让我对程序的底层执行有了直观感受。
3.6 计算机病毒技术
恶意代码的类型搞清楚了不少。病毒需要寄生在其他程序里,通过感染宿主传播;蠕虫能独立运行,通过网络主动传播;木马伪装成正常程序,给攻击者留后门。
僵尸网络是由大量被控主机组成的网络,攻击者通过C&C服务器集中操控所有僵尸主机,可以发起DDoS、发垃圾邮件等。IRC协议是僵尸网络常用的通信方式,僵尸主机加入特定IRC频道接收指令。
恶意代码还会用各种隐藏技术,加壳对抗静态分析,进程注入、注册表自启动、Rootkit这些手段实现持久化和隐蔽运行。第八次实践里分析的RaDa样本就是UPX加壳,脱壳后发现它有后门功能,可以远程连接控制服务器。
3.7 网络溯源及防范技术
通过网络取证和攻击溯源,我学会了怎么从流量数据里重建攻击事件的时间线,识别攻击源IP、攻击手法和目标。
蜜网是这门课里让我最头疼的部分。我宿舍和工位的电脑都是AMD 7500f的CPU,蜜罐的GUI界面死活配不通,查了很多资料,敲了很多命令行才让蜜罐跑起来。蜜网网关结合防火墙日志、IDS报警和Sebek行为监控,完整记录攻击者的操作,同时还用数据控制机制限制攻击者拿蜜罐当跳板。这种“以攻促防”的思路挺有意思。
第三次实践里,对listen.pcap做取证分析,通过Wireshark过滤ARP定位扫描目标IP,通过Snort规则识别出Nmap,通过TCP标志位判断是SYN半连接扫描,用p0f识别出攻击主机是Linux 2.6.x。第六次实践里,对snort日志做NT系统攻击取证分析,用Wireshark的TCP Stream追踪逐层还原了攻击链路。
3.8 加密解密技术
密码学基础这块,理清了对称加密和非对称加密的区别。对称加密(AES、DES)用同一个密钥,加解密快但密钥分发麻烦;非对称加密(RSA、ECC)用公钥加密私钥解密,解决了分发问题但计算开销大。哈希算法(MD5、SHA-256)把任意长度数据映射成固定长度摘要,不可逆且抗碰撞,常用于完整性校验和密码存储。
加密也是一把双刃剑,恶意代码经常用加密混淆自己。第十一次实践里,恶意JavaScript代码用了XXTEA+Base64多层加密,密钥是ASCII字符串"script",通过在线工具解密后才还原出完整的恶意逻辑。
3.9 信息系统运行维护
第一次实践搭建虚拟化环境,我配置了VMnet1(仅主机模式)和VMnet8(NAT模式),给蜜网网关Roo配了三块网卡,编辑了/etc/honeywall.conf。排查并解决了Roo图形化菜单和系统文件不同步的Bug,通过直接改配置文件手动配IP才搞定连通性问题。
防火墙部署有四种典型模式:包过滤路由器、双宿主堡垒主机、屏蔽主机防火墙、屏蔽子网防火墙。屏蔽子网模式安全级别最高,攻击者要过三个区域才能到内网。系统安全加固的基本原则——最小权限、默认拒绝、安全基线配置——贯穿了整个课程。
3.10 网络协议分析
网络嗅探和协议分析贯穿了整门课。tcpdump和Wireshark两个工具从第三次实践开始几乎每次实验都会用到。
TCP/IP协议栈各层的安全缺陷在第四次实践里体现得很彻底。链路层ARP协议没有身份认证,攻击者可以伪造ARP响应做中间人攻击。网络层ICMP协议可以被伪造路由重定向报文。传输层TCP的三次握手机制能被利用发起SYN Flood,TCP序列号可预测导致RST攻击和会话劫持。TELNET明文传输更是直接把用户名密码暴露在网络里。
3.11 数据库
SQL注入属于输入验证类漏洞。在第十次实践里,我操作MySQL数据库,用mysql -u root -p登录,执行show databases、select * from credential等语句了解数据库结构。手工构造的注入payload(' OR 1=1--、' UNION SELECT ...--)让我深刻理解了SQL语法的灵活性和危险性。防御方面,PHP的PDO参数化查询把用户输入作为参数绑定,从根本上隔离了数据和命令。
3.12 法律
这门课的所有攻防操作都是在授权的虚拟环境里完成的,这一点非常重要。学习“三法两条例”——《网络安全法》《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》《网络安全等级保护条例》——让我明白了技术能力的边界在哪里。等级保护制度把信息系统安全等级分为五级,不同等级对应不同的保护要求。网络攻防技术的研究和实践必须在法律框架内进行,渗透测试必须拿到明确授权。
3.13 基础
这门课让我重新认识到基础知识的重要性。本科阶段很多知识点学得不够深或者已经忘了,借着攻防实践的机会进行了二次学习。
计算机网络方面,TCP三次握手与四次挥手、IP路由与子网划分(比如192.168.32.0/25的子网掩码255.255.255.128)、ARP协议的工作原理、DNS解析流程、HTTP请求响应模型,都在实验里得到了验证。
操作系统方面,同时操作Windows 2000/XP和Linux(Kali/Ubuntu),熟悉了两类系统的网络配置方式(Windows的TCP/IP属性 vs Linux的/etc/network/interfaces和nmcli)、进程管理、文件系统差异。
计算机组成方面,第九次缓冲区溢出实验让我真正理解了x86 CPU的寄存器(EIP、ESP、EBP)、函数调用栈帧结构(局部变量→EBP→返回地址→参数)、栈的增长方向(从高地址向低地址),以及缓冲区溢出覆盖返回地址劫持执行流的底层原理。
4. 课堂的收获与不足
收获
本科时学网络攻防,总是半懂不懂、似懂非懂。这十一回实验做下来,不仅把旧知识翻出来重新过了一遍,手上的功夫也练出来了。从第一次搭蜜网到最后一次扒解码链接,每次作业都是一坑接一坑,花很多时间。有些问题的局部调试甚至要耗上两三个小时。实验报告写中几句话带过的部分,背后有时是一路排查、调试的狼狈。
从学期初开始,我用墨墨背单词,一天没断,到现在两百多天了。查文档、读报错信息的时候,那些单词确实没白背。
不足
很多攻击的底层原理,我理解得还不够深。比方说Metasploit能拿下MS08-067,可缓冲区溢出到底是怎样一步步触发的、Shellcode又是怎么搭出来的,细节之处得靠大模型替我理清楚。
浙公网安备 33010602011771号