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

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

1. 内容总结

实践一 环境搭建:搭建渗透测试实验环境,包括VMware Workstation虚拟化平台的安装与配置、虚拟网络编辑器(VMnet1仅主机模式、VMnet8 NAT模式)的配置、Kali Linux、Metasploitable2、WinXPattacker、Win2kServer_SP0、SEEDUbuntu等多台靶机系统的导入与网络配置,以及roo-1.4.hw蜜罐网关的安装与配置,最终完成各虚拟机间网络连通性验证。

实践二 网络信息收集:使用whois和nslookup进行DNS域名注册人信息查询及IP地址解析,通过ipinfo.io进行IP地理位置定位;使用资源监视器获取通信好友IP地址;使用Nmap对靶机进行主机存活探测、TCP/UDP端口扫描、服务版本识别与操作系统指纹检测;在Kali上安装Nessus漏洞扫描器并完成对靶机的基本网络扫描,分析开放端口及安全漏洞;最后通过搜索引擎高级语法检索个人公开信息,评估隐私泄露风险。

实践三 网络嗅探与协议分析:使用tcpdump抓取访问百度首页的网络数据包,提取Web服务器IP并统计访问的服务器数量;使用Wireshark抓取TELNET登录BBS的完整过程,分析TELNET协议明文传输用户名与口令的安全问题,并通过追踪TCP流功能还原登录信息;对给定的listen.pcap抓包文件进行取证分析,通过统计IP数据包、识别扫描工具(Nmap)、分析扫描方法(SYN半开扫描)及操作系统指纹(p0f),还原攻击者行为。

实践四 TCP/IP协议分析:使用netwox工具实现ARP缓存欺骗攻击,通过伪造ARP回复包篡改目标主机ARP缓存表;实施ICMP重定向攻击,诱使目标主机修改路由路径;实施SYN Flood拒绝服务攻击,耗尽目标主机的半连接队列资源;通过TCP RST攻击强制中断合法TCP会话;实施TCP会话劫持攻击,在获取合法连接的序列号与确认号后伪造数据包向目标服务器注入恶意命令,验证了明文协议的安全风险。

实践五 网络安全防范技术:使用iptables配置包过滤规则,实现丢弃ICMP回显请求(主机对外部Ping无响应)和基于IP地址的访问控制(仅允许特定IP访问HTTP服务);使用Snort 3对pcap文件进行入侵检测分析,通过统计信息中的异常TCP会话行为识别SYN端口扫描攻击;深入分析蜜网网关的防火墙启动脚本(rc.firewall)、Snort配置文件(snort.conf)及IPS模式启动脚本(hw-snort_inline),理解防火墙粗粒度控制与入侵检测细粒度阻断协同工作的防御架构。

实践六 Windows系统攻防:使用Metasploit框架中的MS08-067漏洞模块对Windows 2000靶机进行远程渗透攻击,获取目标主机的系统级控制权;对蜜罐主机捕获的网络流量进行取证分析,从HTTP流量中发现攻击者利用MS00-006(mdac.dll)漏洞获取初始访问权,通过FTP下载nc.exe、pdump.exe等黑客工具,建立反向Shell后实施系统探索、痕迹清除、凭证窃取(使用rdisk提取SAM哈希)等操作,并识别攻击者已察觉蜜罐主机的行为特征。

实践七 Linux系统攻防:使用Metasploit框架中的Samba服务usermap_script漏洞(CVE-2007-2447)模块对Metasploitable靶机进行远程渗透攻击,通过构造包含恶意shell元字符的用户名实现命令注入,获取目标主机的root权限;防守方使用tcpdump和Wireshark对攻击全程进行流量捕获与分析,从SMB会话请求中提取命令注入payload(包含mkfifo和nc建立反向连接的shell命令),从反向连接端口的TCP流中还原攻击者执行的明文命令(whoami、ls、echo等)。

实践八 恶意代码分析实践:对rada恶意代码样本进行文件类型识别(PE格式)、脱壳处理(UPX 0.89.6压缩壳)及字符串提取分析,定位作者信息(Raul Siles & David Perez);使用IDA Pro对crackme1.exe和crackme2.exe进行逆向分析,通过函数调用图与字符串定位找到正确输入参数;撰写rada恶意代码深度分析报告(RAT木马,具备HTTP C2通信、持久化、DDoS攻击能力);对僵尸网络流量进行取证分析,通过过滤IRC协议流量(端口6667)提取频道用户列表,分析攻击蜜罐主机的IP及漏洞利用方式,还原蜜罐被攻陷并加入僵尸网络的完整过程。

实践九 软件安全攻防——缓冲区溢出和shellcode:通过objdump反汇编定位main函数中调用foo的call指令,手工修改ELF文件中call指令的相对偏移量,使程序跳转至getShell函数获取Shell;分析foo函数的栈帧布局(28字节缓冲区+4字节ebp,共32字节偏移),构造攻击载荷覆盖返回地址触发getShell函数执行;使用pwntools生成execve("/bin/sh")的shellcode,结合NOP sled技术和返回地址覆盖,在gdb内和外部环境中分别完成shellcode注入与执行,利用dmesg获取真实运行时栈地址解决gdb内外栈布局不一致导致的攻击失败问题。

实践十 Web应用程序安全攻防:在SEED-Ubuntu SQL注入实验环境中,利用'#注释符绕过登录认证实现SELECT注入攻击;在编辑个人资料时构造UPDATE注入语句(', Salary='50000)修改自己的工资;使用Prepared Statement修复登录验证代码使注入攻击失效。在Elgg社交平台XSS实验中,依次实现弹窗警告、显示Cookie信息、将Cookie发送到攻击者服务器、自动添加好友、自动修改受害者资料以及编写具有自我复制能力的XSS蠕虫;最后配置Content Security Policy(CSP)限制脚本执行来源并设置Cookie的HttpOnly属性防御XSS攻击。

实践十一 浏览器安全攻防实践:使用Metasploit中的MS06-014(ie_createobject)漏洞模块,配置反向TCP Payload,在Windows 2000靶机(IE 6.0)中访问恶意URL触发漏洞,获取远程Shell控制权限;对网页木马攻击场景进行取证分析,从start.html中逐层提取恶意链接、计算MD5哈希值下载对应文件、解码XXTEA和Base64等混淆内容,最终还原完整的攻击链(包含ADODB.Stream、MPS.StormPlayer、BaiduBar.Tool等多个ActiveX漏洞利用);攻防对抗实践中,使用两个不同的浏览器漏洞构造攻击页面,使用jsobfu对JavaScript载荷进行变量重命名、字符串拆分等混淆处理,防守方通过解混淆分析识别漏洞类型(CVE-2006-5575)并撰写分析报告。

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

说实话,如果要选一次最喜欢的实践,那肯定是实践九——缓冲区溢出和shellcode。我对这次实践印象特别深,做的时候也确实花了不少时间,但收获也是最大的。

为什么会喜欢这次实践呢?我仔细想了想,大概有这么几个原因:

第一个原因是它让我真正搞懂了“程序在内存里到底是怎么跑的”。前面很多实验,比如用Metasploit攻击Windows或者Linux,本质上是在用别人已经写好的工具——选一个模块,填几个IP和端口,然后敲一个exploit,成功就成功了,失败就换个payload再试。整个过程虽然也有成就感,但说实话更像是在“使用工具”,而不是在“理解原理”。但缓冲区溢出不一样。我得自己去读反汇编代码,去看sub $0x38,%esp干了什么,去看lea -0x1c(%ebp),%eax又是在算什么。当我推算出缓冲区的起始地址是ebp-28,而返回地址在ebp+4,中间隔了一个4字节的old ebp,所以总共需要填充32字节的时候,有一种“原来如此”的感觉——以前书上写的栈帧结构图,终于在这一刻跟实际的机器码对应上了。

第二个原因是调试过程虽然痛苦,但最后成功的时候特别爽。这次实验我经历了反复的失败。印象最深的是shellcode注入那部分,明明在gdb里都成功了,一换到外部终端就崩溃,一开始完全摸不着头脑。后来查阅了相当多的资料发现可以用dmesg看内核日志,我试着执行了一下,看到了崩溃时的ip=0xffffd2b0sp=0xffffde1c。看到那两行输出的时候我愣了一下,然后突然反应过来——gdb里和外部环境里的栈地址不一样!推导出正确返回地址后再次攻击,看到shell弹出来的那一刻,真的特别开心。这种靠分析和推理解决一个实际问题的经历,比照着指导书一步步走完要有意思太多了。

第三个原因是手工修改可执行文件那部分让我很有触动。用十六进制编辑器直接改ELF文件里的几个字节,就能让程序的行为发生根本改变——本来要调用foo的地方,变成了调用getShell。我当时在想,原来所谓的漏洞利用,本质上就是“控制程序的执行流”,而程序的控制流信息就那么赤裸裸地躺在二进制文件里,能不能找到它、能不能正确地修改它,完全取决于你对底层机制的理解有多深。

第四个原因可能是这次实验涉及的技术维度比较丰富,既有静态分析(objdump看反汇编)、又有动态调试(gdb设断点看寄存器)、还要写Python脚本(pwntools生成shellcode)、还得理解栈布局和地址计算。每个环节都要动手做,而且每个环节缺一不可,做下来感觉自己的能力在好几个方面都有提升。

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

这门课一共十一次实践,涉及的内容确实挺广的。下面我按照自己的理解,把学到的知识点梳理一下。

3.1 关于信息收集和漏洞扫描

信息收集是渗透测试的第一步,也是我最早接触的内容。通过whois可以查域名注册人信息,通过nslookup可以解析出IP地址,再配合ipinfo.io这样的在线服务还能定位到IP所在的城市甚至经纬度。Nmap是我用得比较多的工具,-sP做主机发现、-sT做TCP全连接扫描、-sS做SYN半开扫描(这个更快更隐蔽)、-sV识别服务版本、-O猜测操作系统。Nessus的安装过程挺折腾的,但用起来确实强大,扫描完会给出每个漏洞的CVSS评分和修复建议。信息收集这部分让我意识到,在真正发起攻击之前,能获取的信息其实比想象中要多得多。

3.2 关于Web安全

Web安全这块主要做了SQL注入和XSS两个实验。SQL注入的核心问题就是字符串拼接——把用户输入直接拼到SQL语句里,攻击者可以利用引号和注释符改变整个语句的逻辑。'#这种payload看似简单,但效果惊人,能把后面的密码验证整个注释掉。防御方案也很直接,就是用Prepared Statement,把SQL结构和数据分开,这样用户输入就永远只是数据,不会被解释成代码。

XSS这块让我印象更深,因为攻击链路很完整。最开始只是弹个alert,后来发现可以用document.cookie读取会话信息,再后来通过构造图片请求把cookie偷偷发到攻击者的服务器上。再进一步,可以用XMLHttpRequest模拟浏览器请求,让受害者自动加攻击者为好友、自动修改个人资料。最后写的那个XSS蠕虫,能把自己复制到受害者的资料里,任何人访问受害者的主页又会被感染,形成自动传播。说实话亲手把蠕虫跑通的时候,心里是有点发毛的——如果是真实环境,这种传播速度确实可怕。防御方案主要学了CSP限制脚本来源和HttpOnly让JavaScript读不到cookie。

3.3 关于逆向分析和恶意代码分析

IDA Pro是我在逆向分析部分的主要工具。用IDA打开一个程序,首先看字符串窗口,很多时候关键信息就在那里——作者签名、URL、注册表路径、文件名等等。然后通过交叉引用可以定位到哪些函数使用了这些字符串,再结合控制流图分析程序逻辑。crackme实验让我体会到逆向的基本思路:程序最终要输出成功或失败的信息,从输出字符串往回找,就能定位到关键的判断分支,再分析分支条件是什么——可能是命令行参数、可能是文件名、可能是某个加密后的字符串。

恶意代码分析那部分还涉及了脱壳。UPX是一种常见的压缩壳,加壳后的程序在静态分析时只能看到解压代码,真正的恶意逻辑被压缩了。用超级巡警脱壳机可以一键脱壳,脱完之后再用IDA打开就能看到完整的内容。rada样本的分析让我了解了RAT木马的典型结构:写注册表做持久化、创建目录存文件、通过HTTP与C2通信、还能发起DDoS攻击。

3.4 关于漏洞利用和渗透攻击

Metasploit是我整个学期用得最多的工具之一。它的核心工作流程是:search找模块→use加载→set payload选载荷→set RHOST/LHOST配置目标→exploit执行。Windows的MS08-067和Linux的Samba usermap_script这两个漏洞模块我都实际用过,都是经典的远程代码执行漏洞。印象比较深的是usermap_script那个漏洞,它本质上是通过构造包含反引号或管道符的用户名,在Samba调用外部脚本时实现了命令注入。这种利用方式让我意识到,输入过滤不全面可能导致的后果有多严重。

3.5 关于网络协议分析和流量取证

Wireshark和tcpdump是分析网络流量的核心工具。通过Wireshark的过滤语法(ip.srctcp.porttcp.flags.syn等)可以精确筛选感兴趣的数据包,追踪TCP流功能可以还原整个会话的应用层数据。在取证分析中,我学会了从流量包里还原攻击过程:从HTTP请求中找到漏洞利用的痕迹,从FTP流量中提取攻击者下载工具的过程,从后续的TCP流中还原攻击者执行的每一条命令。SYN扫描的特征就是大量SYN包配上极少的SYN-ACK和大量的RST,这个模式在Snort的统计输出里也看得很清楚。

3.6 关于缓冲区溢出和shellcode

这部分是我个人收获最大的。栈溢出的核心是利用函数返回地址存储在栈上这个事实——如果缓冲区溢出覆盖了返回地址,函数返回时就会跳转到攻击者指定的位置。关键是计算偏移量:缓冲区起始地址到返回地址的距离,本实验中是28字节缓冲区+4字节ebp=32字节。shellcode是真正要执行的恶意代码,我用pwntools生成了execve("/bin/sh")的机器码。实践中遇到的最大问题是gdb内外的栈地址不一致,这让我学会了用dmesg看内核日志来获取真实运行时的地址信息。

3.7 关于防火墙和入侵检测

iptables是Linux的包过滤防火墙工具。规则是按顺序匹配的,所以ACCEPT规则必须放在DROP之前,否则永远不会生效。我实际配置了丢弃ICMP回显请求(防止被ping探测)和基于源IP的访问控制(只允许特定IP访问指定端口)。Snort是入侵检测系统,我用的Snort 3配置文件是snort.lua,通过离线分析pcap文件可以检测出其中的扫描行为。蜜网网关的分析让我理解了防火墙和IDS的协同工作模式:防火墙做粗粒度的访问控制(黑名单、白名单、出站速率限制),Snort_inline做细粒度的深度检测和阻断。

3.8 关于操作系统和数据库基础

MySQL的基本操作在这次课程中用了不少:show databasesuseshow tablesdescribeSELECT等。通过SQL注入实验理解了一条SQL语句从拼接、解析到执行的全过程。Linux系统方面也积累了一些操作经验:systemctl管理服务、dpkg安装软件包、vim编辑配置文件、iptables管理防火墙规则、docker管理容器环境。

4. 课堂的收获与不足

这门课是我第一次系统性地接触网络攻防的完整流程。回想学期初,我对Kali Linux的操作还停留在很基础的层面,对渗透测试的理解也仅限于“听说过一些工具的名字”。经过这十一次实践,至少以下几个方面的能力有了比较明显的提升:一是工具使用的熟练度。Nmap、Wireshark、Metasploit、IDA Pro、Snort这些工具,不敢说精通,但至少知道在什么场景下用什么工具、怎么配置参数、怎么解读输出结果。遇到新的工具也大概知道从哪入手去学。二是问题排查的能力。整个学期下来遇到了不少报错——Nessus安装时密钥过期、Kali的apt源签名失效、gdb内外shellcode地址不一致、iptables规则顺序导致策略失效……每次解决问题都是一个学习过程,积累了经验也提升了耐心。三是对安全编码的重视。以前写代码真的不太在意安全问题,觉得功能能跑就行。但经过这学期,我至少会下意识地思考:这个输入有没有做过滤?SQL语句会不会被注入?用户提交的内容直接输出到页面会不会导致XSS?虽然不敢说自己已经具备了很强的安全开发能力,但“安全第一”的意识确实建立起来了。四是报告撰写能力。每个实验都要写详细的报告,要截图、要分析、要总结。这让我意识到技术再强,如果不能清晰地表达出来也是不行的。写报告的过程本身就是对所完成工作的二次梳理和深化理解。

然而,在收获颇多时,我也意识到了一些不足:深入学习方面,有些实践我只是按照实验的步骤一步步操作成功了,但对于一些深层的原理没有花时间去深挖——比如Metasploit里不同的payload(reverse_tcp和bind_tcp)在真实场景下到底有什么区别,又比如CSP配置除了限制script-src还有哪些常用的指令,这些我都没有进一步去查资料了解。工具掌握的熟练度还不够,像IDA Pro和gdb这些工具,虽然能完成实验要求的基本操作,但很多高级功能(比如gdb的pattern create、checksec等)还不太会用。

关于课程有一些个人的小建议:

1、虚拟镜像的提供上,最好可以提供一些比较新的镜像,旧的镜像在很多地方存在问题(无法update apt,极难消除的乱码等等),我个人建议kali最好新一点,目前kali2025用的比较合适,SeedUbuntu也可以新一点(SeedUbuntu20.04),可以免配置直接用Vmware Tools,实验时会方便很多

预处理好的SEED-Ubuntu20.04虚拟机,但是还没验证可迁移性:

通过网盘分享的文件:SEED-Ubuntu20.04.zip
链接: https://pan.baidu.com/s/16Bsuq3TG4AxE76zhaTur4Q 提取码: de6k
--来自百度网盘超级会员v6的分享

2、实验材料的提供上,建议核实实验将要用到的材料清单,重点确认有没有相关的材料,实验十一缺的材料(new09.htm等)给实验添加了很大的麻烦

3、针对一些常见的问题,可以在实验前就提前说明解决办法,譬如说有的实验只能用win_targert靶机而不能用WinXp攻击机;又或者是物理机无法连接校园网的问题,这一点必须得说明,实验一视频里的192.168.200.x子网和校园网默认网关的ip撞上了,就导致不少人在做实验期间,无法连上校园网,个人建议是提前说明要换一个网段,譬如说换成192.168.199.x之类;还有一个也是联网问题,部分同学的虚拟机在虚拟网络配置没有问题的情况下无法连接上互联网,实际上只要开个网络共享到VMnet就行,等等。

5. 参考文献

[1] CSDN. 网络信息收集实验参考[EB/OL]. https://blog.csdn.net/m0_68472908/article/details/137255414 , 2026-03.

[2] CSDN. 网络嗅探与协议分析实验参考[EB/OL]. https://blog.csdn.net/lhorse003/article/details/71758812 , 2017-05.

[3] CSDN. TCP/IP协议分析实验参考[EB/OL]. https://blog.csdn.net/2401_84001792/article/details/144578056 , 2025-01.

[4] 博客园. TCP/IP协议分析实验参考[EB/OL]. https://www.cnblogs.com/n0rmally/p/18789097 , 2026-03.

[5] CSDN. Web应用程序安全攻防实验参考[EB/OL]. https://blog.csdn.net/m0_52126419/article/details/130151189 , 2023-04.

posted @ 2026-06-21 13:14  _Biyan  阅读(11)  评论(0)    收藏  举报