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

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

1.内容总结

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

第1次实践要搭后面整学期要用的虚拟攻防环境,要装的东西很多:Kali、WinXPattacker、SEED Ubuntu、Metasploitable、Windows 2000 Server和Honeywall。虽然表面上看只是导入虚拟机、设置网卡、配置IP,但真正做起来才发现网络拓扑、虚拟网段、网关和靶机位置都有很多细碎的问题。攻击机侧主要连接到VMnet8,靶机侧连接到VMnet1,中间通过Honeywall进行流量转发、监控和管理。理论上这个拓扑保证了攻击流量能够进入蜜罐,同时又能被Honeywall记录和限制(但是后续的研究发现Honeywall实际上在实验中仅处于透明网桥模式,也就是被动监听而无法主动防御,实验资料给出的镜像系统缺乏网关模式驱动,无法切换为网关模式)。

最难受的是兼容性问题。Windows 2000 Server太老,在VMware 17里鼠标乱飘,VMware Tools又无法直接安装,最后需要先安装SP4补丁,再安装KB835732补丁,最后再安装Tools。SEED Labs镜像也有格式问题,需要从VDI转换成VMDK才能在VMware中正常使用。

这次实验印象非常深刻,很折磨人:教程版本各异并且有的还存在错误,时新的系统版本兼容性问题在往期作业中鲜有资料。这也倒逼我潜下心来去研究一个个的问题,从问题现象到产生原因再到引出的下一个问题,循序渐进、追根溯源。后面每次实验如果出现靶机不通、端口没开、流量抓不到等等各种问题,我都会先回到这次搭建时形成的问题解决思路。

第2次实践 网络信息收集与安全扫描

第2次实践围绕信息收集和漏洞扫描展开。前半部分通过Whois、多地Ping、IP归属查询等方式分析sina.com.cn的域名注册信息、解析出的IP、注册机构和大致地理位置。靶机扫描部分主要使用Nmap和Nessus。Nmap先做主机存活探测,确认192.168.200.130和192.168.200.131两台靶机在线;之后用SYN扫描观察开放端口,再用-O判断操作系统类型。Nessus则更偏漏洞风险确认,对Windows 2000 Server扫描后发现SMB相关端口有大量高危问题,尤其445端口后面在Windows漏洞利用实验中反复出现。

这次实验我还遇到了VMnet1和VMnet8之间通信不稳定的问题。刚开始以为是靶机或工具问题,后来才意识到两个虚拟网段之间本来就不能自动互通,需要宿主机路由转发或额外软路由。最后通过添加路由表、开启对应虚拟网卡的forwarding解决。这个排错过程非常长且艰难,因为问题无法稳定复现,只能在出现问题时抓包反复观察,结合大模型才最终解决了这个问题,当然后期老师也建议把所有主机都放到同一个网卡中,这样做也能避免很多问题。

第3次实践 网络嗅探与流量取证分析

第3次实践主要练习tcpdump、Wireshark和离线pcap取证。tcpdump部分通过指定源地址、端口和协议过滤条件抓取访问Web站点时的TCP流量;Telnet部分因为复旦BBS无法正常访问,改用了北邮BBS。Wireshark主要是熟悉filter语法和协议层的解析。

主要还是对listen.pcap的取证分析。一眼能看到大量SYN包,明显是TCP SYN半开扫描;通过Nmap Service Probe特征串,可以进一步判断扫描工具是Nmap;通过目标返回的SYN/ACK,可以统计出蜜罐开放端口,包括 21、22、23、25、53、80、139、445、3306等等。之后又用p0f工具辅助判断攻击主机操作系统版本。

跟CTF的流量题比,这次的取证更接近实战。CTF题目目的明确,流量包通常剪得很干净;实战意义下的pcap会有一堆杂七杂八的包混进来,得想办法过滤掉无关的,从碎片化的线索里把整个攻击流程串起来。

第4次实践 TCP/IP协议栈攻击

第4次实践集中验证TCP/IP协议族中的经典安全问题,包括ARP缓存欺骗、ICMP重定向、SYN Flood、TCP RST和TCP会话劫持。局域网里的IP-MAC映射并不天然可信,通过伪造ARP响应就能污染目标主机的缓存。ICMP重定向则说明路由控制信息如果缺乏验证,也可能被攻击者利用来改变流量路径。

SYN Flood和TCP RST对我理解TCP很有帮助。SYN Flood利用的是三次握手中的半连接资源消耗,攻击发生时靶机Telnet服务会明显卡顿,抓包能看到大量半连接状态。TCP RST攻击则通过伪造复位报文强行断开连接,让我对TCP连接状态和序列号有了更直观的认识。TCP会话劫持部分使用Ettercap做ARP投毒,再观察Telnet明文通信,可以看到账号、密码和执行命令,Telnet这类明文协议在不可信网络中风险很大。

这次实践比较有价值的一点,是把协议原理和安全连起来了。以前学习ARP、ICMP、TCP时更多从应用面上关注工作流程,这次则从攻击的角度看到了协议的脆弱性。防御上也能对应起来:ARP欺骗需要静态绑定、交换机安全策略或检测工具;ICMP重定向在很多场景下应关闭;SYN Flood可通过SYN Cookie、连接限速等缓解;Telnet应尽量替换为SSH。这些实践让我对协议安全有了一个基本的了解。

第5次实践 防火墙与入侵检测

第5次实践从攻击转向防御,主要做了iptables、Snort和Honeywall规则分析。iptables部分先用规则丢弃ICMP,使主机不再响应Ping;之后设置默认INPUT DROP,再按源IP放行特定主机访问Telnet服务。防火墙不是把命令堆上去就行,如果先DROP又忘记放行必要流量,可能把正常业务也挡在外面。

Snort部分我遇到了版本差异。教程使用的是Snort2,而Kali默认安装的是Snort3,配置方式和命令参数都不太一样。后来需要手动开启内置规则,并在local.rules中补充针对Nmap SYN、FIN、NULL、XMAS、ACK扫描的检测规则,再把告警输出为JSON方便查看。IDS规则本质上就是把协议字段、标志位、频率、方向和特征内容写成可匹配的条件。

Honeywall导出的iptables规则里可以看到eth0方向更多是记录并放行攻击流量,让攻击进入蜜罐便于观察;eth1方向则对蜜罐对外的TCP、UDP、ICMP和其他协议做速率限制、日志记录和队列处理。蜜网网关不只是简单阻断攻击,而是在捕获攻击行为和防止被攻陷之间做平衡。

第6次实践 Windows漏洞利用与NT入侵取证

第6次实践开始进入完整的漏洞利用和取证分析。动手部分使用Metasploit复现Windows SMB相关漏洞,例如MS08-067和MS06-040。使用MS08-067时,需要在msfconsole中搜索模块、选择windows/smb/ms08_067_netapi,设置RHOST、LHOST和payload,最后获取shell。MS06-040部分还遇到了payload选择问题,默认payload会导致Windows 2000的service.exe异常终止并关机,后来改用windows/shell_bind_tcp才稳定成功。

把TCP流按顺序排查下来,能还原出攻击者先去访问IIS探测,然后用Unicode路径穿越读了boot.ini,再通过/msadc/msadcs.dll/AdvancedDataFactory.Query触发命令执行。后面攻击者把cmd.exe复制了一份,逐行写ftpcom脚本,从远端拖nc.exepdump.exesamdump.dll下来,再通过Netcat拿交互shell、提口令、想办法回传出去。

Metasploit那句session opened只是个结果,过程在流量里:SMB协商、命名管道访问、利用数据传输、bind shell打开、命令执行验证,一步一步都能对上号。从防御视角看,及时打补丁、关不必要的服务、限制IIS/ADC组件、堵异常外联、留好日志,每一项都很关键。

第7次实践 Linux漏洞利用与攻击流量分析

第7次实践与第6次形成对照,目标从Windows换成Linux。第一部分使用Metasploit攻击Metasploitable上的Samba usermap_script漏洞,配置exploit/multi/samba/usermap_scriptcmd/unix/bind_netcat payload后成功获取root shell。

攻防对抗部分本来教程里有vsftpd 2.3.4后门模块,但我这里没有打通。后来根据Nessus扫描结果改用exploit/unix/misc/distcc_exec。distcc是分布式编译服务,运行在 3632 端口,漏洞点在于老版本配置下可能接受远程编译任务并把参数中的命令交给shell执行。我通过Wireshark观察到攻击机连接目标 3632 端口,发送带sh -c的任务参数,目标返回STAT00000000,随后建立反向shell。

一个漏洞模块跑不通不代表靶机打不动,回到扫描结果、服务版本和实际流量里找入口就行。工具版本、系统版本、网络环境的差异都可能让实验复现不了,得静下心来从漏洞扫描换个思路重新切入。

第8次实践 恶意代码分析与僵尸网络取证

第8次实践内容非常综合,包括RaDa恶意代码样本分析、crackme逆向和Windows 2000蜜罐流量取证。RaDa样本分析从文件格式开始,用file命令判断为PE32 Windows可执行程序,用PEiD识别UPX壳,再用脱壳工具处理。脱壳后通过IDA和字符串搜索定位作者信息,也能看到与HTTP通信、命令下载、文件上传下载相关的字符串。

动态分析中,Process Monitor和Process Explorer的作用很明显。RaDa运行后会把自身复制到特定目录,创建临时目录,修改注册表实现自启动,并周期性访问 10.10.10.10 上的rada_commands页面,根据返回内容执行exeputgetscreenshotsleep等命令。综合下来我把它划为后门木马,而不是传统的文件感染型病毒或者自传播蠕虫。

僵尸网络取证那段让我对IRC C2有了系统性的认识。蜜罐通过NICK、USER、JOIN消息接入IRC频道,后续TCP流和攻击流量里能看到攻击者用漏洞投递文件、建立远控的整个过程。

第9次实践 二进制漏洞利用与Shellcode注入

第9次实践围绕pwn1程序做了三种不同层次的利用。第一种是手工修改可执行文件,把原本调用foo的call指令改为跳转到getShell,相当于直接篡改程序控制流。第二种是利用foo函数中gets不检查输入长度的问题,通过构造填充数据覆盖返回地址,使程序返回时跳到getShell。第三种难度最大,需要把shellcode放到栈上,再用返回地址跳到NOP sled和shellcode区域执行。

虽然已经关闭ASLR,也设置了栈可执行,但在gdb里直接run得到的buffer地址放到终端运行时并不稳定,导致payload在调试器里有效、实际终端中无效。后来我换成先运行程序、再用gdb attach的方式观察真实运行时栈地址,问题才解决。

第9次把很多基础知识串起来了:IDA用来看函数结构,gdb用来看寄存器和栈,Python用来构造payload,小端序影响地址写法,gets体现输入边界检查的重要性,ASLR/NX则是现代系统防御的基础。初次接触PWN类型的题目,感觉还挺有意思。

第10次实践 SQL注入与XSS攻击防御

第10次实践主要是SEED Labs的SQL注入和XSS。SQL注入环境需要自己下载Labsetup、构建Docker容器、配置hosts,才能访问www.seed-server.com。在熟悉MySQL数据库后,我查看了credential表,并分析了unsafe_home.phpunsafe_edit_backend.php的源码。登录处把用户名和密码直接拼接进SQL,导致可以用admin'#之类的输入闭合字符串并注释后面的密码判断,从而绕过登录。

UPDATE注入更能说明SQL注入的危害不只是绕过认证。Alice正常情况下只能修改个人资料,不能改工资字段,但通过在nickname字段构造闭合和追加语句,就可以把salary改成指定值。防御部分我尝试通过过滤危险字符和关键字阻止注入,但做完以后也认识到,这种方式不够稳妥,真正更可靠的是参数化查询、预编译语句和最小权限原则。

XSS部分从简单弹窗开始,逐步做到读取Cookie、把Cookie发到攻击者监听端口、自动添加好友、自动修改受害者资料,最后构造能复制自身的XSS蠕虫。这里最关键的是抓取正常请求,弄清楚Elgg添加好友和修改资料时需要__elgg_ts__elgg_token、guid等参数,然后用JavaScript自动构造请求。最后配置CSP后,页面中的内联脚本无法正常执行,说明浏览器安全策略可以作为防御链中的一环。

SQL注入是把输入当成SQL代码执行,XSS是把输入当成HTML/JavaScript执行,本质上都是数据和代码边界没有处理好。

第11次实践 浏览器漏洞利用与网页木马分析

第11次实践主要围绕浏览器端漏洞利用和网页挂马取证。动手部分用Metasploit配置MS06-014、MS06-055等浏览器漏洞模块,在Kali上开启服务,Windows 2000的IE访问恶意URL后建立shell。后面又构造统一入口页面,把真实攻击URL进行Base64伪装,并通过隐藏iframe自动加载payload。这个过程让我理解了浏览器攻击和服务端漏洞利用的不同:服务端漏洞是攻击者主动连接目标服务,浏览器漏洞则依赖受害者访问攻击者控制的页面。

网页木马分析部分更加复杂。入口从start.html开始,找到new09.htm,再继续分析隐藏iframe、外部脚本、MD5命名文件和多层混淆代码。解码过程中涉及Base64、XXTEA、十六进制、packer、%uXXXX shellcode等多种处理方式。分析脚本后可以看到它会通过ActiveX控件漏洞下载并执行后续EXE,例如bf.exe、pps.exe等。对于bd.cab解出的bd.exe,还通过IDA字符串分析发现其可能释放AutoRun.inf、修改注册表、干扰安全软件并下载更多木马组件。

攻防对抗部分从防守视角看邮件和网页源码,能发现表面链接只是入口,真正加载的是隐藏iframe和后续payload。Wireshark中可以看到访问index.html之后又加载/ms06014/payload等资源,后续还有靶机主动外联攻击机建立shell。总结下来,Base64或混淆不是加密,只是拖慢分析速度;防守方需要结合源码、HTTP请求、外联连接和主机行为一起判断。

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

我最喜欢且做得比较扎实的是第9次实践,二进制漏洞利用与shellcode注入。

由于之前是Web手,一开始我觉得有点无从下手,之前没有接触过IDA和gdb,IDA的很多快捷键、命令啊什么的都没有接触过,用gdb动调、汇编什么的就更一头雾水了。像Metasploit等等这类工具只要参数配置正确,成功和失败一般比较直观;但做这个pwn实验的时候,一个地址、一个偏移、一个字节序写错,就会导致poc失败,而且往往没有错误提示,只能知道这个题目没有打通。因为没有基础,所以刚开始通过大模型恶补了一些基础的汇编指令,但是IDA打开不知道要干嘛。在网上找了一些逆向入门博客,积累了一些IDA的操作方法和快捷键等等,逐渐知道了该怎么着手去分析一个二进制程序。分析实验样本的时候,修改call指令还算清楚,在IDA里看到main调用foo,再找到没有被调用的getShell,通过修改机器码改变控制流,突然感觉好像逆向还挺有意思,感觉这些re手和pwn手能从这么多指令中找到关键逻辑很厉害。

第二部分缓冲区溢出让我真正理解了栈帧结构。以前学了一些操作系统基础,看到EBP、ESP、EIP、返回地址这些词,大概知道它们是什么,但没有很强的直觉。借助大模型构造poc时感觉很奇怪:为什么payload前面会有那么多“A”,仔细研究才了解到前面的“A”是填充,是为了覆盖局部变量和栈上的其他内容,最后4个字节才是真正要写到返回地址上的目标地址。小端序也不是抽象概念,而是必须把0x0804847d之类的地址倒过来写进payload里,以前学的计组知识此时串起来了。

第三部分shellcode注入是我花时间最多的地方。问题不在于自己写shellcode,而在于让程序运行能够跳转到你指定的位置。一开始我借助大模型来做题,按照给出的思路一步步做,明明按照要求关闭了地址随机化,在gdb里运行也能看到buffer地址,但离开gdb后又不成功。这个问题卡了很久,最后实在不行向一个re手师弟请教了一下才发现问题在于gdb上运行的程序产生的栈帧地址与实际运行的不一致,要么poc也在gdb上打,要么想办法在独立运行的情况下获取栈帧地址。通过他的建议,先让程序在终端里运行起来,再用另一个终端使用gdb attach到进程上看真实栈地址。虽然师弟说有点“文艺复兴”,但好在最终顺利解决了问题。现在回头看,这个坑反而是这次实践最有价值的地方,它让我知道漏洞利用对环境非常敏感,不能只把调试器里的结果当成最终结果;同时也不能过度信赖大模型,向有经验的人请教会少踩很多坑。

我觉得这次做得好,不只是因为最后成功拿到了shell,而是因为我把失败原因也弄明白了。偏移为什么是那个值,返回地址为什么要小端序,NOP sled为什么能增加容错,gdb run和attach为什么会影响地址,这些问题如果不亲自踩坑,很容易停留在背概念的层面。把这些原理搞通后我还想了很多,想找找除此之外有没有什么别的方法可以在不获取栈帧地址的条件下直接打通。因为前面32字节是填充嘛,我在想能不能写一个很小的shellcode放在填充位,通过“相对跳转”的方式直接跳转到前面写的shellcode中,这个问题我跟大模型和同学也都讨论了一下,结果是不存在相对跳转的概念,但如果程序中有ret这类gadget就可以实现我的想法,可惜找了一遍实验样本没有找到合适的触发条件。这次实践把逆向、操作系统、汇编、C语言漏洞和Python构造数据都串到了一起,收获很大!

3.本门课学到的知识总结(重点写)

3.1 安全加固和检测技术

这门课从最基础的信息收集开始,一步步去理解安全检测和加固的关系。第2次实践用Nmap做主机发现、端口扫描、服务版本识别和OS判断,用Nessus基于这些结果给出漏洞风险。扫描结果真正的价值在于帮你找攻击入口:Windows靶机的445、Linux靶机的Samba和distcc,全都是从前期信息收集打点下来的。

Nmap不同的参数对应着不同层次的检测。主机存活回答是否在线,SYN扫描回答是否开放端口,服务识别回答跑的是什么服务,OS识别回答系统版本是什么。单独看哪个都意义有限,但把这些信息拼到一起就能凑出目标画像。Nessus报告里高危漏洞不少,但不是每个都能稳定利用,不能太迷信自动化扫描——真正能用的判断要把服务状态、版本、网络连通性、漏洞触发条件一起考虑。

防护技术这边,第5次实践把iptables真正用了一遍。iptables的INPUT、OUTPUT、FORWARD链分别对应进本机、出本机、转发流量;策略可以是DROP也可以是ACCEPT,但规则的先后顺序非常关键。比如丢掉ICMP能挡Ping,按源IP放行能实现简单白名单,但默认拒绝之后如果忘记把管理连接放行会导致自己也连不上。

Snort让我搞清楚了IDS和防火墙的分工。防火墙像一道闸,决定流量能不能过;IDS更像监控,监控经过的流量看可不可疑。Nmap扫描、奇怪的TCP标志位组合、高频连接、特征字符串这些都可以写成规则去匹配。Honeywall把两者结合了起来:攻击侧的流量尽量记录并放进蜜罐,蜜罐对外的流量再做限速、记录和队列分析。这种思路比单纯拦截攻击更接近蜜网的本意——观察、取证、控制风险。

安全加固也不是单独某一层的问题。系统层要打补丁、关多余端口、限账号权限;网络层要有防火墙规则、日志、IDS;应用层要做输入校验、权限控制、安全编码;实验环境层还得隔离网络,免得被打穿的主机反过来攻击外部。这几层不是互相替代,而是叠在一起用的。

3.2 Web安全技术

Web安全部分主要集中在第10次和第11次作业,但其实前面几次也有铺垫。第6次NT入侵分析里出现IIS Unicode目录穿越、RDS/ADC命令执行;第11次网页木马里又出现隐藏iframe、外部脚本、ActiveX控件和多阶段下载。

SQL注入实验把数据和代码混在一起的危险性体现得很清楚。登录逻辑里用户名密码直接拼进SQL,攻击者通过闭合引号加注释符就能把判断逻辑改掉。UPDATE注入更进一步说明问题,注入不光能绕过认证,还能改库里的敏感字段。

我也试过用过滤危险字符和关键词来防SQL注入,但是经验来说这种方法只适合做演示。攻击者可以通过编码、大小写变换、注释、各种数据库特定的函数和语法绕过去。更稳妥的还是参数化查询和预编译,让数据库自己分清楚哪是数据哪是SQL语法。数据库账号也应该最小权限,Web应用的账号不该有超出业务需要的能力。

存储型XSS只要写进用户资料里,受害者访问页面脚本就会自动执行。简单弹窗只是验证一下漏洞存在,真正能造成破坏的是读Cookie、构造请求、改资料、自动加好友,甚至复制自身搞成蠕虫。在Elgg实验里,攻击脚本得带上__elgg_ts__elgg_token和guid,做这块的时候顺便也复习了一下CSRF Token,光带Cookie还不行,请求还得带页面里生成的合法令牌。

XSS防御不能只靠一个点。输入过滤能减少危险标签和属性;输出编码能避免用户内容被浏览器当代码执行;HttpOnly能让Cookie不那么容易被JS读到;CSRF Token能挡住跨站伪造请求;CSP能限制脚本来源和内联脚本的执行。

第11次实践中,攻击者把入口页面伪装得跟普通页面一样,真正的payload靠iframe、Base64、XXTEA、十六进制和shellcode层层藏起来。防守这边不能只看页面上能看见的链接,源码、开发者工具、HTTP流量、外部资源、主机行为都要看。Web安全到最后不是会写几条过滤规则就行,而是要理解请求从浏览器到服务器再回浏览器的整个过程。

3.3 逆向分析技术

逆向分析主要体现在第8次、9次和11次。第8次分析RaDa样本时,我第一次比较系统地使用PEiD、脱壳工具、IDA Pro、strings、Process Monitor和Process Explorer。静态分析能看到文件格式、壳、导入函数、字符串、URL、注册表路径等线索;动态分析能看到程序实际创建了什么文件、改了什么注册表、是否常驻后台、是否访问网络。单独依赖一种工具很容易误判,只有把多个线索拼起来,才能比较准确地判断样本功能。

IDA Pro对我来说最开始很陌生,只会按Shift+F12看字符串。后来分析crackme和pwn1时,逐渐明白字符串只是入口,真正重要的是控制流和条件判断。crackme1找到密码字符串后还要看strcmp;crackme2还要看文件名检查;pwn1则要看main、foo、getShell之间的调用关系。逆向分析不能停留在搜索可疑字符串,还要回到函数逻辑里解释程序为什么这样运行。

第9次把逆向和漏洞利用结合起来。IDA用来确认函数地址和调用关系,gdb用来观察寄存器、栈内容和返回地址,objdump/xxd可以辅助查看机器码。通过这些工具,我对call、ret、栈帧、返回地址、小端序有了实际体会。以前对于汇编感觉无从下手,现在至少能看懂与漏洞利用相关的基本指令和内存变化。

第11次网页木马分析则是JavaScript逆向和二进制样本分析的结合。脚本中通过Base64、XXTEA、packer和%uXXXX混淆shellcode,分析时需要先判断编码方式,再逐层还原,最后根据API字符串和下载地址判断功能。bd.exe这种落地样本又需要用IDA看字符串、注册表路径、AutoRun、服务配置等信息。

目前我的逆向能力还比较基础,IDA的高级功能、动态调试、反调试、壳原理、Windows API细节都还不熟。但实验让我建立了一个入门的着手思路:先判断文件类型和壳,再提取字符串和导入函数,接着看关键函数控制流,最后用动态行为和网络流量验证静态判断。

3.4 主流代码审计技术

代码审计在第10次体现得最明显。SQL注入和XSS的根源都能从源码里直接看到:用户输入没有经过安全处理就进入SQL语句,或者没有经过输出编码就显示到页面中。审计时不能只搜漏洞名,而是要沿着输入流动路径看它最终被用到哪里。比如从$_GET$_POST、表单字段、Cookie这些入口开始,看数据是否进入数据库查询、命令执行、文件路径、HTML输出或JavaScript拼接。

审SQL注入的时候,我重点看字符串拼接、引号闭合、错误回显、数据库权限。审XSS的时候,重点看用户可控的内容有没有直接落到HTML、属性、脚本块或者URL里。第10次实验里unsafe_home.phpunsafe_edit_backend.php的问题比较显眼;真实项目里通常会经过好几层函数、模板、框架封装,难度会高很多。

第11次的网页木马分析其实也是一种脚本审计。要看JS怎么创建object、iframe、script标签,怎么解码字符串,怎么判断ActiveX控件,怎么拼下载地址,怎么触发漏洞。

主流代码审计还包括危险函数识别。PHP中的evalsystemexec、文件包含、反序列化等都可能带来风险;Python中的evalpicklesubprocess、模板渲染也需要注意;Java中常见问题包括反序列化、SQL拼接、XXE、路径穿越等。

3.5 程序设计

这门课里编程能力不是以单独项目的形式出现的,而是散在每次实践里。第9次用Python拼payload——把填充字节、返回地址、NOP sled、shellcode拼到一起;第10次用JavaScript构造Ajax请求,自动读token和时间戳,做自动加好友、改资料、蠕虫复制;第11次分析网页木马也得看懂JS的解码、拼接、DOM操作和iframe加载。

Python在我看来是最实用的工具语言。生成字节串、处理日志、算MD5、批量提URL、IP去重、拼请求,做这些都很顺手。比如第11次需要对URL算MD5然后到hashed目录里找文件,手工一个个算太慢,写个脚本就利索了。工具能干通用的活,但实验里经常碰到要自己构造数据、整理证据、自动化重复操作的场景。后面我得继续加强Python脚本能力,把日志分析、pcap统计、Web请求构造、样本哈希整理这些流程写得更规范一些。

3.6 计算机病毒技术

病毒技术相关的内容主要在第8和第11次。第8次的RaDa让我搞清楚病毒、蠕虫、木马、后门这几者的区别。RaDa不是典型病毒,因为它不感染别的文件;也不算严格意义上的蠕虫,因为没明显的自传播机制。它更像后门木马,装到系统里,改注册表实现持久化,主动连控制端,拿命令再执行。

RaDa支持的功能有执行命令、上传下载文件、截图、休眠这些,说明后门程序的核心就是让攻击者保持持续控制。它通过HTTP去访问控制页面,比直接开个端口要隐蔽,也更容易混在正常Web流量里。Process Monitor看到的文件和注册表行为、Wireshark看到的HTTP通信,都是判定它性质的重要证据。

顺带也学了点C2通信的知识。IRC本来是聊天协议,但早期僵尸网络很喜欢拿IRC频道发指令。蜜罐发NICK、USER、JOIN加入频道后就等待控制者下发命令。分析这种流量要看服务器地址、频道名、昵称、命令消息和后续的攻击动作。只看到连IRC本身不能完全定性,但要是再加上漏洞利用、文件投递、远控连接,就能拼出一个更完整的判断了。

第11次的网页木马是另一种恶意代码传播路径。不一定要用户手动下载exe,攻击者通过浏览器漏洞和ActiveX漏洞就能自动把后续程序拉下来。脚本里会有下载地址、shellcode、漏洞对象的classid、堆喷射代码这些东西。bd.exe落地后还可能释放AutoRun.inf、改注册表、干扰安全软件、再下更多木马组件——网页木马往往只是攻击链的入口,后面还有好几个阶段。

防恶意代码不能只靠杀软。补丁更新、禁掉用不到的ActiveX、浏览器安全设置、最小权限运行、出口流量监测、DNS和HTTP日志分析、沙箱隔离、备份恢复,这些都得跟上。对样本本身,分析时要记好哈希、来源、文件路径、释放出来的文件、注册表项、网络连接、行为时间线,这些都是后续溯源处置的材料。

3.7 网络溯源及防范技术

网络溯源贯穿整门课。第3次从pcap里识别攻击者IP、受害者IP、扫描方式和开放端口;第6次从NT流量里还原IIS探测、目录穿越、RDS命令执行、FTP下载工具、Netcat shell、口令提取和痕迹清理;第7次从distcc流量里找到远程命令执行和反向shell;第8次追踪蜜罐加入IRC僵尸网络;第11次从HTTP请求和隐藏iframe里还原浏览器攻击链。

慢慢养成的一个习惯是先按时间线捋。一次攻击通常不是孤立的某个数据包,而是探测、验证、利用、投递、执行、回连、维持、清理这些阶段串起来的。分析时先把通信双方定下来,再按时间顺序看关键的端口和协议,最后把每个阶段的证据拼成链。

另一个收获是证据要分层看。三次握手只能说明连接建起来了;扫描包只能说明在探测;漏洞利用请求说明有攻击尝试;只有出现命令执行、文件下载、服务创建、shell回显或者持续外联,才更接近攻击成功的判断。第8和第11次特别能体现这一点——源码里有某个exploit链接,不代表它在流量里真被触发了;看到可疑下载地址,也得看是不是真的请求、下载、执行了。

从防范这边看,溯源不是为了事后写报告,而是为了改进防御。扫描频率高就限速加告警;SMB、Telnet、distcc、老版本IIS暴露在外就关或者限访问;恶意HTTP外联可以通过代理日志和出口防火墙发现;XSS和网页木马靠CSP、浏览器策略和终端防护来降低风险。防守要覆盖攻击链的各个阶段,而不是只堵一个入口。

我现在比较缺乏的是日志关联能力。课程里大多是单个pcap或者单环境实验,真实场景下还有主机日志、Web日志、防火墙日志、DNS日志、EDR告警等等好多数据源。后面得学学ELK、Sigma、YARA、Zeek这些工具,再结合大模型把网络流量和主机行为关联起来。

3.8 加密解密技术

课程中专门讲加密的实践不多,但第11次网页木马分析让用到了很多编码和混淆。攻击者常用Base64、十六进制、%uXXXX、packer、XXTEA等方式隐藏真实脚本和shellcode。对分析者来说要根据加密后的数据格式来判断数据是什么形式,还原后继续分析下一层。

MD5在第11次中用于样本定位。题目需要对解密出的URL计算MD5,再到hashed目录中找对应文件。哈希可以作为文件和URL的稳定标识,用来关联样本、验证完整性和组织证据。

理论上,对称加密、非对称加密、哈希、数字签名、证书链、TLS握手都属于安全基础。课程实验多集中在旧协议和明文流量,HTTPS、SSH、加密隧道等场景接触较少。真实环境中大量流量都是加密的,不能像Telnet或IRC那样直接看内容,后续需要学习基于证书、SNI、JA3/JA4指纹、流量大小、时序、DNS和终端日志的分析方法(ML/DL加密流量分析)。

3.9 信息系统运行维护

信息系统运行维护能力在这门课里非常重要,因为踩过的坑很多,系统环境配置、网络配置等等等等。这部分遇到的问题很多,对应的学到的也很多。第1次Windows 2000与VMware 17不兼容,需要安装SP4、KB835732和VMware Tools;SEED Labs镜像需要格式转换;Honeywall需要配置网卡和管理界面。没有这些运维能力,后面的攻击实验就无法开始。

网络运维问题也很多。第2次VMnet1和VMnet8之间不通,需要添加宿主机路由并开启网卡转发;第4次Kali无法访问外网,最后修改/etc/resolv.conf配置DNS;MetaSploitable的路由写错,需要把ifconfigroute add default gw分成两行并加上default。经过这些问题后,我现在排查网络故障会先看IP、网关、路由表、DNS、ARP、端口监听等情况,收集好信息后再进行一步步分析排查。

第10次Docker实验也补了一块容器相关经验。对于新版本SEEDLabs,SEED SQL注入和XSS实验都不再内置,需要下载Labsetup、dcbuild构建镜像、dcup启动容器、修改hosts。容器异常退出后会有孤儿容器或端口占用,需要docker-compose down后重新启动。SQL和XSS环境里的MySQL容器名称冲突,也会导致数据库连接异常。记得上一次配置docker还是在拉ctf题目环境。。。

系统维护还包括快照和恢复。很多实验会把靶机打崩,比如Windows 2000在错误payload下直接重启,Web容器配置错也可能访问异常。以后做比较危险的安全实验时应该先拍快照、记录关键配置、保存命令和日志。这样出了问题可以回滚。

3.10 网络协议分析

协议分析在课程里出现得非常多,基本贯穿始终。第3次实验熟悉tcpdump和Wireshark,第4次从攻击的角度去看ARP、ICMP、TCP,第6、7、8、11次不断把协议分析用到取证里。很多攻击的本质就藏在协议字段里:ARP欺骗改的是IP-MAC映射,ICMP重定向影响路由,SYN Flood打的是半连接队列,RST攻击依赖TCP连接状态。

TCP是用得最多的分析对象。三次握手、SYN、SYN/ACK、ACK、RST、FIN、端口、序列号、确认号都得能看懂。第3次靠SYN/ACK判断开放端口,第4次用RST中断连接,第6次通过TCP流还原shell命令。Wireshark里的Follow TCP Stream是我用得最频繁的功能之一,能把零散的数据包按照五元组还原成会话。

应用层协议同样关键。Telnet明文暴露账密;HTTP请求路径能定位网页木马脚本和payload;SMB/DCERPC体现Windows漏洞利用过程;IRC的NICK、USER、JOIN说明僵尸网络通信;distcc流量里的任务参数会暴露sh -c命令;DNS和Whois是信息收集的基础。不同协议有自己的字段和行为模式,分析时不能只看端口号。

协议分析还要分得清正常和异常。大量连续端口的SYN包多半是扫描;特殊标志位组合可能是隐蔽扫描;短时间一堆半连接可能是DoS;隐藏iframe后加载一堆可疑URL多半是挂马;靶机主动连接攻击机高端口很可能是反向shell。

后面我想继续加强加密协议和现代Web流量的分析能力。课程环境比较旧,协议内容直接可见;真实环境里HTTPS、HTTP/2、QUIC、代理、CDN都会让分析难度提高。

3.11 数据库

数据库部分主要在第10次SQL注入实验中体现。通过进入MySQL容器,执行show databasesshow tablesselect等命令。

SELECT注入影响身份认证,UPDATE注入影响数据修改。前者可以绕过登录,后者可以篡改工资等字段。实际系统中,注入还可能导致拖库、写WebShell、执行系统命令或横向移动,具体危害取决于数据库权限、数据库类型和应用部署方式。

防御数据库漏洞时,参数化查询是核心,但不是唯一措施。还需要关闭详细错误回显,避免攻击者通过报错推断表结构;限制数据库账号权限,避免Web账号拥有管理员权限;对敏感字段做加密或哈希存储;记录异常查询和登录行为;对管理界面做访问控制。SQL注入从表面看是Web代码问题,本质上也牵涉数据库权限设计和运维配置。

我目前对MySQL接触较多,对SQL Server、PostgreSQL、Oracle等数据库的安全特性了解不多。课程中Windows旧环境涉及一些RDS/ADC和数据库组件漏洞,但没有深入到数据库安全配置。后续如果继续学习Web安全,需要补更多数据库差异、ORM安全和权限设计。

3.12 法律

网络攻防技术必须有授权边界。Nmap扫描、Nessus漏扫、Metasploit漏洞利用、抓包、XSS、SQL注入、浏览器挂马、木马样本分析,如果放到未经授权的真实网络中,都可能造成法律风险。

要关注的法规包括《网络安全法》《数据安全法》《个人信息保护法》,以及关键信息基础设施保护、网络安全等级保护这些相关条例。对学生来说最基本的原则是——只在授权范围内测试,只用自己的环境或者课程靶机,不传播木马和攻击代码,不打真实系统,不泄露别人的数据。

学攻击技术的目的应该是理解风险、改进防护、提升取证能力。要去做渗透或者安全评估得有明确的授权书、测试范围、时间窗口、应急方案和报告流程等等材料。

3.13 基础

从408的脉络上来看,计算机网络方面学到了IP、端口、路由、ARP、ICMP、TCP、HTTP、DNS、SMB、IRC等协议为什么这样工作;操作系统方面学到了进程、权限、服务、注册表、文件系统、内存布局、ASLR、栈权限;计算机组成方面学到了寄存器、栈帧、call、ret、地址和字节序;数据结构方面学到了栈、队列、缓冲区和半连接队列等概念。

很多实验出问题时,其实不是只是工具不会用,而是基础概念没想清楚。比如VMnet1和VMnet8不通,需要理解路由;SYN Flood要理解半连接队列;pwn要理解栈和返回地址;SQL注入要理解数据库查询语法;XSS要理解浏览器如何解析HTML和JavaScript;网页木马要理解HTTP加载链和脚本执行环境。

基础还体现在排错能力上。遇到网络连接问题要区分是IP不通、端口没开、服务没启动、防火墙拦截、路由错误还是DNS问题。看到payload打不通要区分是漏洞不存在、目标版本不匹配、payload不兼容、回连被拦截还是靶机已经崩溃。安全实践里的很多判断,都建立在这些基础知识上。

总的来说,11次实践让我感觉网络安全是一种综合能力。协议、系统、编程、数据库、Web、二进制、恶意代码、取证、法律都得懂一点。后面我会重点补协议分析、逆向基础和Web代码审计。

5.课堂的收获与不足

通过本门课程的学习和11次实践,我感觉最大的收获主要体现在两个方面:一是入门了re和pwn;二是提升了排错和解决问题的能力。

先说入门逆向和PWN。以前我比较专注于web知识的了解,对IDA、gdb、汇编指令、栈帧结构、返回地址、小端序、shellcode等概念都比较陌生,很多课本上学到的知识只停留在理论层面。通过二进制漏洞利用与Shellcode注入实验,我第一次比较完整地经历了从分析程序结构、定位关键函数,到构造 payload、覆盖返回地址、调试栈空间并最终执行shellcode的过程。在过程中我逐渐理解了call、ret、EBP、ESP、EIP等概念在真实程序运行中的作用。虽然目前还只是入门水平,但这次实践让我对RE和PWN产生了更直观的认识。

第二点是排错和解决问题能力得到了明显提升。整个课程中遇到的问题非常多,例如虚拟机兼容性问题、网卡和路由配置问题、工具版本差异、漏洞模块无法复现、payload在gdb中成功但实际运行失败等。很多问题一开始并不能直接看出原因,只能通过观察现象、查资料、抓包、调试、对比环境和反复验证来逐步缩小范围。尤其是在第9次实践中,shellcode注入在gdb里可以成功,但脱离gdb后失败,最后意识到实验环境和真实运行环境之间存在细微差异,不能只依赖表面结果。后来通过attach到真实运行进程中查看栈地址,才最终解决问题。这个过程让我学会了遇到问题时不能急着套教程,而是要回到原理本身,分析问题出现在哪一层,再一步步验证。

不足也比较明显。一部分实验前期还是有跟着步骤做的成分,独立分析的主动性不够。比如某些漏洞模块为什么选这个target、payload内部到底怎么工作、Snort规则为啥这么写,我还没完全嚼透。再就是二进制安全虽然摸到了一些入门的东西,但能力还很弱,IDA主要会看字符串、流程图和简单伪代码,复杂控制流、反调试、壳、Windows API都还得继续补。

另外,课程实验环境以旧系统和明文协议居多,适合理解原理,但真实环境会更复杂。现代系统有ASLR、DEP、沙箱、EDR、WAF、HTTPS、CDN、云环境和容器编排,攻击和防御都比实验复杂得多。后面我想重点加强三方面:一是网络流量分析和日志关联,二是Web安全和代码审计,三是二进制逆向和漏洞利用基础。

总的来讲,网络安全不是一项单一技术,而是一种综合能力。无论Web、协议分析、恶意代码、取证还是RE和PWN,都离不开扎实的基础、清晰的分析思路和持续排错的耐心。虽然现在还有很多不足,但通过这些实践我已经迈出了入门的第一步,后续要努力的方向也更明确了。

6.参考文献

20253903 2025-2026-2《网络攻防实践》第1次作业

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

20253903 2025-2026-2《网络攻防实践》第3次作业

20253903 2025-2026-2《网络攻防实践》第4次作业

20253903 2025-2026-2《网络攻防实践》第5次作业

20253903 2025-2026-2《网络攻防实践》第6次作业

20253903 2025-2026-2《网络攻防实践》第7次作业

20253903 2025-2026-2《网络攻防实践》第8次作业

20253903 2025-2026-2《网络攻防实践》第9次作业

20253903 2025-2026-2《网络攻防实践》第10次作业

20253903 2025-2026-2《网络攻防实践》第11次作业

Nmap Reference Guide

Wireshark User's Guide

Snort Documentation

SEED Labs

posted @ 2026-06-17 15:56  nakaii  阅读(12)  评论(0)    收藏  举报