20252919 2025-2026-2 《网络攻防实践》课程总结
20252919 2025-2026-2 《网络攻防实践》课程总结
1. 内容总结
第一次实验是整个课程的起点,在VMware Workstations上把攻击机(Kali、SEED Ubuntu9、WinXP attacker)、靶机(Win2kServer、Metasploitable2-linux)和蜜网网关(Honeywall)全部装好并配通。看似简单,实际上花了不少时间解决虚拟机IP分配失败、Kali安装黑屏等问题。最终所有虚拟机互ping通了,后续十一周的实验才有了基础。
这次主要学的是攻击前的情报收集——查sina.com.cn的DNS注册信息和IP归属地,用nmap扫靶机的开放端口、操作系统版本和运行服务,还用了Nessus扫漏洞。最有意思的是通过QQ/MSN获取好友IP地址并定位地理位置,以及在自己名字相关的信息,发现网上不经意间泄露的个人信息远比想象中多。
重点是tcpdump和Wireshark两个工具的实操。用tcpdump抓了访问天涯社区的流量,分析出浏览器实际请求了多少个Web服务器。Wireshark部分印象最深的是分析TELNET登录——用户名密码完全明文传输,直接在Follow TCP Stream里看得一清二楚。还用Wireshark对listen.cap做了取证分析,还原了攻击主机IP、目标IP、扫描工具和扫描方法。
这次动手做了五种协议层攻击:ARP欺骗(用netwox伪造ARP包冒充网关)、ICMP重定向(让目标把流量发到攻击机)、SYN Flood(大量半连接占满服务器资源)、TCP RST(强制断开已建立的Telnet连接)、TCP会话劫持(用ettercap中间人拦截并插入自己的数据)。做完这些才真正明白TCP/IP协议在设计之初就没考虑太多安全问题。
从攻击转到防御的一次实验。在Kali上配了iptables防火墙——阻止ICMP让主机不被ping到、只允许特定IP访问特定服务。然后用Snort对pcap文件做离线入侵检测,输出报警日志后分析出了nmap扫描行为。最后分析了蜜网网关的配置文件,理解了黑白名单、规则链这些机制是怎么在真实环境中拦截和记录攻击的。
先是用Metasploit的MS08-067模块打Win2kServer靶机,设好反向TCP连接就拿下了shell,在靶机上建文件夹验证控制成功。取证分析部分用Wireshark分析蜜罐抓到的攻击日志,发现攻击者通过Unicode漏洞和RDS漏洞打进来,下载文件、尝试添加用户,最后留言"best honeypot I've seen"。团队对抗是我最喜欢的环节——和吴岳峰同学互相攻击和防守。
用nmap扫Metasploitable靶机发现了Samba的Usermap Script漏洞,然后Metasploit加载对应模块,选远程shell做payload,直接就拿到了root权限的shell。防守方则用Wireshark抓包分析,从SMB数据包里提取出了nohup这样的命令,还原了攻击者的操作链路。
分析了一个叫RaDa.exe的恶意样本:先用file和PEiD确定它是Windows PE文件且加了UPX壳,用超级巡警脱壳后再用IDA Pro反汇编,通过字符串和函数调用图发现它会连外部网站下文件、改注册表Run键开机自启、扫内网网段。网络数据源分析那块研究了IRC僵尸网络——wireshark里看到大量连6667端口的IRC通信,还原了C&C服务器怎么给肉鸡发指令。
第9次实践 软件安全攻防--缓冲区溢出和shellcode:
三个递进任务:先用vim+xxd手工改pwn1的机器码,把call指令的偏移改成跳转到隐藏的getShell函数;然后利用foo函数的strcpy溢出,用32字节填充+4字节覆盖返回地址实现了控制流劫持;最后自己写了一段shellcode,关了ASLR、设堆栈可执行,构造NOP滑板+shellcode+返回地址的payload注入进去成功弹了shell。用gdb设断点看寄存器验证shellcode位置的过程非常涨知识。
用Metasploit的MS06-014模块生成恶意网页木马,靶机浏览器一访问就被控了。取证分析部分很有挑战性——从start.html出发一层层解密跳转地址,用MD5值作为文件名下载后续文件,对下到的二进制程序做反汇编和动态调试还原攻击代码。还学了xxtea算法解密base64内容。
SQL注入部分:在登录框输入Admin'#绕过认证进管理后台,用UPDATE注入改别人的工资和密码——一条', salary='0' where Name='Alice';#就把Alice工资清零了。XSS部分:在Elgg个人资料里嵌入JS脚本,从弹alert开始,一步步做到窃取cookie发到攻击者服务器、自动加好友、自动改他人资料,最后写了个能在用户之间自我传播的XSS蠕虫。防御方面用参数化查询修了SQL注入,用HTMLawed插件和CSP挡XSS。
2. 最喜欢且做得最好的实践是哪次?为什么?
我最喜欢的一次实验是第六周的实践"Windows操作系统安全攻防"。
在团队对抗实践环节,我和吴岳峰同学协作,分别进行了攻击和防御实验。我们首先在虚拟网络编辑器中将各自的Kali攻击机和Win2kServer靶机均设置为Vmnet0桥接模式,并确保在实验过程中连接同一WiFi。配置完成后,我们确认了攻击机和靶机的IP地址,并进行了连通性测试。作为攻击方,我使用Metasploit对防守方的WinXP attacker靶机选择漏洞进行攻击。我利用MS08-067漏洞进行远程渗透攻击,查看攻击负载,设置攻击载荷为反向TCP连接,设置目标主机IP(RHOST)和本地主机IP(LHOST)。执行攻击后,我成功进入对方的主机,并在对方主机中创建了文件夹,靶机中也清晰地显示了该文件夹。而作为防守方,吴岳峰同学通过Wireshark监听并分析了网络数据包,尝试追踪我的攻击行动。在这一过程中,我们互相交流、协作,共同完成了攻击和防御的实验。
这次实验让我最喜欢的部分就是能够和同学一起模拟攻防双方。在团队对抗实践中,我和吴岳峰同学的协作让我感受到了网络攻防的真实性和复杂性。我们通过互相配合,不仅完成了攻击和防御的任务,还深入理解了网络攻防的各个环节。在攻击过程中,我需要不断思考如何利用漏洞获取目标主机的访问权,而在防守过程中,吴岳峰同学则需要通过Wireshark分析网络数据包,追踪我的攻击行动。
3. 本门课学到的知识总结(重点写)
3.1 安全加固和检测技术
工具方面我主要掌握了四个:Nmap做端口扫描和服务发现(-sP存活探测、-sS半开扫描、-O系统指纹、-sV服务版本),Wireshark做流量分析和取证(Follow TCP Stream还原会话、过滤规则筛选特定流量),Nessus做自动化漏洞扫描,Snort做入侵检测。特别是Snort那次,从配配置文件到输出报警日志再到分析出nmap扫描行为,完整走了一遍IDS的工作流程。
加固方面,学会了用iptables写规则——先设INPUT链默认DROP,然后按需放开特定IP对特定端口(如22、80)的访问,禁止ICMP不让主机被ping到。从扫描结果出发做加固的思路就是:扫出来哪些端口开着但不需要→关掉;哪些服务版本太老有已知漏洞→升级或打补丁;能访问的IP范围太大→加访问控制收紧。
蜜网网关的分析也很有意思,看了它的iptables规则链、黑名单白名单、IDS/IPS检测规则,理解了怎么用蜜罐诱捕攻击者同时又不让攻击者从蜜罐逃逸出去攻击内网。
3.2 Web安全技术
SQL注入这块,我在实验里实际跑通了联合查询注入和盲注。核心就是利用Web应用把用户输入直接拼SQL语句这个缺陷——输入Admin'#用单引号闭合前面字符串、用#注释掉后面的密码校验,直接绕过登录。UPDATE注入就更直接了,', salary='0' where Name='Alice';#能把别人工资改了。修复用参数化查询(Prepared Statement),$conn->prepare("SELECT * FROM credential WHERE name=? AND password=?"),把数据和SQL逻辑彻底分开。
XSS方面做了反射型和存储型,从最简单的<script>alert('XSS')</script>弹窗开始,逐步做到读取document.cookie发给攻击者、自动发POST请求加好友和改资料、最后写了一个带自我复制逻辑的蠕虫脚本。XSS蠕虫的原理就是利用用户查看profile时自动执行嵌入的JS,JS再把自己的代码写入受害者profile,形成传播链。防御靠输入过滤(HTMLawed)、输出编码和CSP配置。
CSRF和文件上传漏洞也接触了,理解了大意——CSRF是利用用户已登录的身份让浏览器在不知情下发请求,文件上传绕过后缀验证就能传webshell。
3.3 逆向分析技术
主要用了IDA Pro做静态分析——加载RaDa.exe后看Strings窗口提取URL/IP/注册表路径等线索,函数调用图分析程序整体逻辑,伪代码窗口理解关键功能的实现细节。配合file命令识别文件类型、PEiD查壳类型(UPX)、超级巡警脱壳机脱壳。
动态调试方面,第8次用了Process Explorer监控恶意代码运行时的进程行为,第9次用了gdb对pwn1设断点、跑程序、看寄存器和栈内存——x/40x $esp看栈内容确认shellcode是否写到位。
整个逆向流程就是:确定样本是什么格式→有没有加壳→有壳就脱→脱完静态看代码逻辑和字符串→动态跑起来看实际行为→综合分析得出结论。另外还学了改十六进制机器码修改程序执行流,那个xxd转hex→改偏移→xxd转回的流程很实用。
3.4 主流代码审计技术
接触了三种语言的安全问题:
PHP这块,在第10、11次实验里看了Elgg平台的源码。SQL注入的根因就是"SELECT * FROM users WHERE name='$input'"这种拼接写法,用户输入里的单引号能改SQL语法结构。XSS的根因是直接把用户输入echo到HTML里没做转义。修复都是改源码——拼接换prepare,echo加htmlspecialchars。
C语言在第9次实验里体现得很直接——strcpy(buffer, user_input)不做长度检查,当user_input超过buffer大小时多出的数据就会覆盖栈上保存的返回地址。看了一下pwn1反汇编出来的代码,foo函数栈帧里buffer离返回地址只有几十个字节,溢出就改写EIP。
汇编也能看了,call、jmp、cmp、je、jne、nop这些常见指令的意思和机器码对应关系基本掌握了,能根据反汇编结果推理程序逻辑。
3.5 程序设计
这门课不是纯编程课,但涉及的编程场景挺多的:
Python在课程中用得最多,主要是写自动化脚本,requests库发HTTP请求、scapy构造网络包。做爬虫和漏洞验证脚本的时候会用到。
Shell脚本大部分实验都在用——管道、重定向、批量处理。很多自动化操作靠一行bash命令就搞定了,比手动点来点去效率高很多。
JavaScript在第11次实验里写了不少——document.cookie读cookie、XMLHttpRequest发请求、用innerHTML改页面内容。尤其是写那个XSS蠕虫的时候,需要理解DOM操作和事件触发机制。
汇编也算接触了——x86的mov、push、call、jmp、nop,能看懂反汇编结果,能手工改机器码。第9次实验用perl生成攻击字符串,用十六进制编辑器改ELF文件,这些都属于底层编程能力。
C语言的缓冲区溢出原理也理解了——函数调用时栈帧怎么建、局部变量和返回地址怎么排布、strcpy为什么危险。
3.6 计算机病毒技术
第8次实验分析RaDa.exe让我搞清楚了病毒、蠕虫、木马三者的区别:病毒会感染其他文件并自我复制,蠕虫能自主通过网络传播,木马伪装成正常软件诱骗执行后开后门——RaDa属于木马,它不会自己传播。
传播途径在实验里接触到的有:漏洞利用传播(MS08-067蠕虫就是通过445端口SMB漏洞传播的)、网页挂马(MS06-014在网页里嵌入恶意代码,浏览器访问就中招)、社工传播(XSS蠕虫通过好友关系链扩散)。
隐藏手段上,RaDa用了UPX加壳躲特征码检测,脱壳后看到它改注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run实现开机自启,还尝试连内网其他主机。
僵尸网络那块用wireshark分析了IRC协议流量——C&C服务器在6667端口开IRC频道,肉鸡连上去收指令执行攻击。Snort规则库里也有针对IRC僵尸网络的检测签名。
3.7 网络溯源及防范技术
溯源能力的建立是分散在好几次实验里的:第3次分析listen.cap定位了攻击源IP(172.31.4.178)和扫描方法,第5次通过Snort告警日志看出攻击类型和时间线,第6次分析蜜罐日志还原了完整的攻击链——从Unicode漏洞打进来→用RDS漏洞提权→下文件→开后门→发现是蜜罐。
攻击手法识别现在能看出来几种:端口扫描的特征是大量SYN包密集访问不同端口,SYN Flood是大量SYN不带ACK,SQL注入看HTTP请求里带单引号和SQL关键字,XSS看参数里带script标签。
防御手段会用iptables封IP、Snort设规则拦攻击流量、蜜网网关配黑白名单。第5次和第6次实验结合起来看,一个完整的防御流程就是:IDS检测告警→分析日志确认攻击→提取源IP和手法→加防火墙规则封禁→检查是否已经有主机被拿下。
3.8 加密解密技术
在实验里实际用到的不多,但涉及的几个点都挺关键:
哈希这块,MD5和SHA256的原理课上讲过——单向不可逆、固定长度输出、雪崩效应。第10次实验用MD5值当文件名从服务器下载对应的恶意文件,这就是利用了哈希的唯一性做文件标识。
对称加密在第10次取证分析里用了xxtea分组密码算法解密base64编码的数据。理解了加密在恶意代码里常用来混淆payload,增加分析难度。
加壳本质也是加密——UPX把原程序压缩加密,运行时再解压执行。所以脱壳就是解密还原的过程。第8次实验完整走了PEiD识别壳→超级巡警脱壳→分析脱壳后文件的流程。
数字签名的概念理解了,用来验证软件没有被篡改,但课程里没深入实操。
3.9 信息系统运行维护
十一次实验下来,Linux命令已经很熟了。网络配置类(ifconfig、ip、route、ping、netstat)、文件操作类(ls、cp、mv、chmod、find)、进程类(ps、top、kill)、包管理类(apt-get update/install)、文本处理类(grep、cat、head、tail、strings、xxd)、权限类(sudo、su、chown)——这些基本上是每次实验都要用的。
排错经验也在实验中被逼出来了:虚拟机网络不通就先ping网关看是不是路由问题,再查ifconfig看IP对不对,不行就检查虚拟网络编辑器里NAT/桥接设置;服务连不上就先telnet IP端口看端口通不通,通不了查iptables规则是不是拦了;Apache起不来就systemctl status apache2看报错,往往是配置文件写错了或者端口被占了;Snort报警出不来就查配置文件里output插件配对了没、目录权限给了没。
还有VMware的快照功能,实验前拍个快照,中途搞崩了直接恢复,省了大量重装时间。
3.10 网络协议分析
TCP/IP学得最透的是第4次实验——三次握手(SYN→SYN-ACK→ACK)和四次挥手(FIN→ACK→FIN→ACK)不是背出来的,是亲手用SYN Flood占满半连接队列后真实感受到的。SYN Flood的原理就是只发SYN不回ACK,服务器端SYN-RCVD状态堆积,正常请求进不来了。
ARP协议的问题在于没有验证机制——谁先回复ARP请求就信谁的,ARP欺骗就是抢在网关前面回复假的MAC映射,流量就被劫持了。
ICMP重定向利用了路由器优化路径的机制,发个假的ICMP重定向报文说"走我这边更近",目标主机就改了路由表。
TELNET的教训太直观了——Wireshark里Follow TCP Stream一看,用户名密码完全明文,没有任何加密。现在看到telnet就觉得该淘汰。
IRC协议在第8次实验里学的,服务器在6667端口监听,客户端连上去加入频道(JOIN命令),频道里收发消息(PRIVMSG命令)。僵尸网络就用这个机制——攻击者建个IRC频道,所有被控主机加进来等指令。
3.11 数据库
MySQL的基本操作在SQL注入实验里练了很多——SELECT查数据、UPDATE改字段、INSERT加记录、DELETE删数据,WHERE条件、ORDER BY排序这些都会写。
关键的是理解了SQL注入为什么能成功:不是因为SQL本身有问题,而是应用程序把用户输入和SQL语句混在了一起。当后端写"SELECT * FROM users WHERE name='" + input + "'",输入里的单引号就能逃逸出数据上下文变成SQL语法的一部分。修复方案Prepared Statement的原理就是把SQL结构和数据分两次传给数据库,数据库知道哪部分是语法哪部分是数据,数据里的特殊字符就不会被当成SQL关键字执行。
权限管理也接触到了——实验里我们用root跑数据库,现实中肯定不行。数据库应用账号应该只有对应库的读写权限,就算SQL注入打穿了,权限也被限制在那个库范围内,不至于整个服务器沦陷。
3.12 法律
课程里多次强调,所有攻击实验都是在封闭的虚拟环境里进行的,出了这个环境就不行。相关的法律法规主要记住了:
三法:《网络安全法》(2017年施行,确立了等级保护制度)、《数据安全法》(2021年施行,规范数据处理活动)、《个人信息保护法》(2021年施行,保护个人信息权益)。
两条例:《关键信息基础设施安全保护条例》(2021年)、《网络安全等级保护条例》(等保2.0的具体落实)。
核心红线就几条:未经授权不能侵入他人计算机系统、不能非法获取数据、不能传播恶意代码。我们实验用的Metasploit、nmap这些工具本身是合法的安全测试工具,但如果未经授权对他人系统使用,性质就完全变了。这一点在学习过程中一直牢记。
3.13 基础
计算机组成原理在第9次实验里是最集中的——寄存器(EIP存下条指令地址、EBP/ESP管栈帧、EAX放返回值),栈从高地址往低地址长,函数调用时先压参数再压返回地址再压ebp,局部变量在栈上分配。理解了这些才能明白为什么溢出buffer能改返回地址、为什么shellcode要放在栈上、为什么要算偏移量。
操作系统这块,做了Windows和Linux两种系统的攻防后,对二者的安全机制差异有了直观感受。Windows的MS08-067是通过SMB服务的RPC请求触发缓冲区溢出,Linux的Samba漏洞也是类似思路但具体实现不同。ASLR让地址随机化增加利用难度、DEP/NX让栈不可执行防shellcode、Stack Canary在返回地址前放校验值——第9次实验通过echo 0 > /proc/sys/kernel/randomize_va_space关ASLR、用execstack -s开栈可执行,亲手绕过了这些保护,体会很深。
计算机网络算是贯穿全程的基础——OSI七层和TCP/IP四层的对应关系、每层的代表性协议和PDU、封装和解封装的过程。ARP在二层、IP在三层、TCP/UDP在四层、HTTP/DNS在七层——第4次实验按层来攻击,ARP欺骗打二层、ICMP重定向打三层、SYN Flood/RST/会话劫持打四层,每一层都有对应的攻击面。
数据结构方面,栈的后进先出特性在缓冲区溢出里是核心——返回地址压在栈上,函数返回时pop到EIP,溢出buf就能覆盖这个值。哈希表在彩虹表攻击里用到了——预计算大量密码哈希值存表,破解时直接查表比暴力穷举快得多。
5. 课堂的收获与不足
从第一次搭建网络攻防环境,到后来的SQL注入、XSS攻击,再到最后的Web浏览器渗透攻击,每一次实验都让我跳出理论的框架在网络中实战。实践的过程并非一帆风顺——让我印象最深刻的是在进行XSS蠕虫编写实验时,我遇到了很多困难。代码总是无法按预期运行,攻击效果总是不尽如人意。但也正是在一次次的尝试与失败中,我逐渐摸清了门路,学会了如何在虚拟的世界里构建起属于自己的攻防战场。
在学习的过程中,我常常被一些细节深深触动。比如,在进行网络信息收集实验时,我通过各种工具收集到了大量的个人信息,包括IP地址、地理位置、甚至一些用户的隐私数据。那一刻,我感到了一种前所未有的责任感。如果不是在实验那么这些数据背后就是一个个鲜活的个体,他们的隐私和安全掌握在我的手中。我开始思考,如果我是被攻击者,会有多无助?这种换位思考让我更加深刻地理解了网络安全的重要性,也让我在后续的实验中更加谨慎,更加注重隐私保护。
再比如,在进行Web浏览器渗透攻击实验时,我成功获取了目标主机的控制权。看着屏幕上显示的"成功"二字,我并没有想象中的兴奋,反而有些沉重。因为我知道,这不仅仅是一次技术的胜利,更是一次对网络安全防线的突破。这种突破让我感到了一种深深的无力感,因为这意味着我们的网络世界存在着如此多的漏洞和风险。回想起本科时期,我参与了众多开发项目,从简单的网页设计到复杂的系统架构,然而,那时的我,对安全方面的考量却近乎于零。我所构建的系统,如同一座没有城墙的城堡,完全承受不了任何攻击。
在不足方面,第一是虚拟机硬件资源有限,多个虚拟机同时跑的时候明显卡顿,有时候一个实验光等加载就耗不少时间。第二是工具使用上,前期只会按教程一步步操作,出了错就不知道怎么办,到后面才慢慢学会看报错日志、查配置文件、调整参数,真正理解工具背后的原理。第三是逆向分析和缓冲区溢出这些偏底层的内容掌握得还不够扎实,尤其是IDA Pro的高级功能用得很少,汇编阅读速度也慢,如果以后从事安全方向还需要大量练习。
虽然我未来不一定能够从事网络安全方面的工作,但在这门课程中学到的思维方式、解决问题的能力和对技术的深刻理解,将在我未来的任何领域中都发挥重要作用。这些宝贵的经验和技能,将成为我职业生涯中最坚实的基石,帮助我在未来的道路上走得更远、更稳。

浙公网安备 33010602011771号