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

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

1. 内容总结

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

第一次实践主要是让我对网络攻防有了一个入门,让我知道虚拟机到底是什么,其中又引入攻击机、靶机、SEED、密网网关等不一样的虚拟机,每台虚拟机负责不同的功能模块,这样的一个实验,让我能够对网络安全可以说是一次系统且全面的认知吧。

实验内容主要是搭建网络攻防环境,这一步主要是包括各种虚拟机的网络ip、网关地址等设置,工欲善其事必先利其器,配好环境之后才能更好的开始实验,当然这一步也踩过不少坑,然后反复的回去修改,因此,弄清原理还是非常有必要的。

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

第二次实践前半部分用Whois查sina.com.cn的域名注册信息、IP归属地,后半部分用Nmap和Nessus扫靶机。Nmap的-sS半开扫描、-O操作系统识别、-sV服务版本探测都跑了一遍,Nessus则扫出一堆SMB高危漏洞,尤其是445端口,后面第6次实验还会反复用到。

这次实验在网关设置弄了很久,在攻击机和靶机之间一直ping不通,检查后发现是宿主机的网关设置冲突了,地址需要宿主机开路由转发,和同学讨论后正常解决。

这次的内容主要是web的信息收集技术,通过各种查询手段,获取网上各种各样的信息,主要有如下:
1、DNS域名查询;
2、获取好友IP地址;
3、nmap扫描靶机;
4、Nessus漏洞扫描;
5、搜索网上足迹与隐私泄露。

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

第三次实践主要练tcpdump和Wireshark。tcpdump抓访问Web的流量,Telnet链接复旦大学BBS进行后台访问。Wireshark的过滤器语法和Follow TCP Stream功能在这次实验里用得很熟。

重点是分析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明显卡顿,抓包看到大量半连接状态,直观感受到三次握手设计上的脆弱。TCP RST攻击通过伪造复位报文强行断开连接,让我对序列号的重要性有了实感。Ettercap做ARP投毒后,Telnet的账号密码直接在Wireshark里明文显示,再次验证了明文协议在不可信网络里有多危险

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

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

Snort部分遇到了版本问题——教程是Snort2,Kali默认装的是Snort3,配置方式和命令参数都不一样。后来手动开了内置规则,在local.rules里补了针对Nmap各种扫描的检测规则。IDS规则其实就是把协议字段、标志位、频率写成可匹配的条件,不是什么黑盒。Honeywall的规则也看了一下,eth0方向记录并放行攻击流量让攻击进入蜜罐,eth1方向做速率限制,在捕获攻击和防止被攻陷之间做平衡。

第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才稳定。

取证分析部分通过逐条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对Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权;防守方使用Wireshark监听网络数据包,分析攻击过程,获取攻击者的IP、目标IP和端口、攻击发起时间、攻击利用漏洞、使用的Shellcode以及成功之后在命令行输入的信息。

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

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

僵尸网络取证部分学了IRC C2的通信模式,通过NICK、USER、JOIN消息追踪蜜罐加入IRC网络的过程。把静态样本、动态行为和网络通信串在一起判断恶意代码,这是我这次最大的收获

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

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

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

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

第十次实践是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,也是第一次在作业里面见到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、栈对齐,任何一个细节不对都可能失败。对一个刚接触pwn的人来说,这种“在调试器里能通、实际跑不通”的问题特别打击信心,但也特别涨经验。

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

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

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

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

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

总的来说,这门课程学到了很多,对网络攻防有了一个系统的认知,对网络攻防的了解不止停留在短视频中宣传的红蓝对抗,而是真正的参与到攻防实践当中去,在第六次实验和第七次实验真正的完成了一次攻击和防守方的操作,认识到了找漏洞的重要性,找对漏洞,攻击就很容易;同时让我了解了‘胖’的实际课程作业,这次作业让我印象深刻,因为平时自己也了解参加过一些攻防比赛,第一次在第九次实践上了解到pwn的相关内容,还是印证了那句话,“以赛促学”的重要性。
今后我会继续保持学习网络攻防的脚步,将理论用于实践,同时与在课程上认识的优秀同学保持深度交流,在未来取得优异的成绩!

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