20232315 2025-2026-1 《网络与系统攻防技术》实验四实验报告
目录
一、实验基本信息
-
实验环境:Kali Linux虚拟机 + VMware Workstation;windows主机
-
实验工具:超级巡警、IDA Pro、PEiD、wireshark等
-
实验时间:2025.11.2
二、实验内容
-
恶意代码文件类型标识、脱壳与字符串提取
-
使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
-
分析一个自制恶意代码样本rada,并撰写报告,回答问题
-
取证分析实践:
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答问题
三、实验要求
- 根据实验内容运用相应工具,完成指定要求,回答问题
四、实验过程
4.1 恶意代码文件类型标识、脱壳与字符串提取
-
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
-
使用
file命令查看文件类型
显示结果说明这是一个32位的Windows PE可执行文件
-
运行PEiD,在windows主机中选择文件路径

PEiD的检测结果说明RaDa.exe是一个UPX加壳的Windows可执行文件,文件作者是Markus & Laszlo
-
-
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
-
使用超级巡警脱壳机载入样本,自动识别并脱壳

rada文件脱壳后生成RaDa_unpacked.exe,用于后续分析
-
-
(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
-
使用
strings命令提取字符串写入string.txtstrings -n 10 RaDa_unpacked.exe > strings.txt
-
在提取的字符串中查找作者

从找到的信息可以看到rada恶意代码的作者信息:
-
主要作者:Raul Siles(劳尔·西莱斯)
-
合作作者:David Perez(大卫·佩雷斯)
-
创建时间:2004年9月
-
-
4.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
-
先命令行测试运行crackme1.exe,分别输入0~5个参数

结果表明程序可能需要特定数量的参数和特定内容的参数
-
将crackme1.exe载入 IDA Pro,进行静态分析
-
查找字符串引用,搜索“I think you are missing something”、"Pardon? What did you say?",并定位字符串位置


可以看到:
-
'I think you are missing something.'- 参数数量错误 -
'I know the secret'- 成功消息 -
'Pardon? What did you say?'- 参数内容错误 -
'You know how to speak to programs, Mr. Reverse-Engineer'- 另一个成功消息
所有字符串都被
sub_401280函数引用 -
-
在Functions中找到
sub_401280函数并查看汇编代码,找到输入参数的验证逻辑

参数数量检查
.text:004012AA cmp [ebp+arg_0], 2 ; 检查argc == 2 .text:004012AE jz short loc_4012D2 ; 如果正确跳转下一步,否则显示 "I think you are missing something."第一个参数检查
.text:004012D2 loc_4012D2: .text:004012DB push offset aIKnowTheSecret ;压入硬编码字符串:"I know the secret" .text:004012E0 push dword ptr [eax] ; argv[1] - 第一个参数 .text:004012E2 call strcmp ; 与硬编码字符串比较 .text:004012EA test eax, eax .text:004012EC jz short loc_401310 ; 如果相等跳转到成功,否则显示 "Pardon? What did you say?"成功分支
.text:00401310 loc_401310: .text:00401313 push offset aYouKnowHowToSp ; "You know how to speak to programs, Mr. Reverse-Engineer" .text:00401318 call printf分析可知,输入参数数量为2,如果输入参数数量错误会显示"I think you are missing something.";输入参数数量正确内容错误会显示"Pardon? What did you say?";输入参数为"I know the secret"时可以得到正确信息"You know how to speak to programs, Mr. Reverse-Engineer"
-
-
验证输入

-
命令行测试运行crackme2.exe

根据crackme1.exe的分析结果可以看出crackme2.exe同样需要特定输入参数数量与内容,猜测正确参数数量为1
-
将crackme2.exe载入 IDA Pro,进行静态分析
-
查找字符串“'I have an identity problem.”,定位字符串位置


从字符串可以看出关键信息:
-
'crackmeplease.exe'- 程序名验证 -
'I have an identity problem.'- 程序名错误 -
'I know the secret'- 成功消息 -
'Pardon? What did you say?'- 参数错误 -
'I think you are missing something.'- 参数数量错误
crackme2.exe可能需要检查程序是否被重命名为 crackmeplease.exe,所有字符串都被
sub_401280函数引用 -
-
在Functions中找到
sub_401280函数并查看汇编代码,找到输入参数的验证逻辑
.text:004012AA cmp [ebp+arg_0], 2 ; 检查参数数量(argc)是否等于2 .text:004012AE jz short loc_4012D5 ; 如果argc==2,继续检查 .text:004012B0 sub esp, 8 ; 参数数量错误分支 .text:004012B3 push offset aIThinkYouAreMi ; I think you are missing something. ... ; 参数数量正确(包括程序名argc==2) .text:004012D5 loc_4012D5: .text:004012D5 mov eax, [ebp+arg_4] ; 获取argv数组 .text:004012D8 sub esp, 8 .text:004012DB push offset aCrackmeplease_ ;"crackmeplease.exe" ← 硬编码的程序名 .text:004012E0 push dword ptr [eax] ; argv[0] - 实际程序名 .text:004012E2 call strcmp ; 比较程序名 .text:004012E7 add esp, 10h .text:004012EA test eax, eax ; 测试比较结果 .text:004012EC jz short loc_401313 ; 如果程序名正确,继续检查参数 .text:004012EE sub esp, 8 ; 程序名错误分支 .text:004012F1 push offset aIHaveAnIdentit ; 显示错误信息"I have an identity problem." ... ; 程序名正确 .text:00401313 loc_401313: .text:00401313 mov eax, [ebp+arg_4] ; 获取argv数组 .text:00401316 add eax, 4 ; argv[1]地址 .text:00401319 sub esp, 8 .text:0040131C push offset aIKnowTheSecret ; "I know the secret" ← 硬编码参数 .text:00401321 push dword ptr [eax] ; argv[1] - 用户输入参数 .text:00401323 call strcmp ; 比较参数内容 .text:00401328 add esp, 10h .text:004012B test eax, eax ; 测试比较结果 .text:004012D jz short loc_401351 ; 如果参数正确,跳转到成功 .text:004012F sub esp, 8 ; 参数错误分支 .text:00401332 pushoffset aPardon?WhatDid ; 输出参数错误信息Pardon?What did you say?可以看到,验证逻辑是首先验证参数数量是否为2(参数数量包含程序名,所以输入参数数量应该为1),错误则输出"I think you are missing something.",正确则继续验证程序名;验证程序名是否为"crackmeplease.exe",不是则输出"I have an identity problem.",是则继续验证输入参数;验证输入参数是否为"I know the secret",不是则输出"Pardon? What did you say?",是则跳转成功。
-
-
将crackme2.exe程序名改为crackmeplease.exe,在验证输入参数"I know the secret"

4.3 分析一个自制恶意代码样本rada,并撰写报告,回答以下问题
-
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
-
在kali虚拟机中输入以下命令,查看RaDa文件的信息
file RaDa.exe #基础文件类型识别 md5sum RaDa.exe #提取文件哈希值 ls -la RaDa.exe #查看文件大小 exiftool RaDa.exe | grep "Time Stamp" #检查编译时间戳
RaDa.exe文件是专为MS Windows 4.00平台设计的PE32可执行文件,属于GUI图形界面程序(非控制台程序),处理器架构为Intel i386(32位架构),文件大小月20.5KB;系统记录的最后修改时间为2008年12月22日,实际编译时间为2004年10月29日 19:59:58(UTC-4时区,美国东部时间);文件MD5哈希校验值为
caaa6985a43225a0b3add54f44a0d4c7,这是该样本的唯一MD5标识,可用于特征码检测。
-
-
(2)找出并解释这个二进制文件的目的
-
使用IDA Pro静态分析脱壳后的RaDa.exe文件,加载完毕后Ctrl + E找到程序入口点start,查看相关起始代码,分析程序的工作模式和数据结构

-
C&C服务器地址发现
JDR0:004023A4 aHttp10_10_10_1: JDR0:004023A4 unicode 0, <http://10.10.10.10/RaDa>,0C&C服务器:攻击者控制的中央服务器,用于向受感染的计算机发送命令、接收从受害计算机窃取的数据、协调大规模网络攻击等。可以看出RaDa程序会在运行后让被害主机通过http服务连接上地址为
http://10.10.10.10/RaDa的C&C服务器。 -
命令控制文件
JDR0:004023D8 aRada_commands_: JDR0:004023D8 unicode 0, <RaDa_commands.html>,0 ; 命令获取文件


-
文件传输、工作目录、注册表、DDoS攻击相关
JDR0:00402418 aDownload_cgi: JDR0:00402418 unicode 0, <download.cgi>,0 ; 文件下载CGI脚本 JDR0:00402438 aUpload_cgi: JDR0:00402438 unicode 0, <upload.cgi>,0 ; 文件上传CGI脚本 JDR0:00402454 aCRadaTmp: JDR0:00402454 unicode 0, <C:\RaDa\tmp>,0 ; 临时文件目录 JDR0:00402518 aCRadaBin: JDR0:00402518 unicode 0, <C:\RaDa\bin>,0 ; 二进制文件目录 JDR0:00402488 aHklmSoftwareMi: JDR0:00402488 unicode 0, <HKLM\Software\Microsoft\Windows\CurrentVersion\Run\>,0 ; 自启动注册表路径 JDR0:004024F4 aRada: JDR0:004024F4 unicode 0, <RaDa>,0 ; 注册表值名称 ... JDR0:004025B8 aStartingDdosSm: JDR0:004025B8 unicode 0, <Starting DDoS Smurf remote attack...>,0 ; DDoS攻击启动消息可以看出RaDa恶意软件在用户执行后会在系统中创建工作目录
C:\RaDa\bin\用于存放恶意程序本体;C:\RaDa\tmp\用于临时文件和窃取数据,利用HKLM\Software\Microsoft\Windows\CurrentVersion\Run实现注册表自启动,每次系统启动时自动运行,推测这一阶段在后台静默执行,无用户界面或伪装界面,避免引起用户怀疑。然后会发送HTTP请求,访问http://10.10.10.10/RaDa/RaDa_commands.html获取攻击指令列表,然后可以实现文件窃取、恶意文件下载、DDoS攻击以及远程控制shell并返回执行结果给C&C服务器等攻击。
-
-
总结:RaDa是一个可以实现远程控制的后门程序,可以获取目标主机的shell,进行文件窃取等攻击。
-
-
(3)识别并说明这个二进制文件所具有的不同特性
原二进制文件RaDa.exe是一个进行了UPX加壳的Visual Basic 6.0编译程序,它的特性包括:
-
网络通信特性
-
使用标准HTTP协议与C&C服务器通信,用HTTP协议混入正常网络流量,避免协议异常检测
-
通过HTML文件隐藏命令,避免直接的命令传输
-
有数据上传和文件下载接口,具有完整的双向文件传输能力,支持数据窃取和恶意软件更新
-
-
持久化与功能特性
-
通过注册表实现系统启动时自动运行,确保长期驻留
-
创建专用目录结构组织恶意活动,避免使用系统临时目录引起怀疑
-
具备网络层攻击能力,可参与僵尸网络协同攻击(DDoS攻击能力)
-
通过C&C服务器接收并执行任意系统命令,提供完整的远程控制
-
-
-
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
-
UPX加壳保护
超级巡警识别结果显示原始文件被UPX加壳保护:
-
使用UPX 0.89.6-1.02/1.05-2.90版本加壳
-
文件从约200KB压缩到20KB,增加静态分析难度
-
入口点代码被压缩,直接反汇编只能看到解压代码
-
-
编程语言选择Visual Basic 6.0编译,VB编译的代码逻辑不如C++直观,使用VB运行时库,增加逆向难度。
-
程序使用系统正常的自启动位置,合法化注册表位置,使用操作系统标准的自启动机制,不创建可疑的注册表项,与合法软件行为相似,不易被察觉。
-
-
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
我认为RaDa.exe程序属于后门木马程序,该程序不具有复制能力,需要用户主动执行 RaDa.exe,一般会伪装成正常程序(VB GUI程序),不显示明显的恶意行为界面,符合特洛伊木马"伪装善意,实则恶意"的核心特征;该程序提供完整的远程系统访问和控制能力,并有持久性隐蔽的特定,符合后门定义。
-
(6)给出过去已有的具有相似功能的其他工具
-
Sub7(1999年),RaDa同时代最著名的RAT,功能架构高度相似
- 都具有C&C通信、远程控制、文件管理、注册表自启动功能
-
BlackShades(2010年),同样支持C&C通信、远程控制,持久化隐蔽等功能
-
-
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下
可以,使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是Raul Siles(劳尔·西莱斯)和David Perez(大卫·佩雷斯),创建时间是2004年9月。这需要将原加壳文件脱壳后使用字符串提取工具提取恶意代码中的字符串,根据某些特定字符一般可以定位到代码作者信息。
-
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
-
基于特征码的检测方法:基于恶意软件二进制文件中独特的、不变的代码模式进行识别。
-
可以分析RaDa二进制文件中出现的独特字符串组合,比如"RaDa"、"Command_conf"、"Command_go"、"http://10.10.10.10/RaDa"等,这些字符串在正常软件中极不可能同时出现
-
提取二进制文件中特定的字节序列模式,包括VB6运行时库调用模式、特定的API调用序列文件结构特征等
-
计算文件的MD5、SHA1、SHA256哈希值,与已知的RaDa样本哈希值进行精确匹配
-
-
行为检测方法:不关注文件本身内容,而是监控其运行时的行为模式,类似于通过行为特征识别
-
文件系统行为监控,监控特定目录创建,比如C:\RaDa\bin、C:\RaDa\tmp;检测文件操作模式(程序会创建RaDa.exe在特定路径),观察文件访问序列(先创建目录,再复制文件,最后设置自启动)
-
分析进程行为:监控进程创建和终止模式,分析进程间的通信行为,检测进程是否有隐藏或注入行为
-
识别RaDa特有的行为链条:创建工作目录 → 复制可执行文件 → 注册表自启动 → 网络连接
-
-
网络流量检测方法: 通过分析网络通信模式来识别恶意软件活动,监控HTTP协议中的特定URL模式,检测是否有
/RaDa/RaDa_commands.html的请求,识别upload.cgi和download.cgi的文件传输;分析通信行为模式是否存在每分钟检查新命令、小数据量交换、始终连接相同C&C服务器等行为;也可以对流量内容进行检测,识别是否有特定的命令格式和参数。 -
沙箱动态分析检测方法: 在隔离环境中实际运行可疑文件,观察其真实行为。创建虚拟的完整操作系统环境,网络隔离但允许模拟互联网访问,采用文件系统快照和还原机制对程序运行时的行为进行全面的行为监控,记录所有系统活动的精确时间戳,建立因果关系链,识别攻击活动的各个阶段,最后形成详细的行为报告。
-
注册表行为检测方法:过监控系统配置变更来检测持久化机制,从而检测恶意文件。监控注册表自启动键是否有修改,识别特定的值名称模式(如"RaDa"),检测可疑的文件路径模式,分析注册表值的创建时间序列;监控低权限进程修改高权限注册表项,检测异常的注册表访问模式,分析注册表隐藏或锁定行为。通过这些可以检测出对系统注册表进行了操作的恶意文件。
-
4.4 取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
-
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?
- IRC是什么?
-
IRC 是 Internet Relay Chat 的缩写,即互联网中继聊天。它是一种应用于互联网的实时文本通信协议,它的工作模式主要是基于客户端-服务器-网络的架构
-
服务器:多个服务器相互连接,形成一个庞大的 IRC 网络
-
频道:聊天发生在不同的“频道”中,频道名称以
#符号开头 -
客户端:用户使用 IRC 客户端软件连接到网络中的一个服务器,然后可以加入一个或多个频道进行群聊,或者与其他用户进行私密对话
-
- 当IRC客户端申请加入一个IRC网络时将发送哪个消息?
-
当一个IRC客户端成功连接到IRC服务器后,为了开始通信,它需要先完成注册和加入频道的过程,发送的消息取决于具体要完成的操作:
-
用户注册:当客户端与服务器建立TCP连接后,它需要告诉服务器自己的身份信息。这通过一系列消息完成
-
PASS <password>: 如果需要密码认证 -
NICK <昵称>: 设置用户在IRC网络中的昵称 -
USER <用户名> <模式> <未使用> <真实姓名>: 设置用户信息
-
-
加入频道:在注册成功后,客户端要加入一个特定的聊天频道,会发送:
JOIN <频道名称>,这是客户端申请加入一个特定频道时发送的核心消息
-
- IRC一般使用哪些TCP端口?
-
IRC 服务器通常监听以下几个常见的 TCP 端口
-
6667:这是 IRC 协议的传统默认端口,也是最常见的一个 -
6660-6669:这是一系列常用的 IRC 端口,许多服务器也会配置监听这些端口中的一个或多个,以容纳更多连接或规避简单的端口封锁 -
6697:这是用于IRC over SSL/TLS的标准端口。与传统的纯文本通信不同,使用此端口的连接是加密的,提供了更好的通信安全性和隐私性。现代IRC网络和僵尸网络为了隐蔽性,也常使用此端口 -
7000:有时也用于 SSL/TLS 连接
-
-
(2)僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是什么?
- 僵尸网络是由“僵尸”这个词演变而来的,这是一个非常形象的概念。僵尸网络是一个由互联网上的大量计算机(包括个人电脑、服务器、物联网设备等)组成的网络,这些计算机在用户不知情或未授权的情况下,被一种称为“僵尸程序”的恶意软件所感染和控制
- 僵尸网络通常用于什么?
-
僵尸网络本质上是一个强大的、可租赁的网络犯罪基础设施。其拥有者可以利用它进行多种非法活动,甚至将其作为一项服务出售给其他犯罪分子(即“僵尸网络即服务”)。僵尸网络的主要用途按照攻击目标可以分为:
-
以“破坏和扰乱”为主要目的
-
分布式拒绝服务攻击
-
发送垃圾邮件和钓鱼邮件
-
-
以“牟取经济利益”为主要目的
-
点击欺诈:为发布广告的网站伪造流量,从而骗取广告费用
-
加密货币挖矿:为控制者产生直接的金钱收益,而成本则由受害者承担
-
勒索和勒索软件分发
-
-
以“窃取和信息收集”为主要目的
-
窃取敏感信息:僵尸程序本身可能就是一个信息窃取器,它可以记录用户的键盘输入(键盘记录器)、盗取浏览器中保存的密码、信用卡信息、加密货币钱包文件以及任何有价值的文档
-
凭证填充和撞库攻击:利用从其他渠道窃取来的用户名和密码组合,指挥僵尸机器在各个网站(如银行、社交网络)上进行自动登录尝试,以验证这些凭证是否有效
-
-
以“维持和扩张”为主要目的**
-
分发其他恶意软件:僵尸网络作为一个成熟的传播渠道,可以用来下载和安装其他类型的恶意软件,比如间谍软件、广告软件、后门程序等
-
自我更新和防御:僵尸牧人可以通过C&C服务器随时更新僵尸程序的版本,以修复漏洞、增加新功能或逃避安全软件的检测
-
-
-
(3)蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
-
在Wireshark中打开提供的
botnet_pcap_file.dat文件,在过滤器中输入ip.src == 172.16.134.191 && tcp.port == 6667查看源IP地址是蜜罐主机(172.16.134.191),端口为6667(IRC服务器通常监听6667端口)的数据包,找出所有由蜜罐主机发起的、与IRC服务(端口6667)相关的通信
由结果可知,蜜罐主机与如下IRC服务器进行了通信:
-
209.126.161.29
-
66.33.65.58
-
63.241.174.144
-
217.199.175.10
-
209.186.44.172
-
-
-
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
-
在kali中下载
tcpflow,tcpflow 能够重组TCP流,并基于流量内容进行分析,特别适合处理协议明文通信(如IRC)sudo apt update sudo apt install tcpflow
-
使用 tcpflow 处理botnet_pcap_file.dat文件
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"-
-r botnet_pcap_file.dat:从指定的文件中读取数据 -
"host 209.196.44.172 and port 6667":BPF过滤器,只处理与主机 209.196.44.172 在端口 6667 上的通信 -
tcpflow 会自动执行重组,将每个TCP连接的数据保存到单独的文件中

运行命令后,tcpflow 会在当前目录生成一系列文件

-
-
文件名格式为AAA.BBB.CCC.DDD.NNNN-XXX.YYY.ZZZ.WWW.MMMM
-
前半部分AAA.BBB.CCC.DDD.NNNN表示客户端(源IP.源端口)
-
后半部分XXX.YYY.ZZZ.WWW.MMMM表示服务器(目的IP.目的端口)
-
我们要找的是所有连接到服务器的客户端,因此我们关注文件名以服务器IP:209.196.44.172结尾的文件
-
-
在kali中输入命令:
cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l-
cat 209.196.044.172.06667-172.016.134.191.01152:读取tcpflow生成的通信文件 -
grep -a "^:irc5.aol.com 353":筛选出IRC的"NAMES"响应行 -
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g":清理NAMES响应行,只提取出用户列表部分 -
tr ' ' '\n':将空格替换为换行符,让每个用户名单独成行 -
tr -d "\15":删除回车字符(\r,ASCII码为15) -
grep -v "^$":过滤掉空行 -
sort -u:对用户名排序并去重 -
wc -l:统计行数,即唯一的僵尸客户端数量
-

得到结果:共有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络
-
-
(5)哪些IP地址被用于攻击蜜罐主机?
这个问题的目标是找出所有向蜜罐主机172.16.134.191发起恶意连接的源IP地址。分析的核心思路是:在流量中寻找针对蜜罐的、非正常的、具有攻击特征的连接尝试
-
在kali中执行以下命令,从botnet_pcap_file.dat文件中提取攻击蜜罐的IP列表:
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20232315.txt;wc -l 20232315.txt-
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191'-
-n:不将IP地址解析为主机名 -
-nn:不解析端口号为服务名称 -
-r botnet_pcap_file.dat:从指定文件读取数据包 -
'dst host 172.16.134.191':BPF过滤器,只显示目的地是蜜罐IP的数据包
-
-
awk -F " " '{print $3}'-
-F " ":使用空格作为字段分隔符 -
{print $3}:打印第三个字段
-
-
cut -d '.' -f 1-4-
-d '.':使用点号作为分隔符 -
-f 1-4:提取第1到第4个字段(即IP地址部分)
-
-
sort | uniq-
sort:对IP地址进行排序 -
uniq:去除重复的IP地址
-
-
more > 20232315.txt-
more:分页显示( -
> 20232315.txt:将结果保存到文件
-
-
wc -l 20232315.txt:统计文件行数
-

共有165个IP地址被用于攻击蜜罐主机




-
-
(6)攻击者尝试攻击了那些安全漏洞?
-
从抓包结果可以看到发往蜜罐主机的流量主要使用了TCP、UDP两种协议,可以通过查看这两种协议分别使用了那些端口,分析针对特定端口的攻击
-
在kali中输入以下命令,查看tcp使用了哪些端口
tcpdump -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191 and tcp' 2>/dev/null | awk '{print $5}' | awk -F "." '{print $NF}' | sort | uniq -c | sort -nr-
tcpdump -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191 and tcp' 2>/dev/null-
-nn:不解析主机名和端口服务名 -
-r botnet_pcap_file.dat:从文件读取数据包 -
'dst host 172.16.134.191 and tcp':BPF过滤器,只显示目的地是蜜罐的TCP包,统计目标端口号 -
2>/dev/null:将错误信息重定向到空设备,保持输出清洁
-
-
awk '{print $5}':提取每行的第五个字段(默认以空格分隔) -
awk -F "." '{print $NF}'-
-F ".":使用点号作为字段分隔符 -
{print $NF}:打印最后一个字段(NF = Number of Fields)
-
-
sort | uniq -c | sort -nr-
sort:对端口号进行排序(为uniq做准备) -
uniq -c:统计每个端口出现的次数 -
sort -nr:按计数数字逆序排序(出现次数最多的排在最前)
-

-
高频连接端口:1152 (9798次)、1061 (8906次)、1077 (1020次) 和 4899 (490次),这些都是非常规但高频连接的端口,很可能是恶意软件建立的反向Shell连接或后门服务端口。攻击成功后,恶意程序会在这些端口上监听或主动外连。
-
关键服务攻击端口
-
80/tcp (4488次):HTTP Web服务攻击,可能是针对IIS的漏洞利用,是Web应用程序的相关攻击
-
445/tcp (2547次):SMB服务攻击,可能利用MS04-011(LSASS)、MS03-026(RPC DCOM)等漏洞,属于SMB暴力破解尝试
-
139/tcp (294次):NetBIOS会话服务,是SMB相关攻击的辅助端口
-
21/tcp (15次):FTP服务,可能进行暴力破解或FTP漏洞利用
-
135/tcp (仅4次):RPC端点映射器,虽然次数少,但可能是精准的RPC漏洞利用
-
1433/tcp (23次):Microsoft SQL Server,可能进行数据库暴力破解或漏洞利用
-
-
端口扫描:从端口 1-1139 的广泛分布可以看出,攻击者进行了全面的端口扫描,试图发现所有开放的服务
-
-
在kali中输入以下命令,查看UDP协议使用了哪些端口
tcpdump -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191 and udp' 2>/dev/null | awk '{print $5}' | awk -F "." '{print $NF}' | sort | uniq -c | sort -nr'dst host 172.16.134.191 and udp':BPF过滤器,只显示目的地是蜜罐的UDP包,统计目标端口号

-
137/udp (65次): NetBIOS名称服务,可能用于网络探测和主机信息枚举,攻击者发送NBNS查询来获取蜜罐的主机名、域信息、共享资源列表,这是典型的内部网络侦察手段,用于绘制网络地图,在Windows 2000环境中特别有效
-
1434/udp(55次):SQL Server Resolution Protocol服务,可能进行SQL Slammer蠕虫攻击 或 SQL服务探测,这是著名的SQL Slammer蠕虫 (MS02-039) 利用的端口,攻击者发送特制的UDP包到1434端口,触发缓冲区溢出,由于是UDP协议,攻击可以非常快速地进行;也可能是简单的SQL服务发现探测
-
-
(7)那些攻击成功了?是如何成功的?
-
成功的有:
-
1152/tcp端口:攻击者通过IRC协议远程连接操控被感染主机
-
1061端口:通过 HTTP 协议从远程服务器获取恶意载荷
-
端口1077/tcp:通过目标主机获取远程Web站点的目录、页面和资源文件信息,达成 “信息收集” 的攻击目的,是Web渗透测试的前置步骤
-
端口4899/tcp:远程控制软件漏洞利用
-
端口80/tcp:MS01-033 (IIS .IDA/IDQ缓冲区溢出)漏洞或相关IIS漏洞利用
-
端口445/tcp:基于SMB协议的SAMR枚举攻击
-
端口137/tcp:NetBIOS名称枚举攻击(NBSTAT扫描)
-
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==1152,分析1152/tcp相关攻击是否成功
可以看到完整的三次握手连接,蜜罐主机(172.16.134.191)与IRC服务器(209.196.44.172)的6667端口完成三次握手,建立TCP连接;蜜罐主机发送NICK(设置昵称)、USER(用户信息)等请求,IRC服务器返回大量响应,并成功完成JOIN(加入频道)、WHO(查询用户)等操作;双方通过IRC协议持续交互,服务器发送多条响应包,被感染主机也确认接收,由此可见攻击者通过 IRC 协议远程操控被感染主机,攻击成功
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==1061,分析1061/tcp相关攻击是否成功
可以看到完整的三次握手连接,并且蜜罐(172.16.134.191)从端口1061主动连接至 207.172.16.150:80,发起HTTP GET请求下载名为"取证采集工具"的ZIP文件,但很可能是伪装成取证工具的恶意软件,攻击者达成 “投递恶意载荷” 的目的
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==1077,分析1077/tcp相关攻击是否成功
同样可以看到完整的三次握手连接,蜜罐(172.16.134.191) 从端口1077主动连接至 217.151.192.231:80,下载了HTML页面和图片文件,可以推测受控的蜜罐正在执行攻击者指令,进行网络侦察或内容获取
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==4899,分析4899/tcp相关攻击是否成功
抓包结果中有完整的三次握手连接,证明连接成功建立,且后续有大量PSH-ACK包传输,证明4899端口进行的是后门通信,其上进行的攻击是远程控制后门攻击,并且成功
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==80,分析80/tcp相关攻击是否成功
有完整的三次握手连接,后续传输中可以看到攻击者向目标主机发送了超长的C字符序列,这极有可能是利用MS01-033 (IIS .IDA/IDQ缓冲区溢出)漏洞或或相关IIS漏洞,通过超长参数触发栈溢出,目标是获得远程代码执行权限,虽然抓到的包中也有正常通信的,但该攻击成功的可能性极大
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==445,分析445/tcp相关攻击是否成功
从图中可以看到,成功建立了445端口的TCP连接,完成了SMB协议协商(Negotiate Protocol)和会话建立(Session Setup AndX),其中涉及 NTLM 认证,虽用户字段为空,但协议交互未中断)
数据包293-296是尝试连接\\172.16.134.191\IPC$(IPC$ 是 Windows 远程命名管道,常用于远程管理),并创建对\samr的访问句柄,均获得响应;数据包297-300是尝试绑定SAMR V1.0协议,最终成功;数据包313-323是执行一系列SAMR操作,包括Connect4(建立SAMR连接)、OpenDomain(打开域)、EnumDomains(枚举域)、LookupDomain(查询域)、EnumDomainUsers(枚举域用户)等请求,且均收到对应响应。
由此可见,利用 445 端口的基于SMB协议的SAMR枚举攻击是成功的 -
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==139,分析139/tcp相关攻击是否成功
从图中可以看到,虽然成功建立了139端口的 TCP连接与NetBIOS会话,但发起 “Tree Connect AndX Request” 尝试连接
\\PC0191\C$共享后,目标主机会立即回复TCP RST包,中断连接,拒绝共享访问,说明攻击失败 -
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==21,分析21/tcp相关攻击是否成功
从图中可以看到,没有成功建立的TCP连接,说明攻击失败
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==135,分析135/tcp相关攻击是否成功
从图中可以看到,有成功建立的135端口上的TCP连接,但攻击者者随后发送FIN-ACK包主动断开连接,说明攻击者只确认了135端口可达,并未利用它进行攻击。
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and tcp.port==1433,分析1433/tcp相关攻击是否成功
没有成功建立的TCP连接,说明攻击失败
-
在wireshark过滤器中输入
ip.addr==172.16.134.191 and udp.port==137,分析137/udp相关攻击是否成功

观察到多组IP向目标(172.16.134.191)的137端口发送
Name query NBSTAT *请求,尝试枚举目标的NetBIOS信息,目标主机返回Name query response NBSTAT,其中包含自身的NetBIOS名称、工作组等信息,响应长度 325 或 343 字节,表明信息已被成功获取。
该攻击是NetBIOS名称枚举攻击(NBSTAT扫描),攻击者通过 137 端口的NBSTAT查询,从目标主机获取了NetBIOS名称、工作组等敏感信息,攻击成功 -
在wireshark过滤器中输入
ip.addr==172.16.134.191 and udp.port==1434,分析1434/udp相关攻击是否成功
1434 端口是Microsoft SQL ServerUDP监听端口,用于SQL Server的浏览服务(SQL Browser)
攻击者让多个源IP向目标(172.16.134.191)的1434端口发送大量UDP请求(源端口随机,长度多为 376 字节),尝试触发SQL Browser的响应,以枚举SQL Server实例、版本等信息,但从抓包结果看,目标未返回任何响应,说明目标可能未开启SQL Browser服务,或对该端口的请求进行了拦截,攻击失败
-
五、问题及解决方案
问题:最开始使用IDA Pro分析文件时,无法打开文件的函数调用图,无法使用函数调用图进行分析
解决:放弃使用函数调用图,采用其他方法找到程序的关键函数,查看并分析函数的汇编代码
六、实验感想
完成这次恶意代码分析实验,我对恶意代码、恶意程序的攻击原理、攻击方式共计流程的了解更进一步,也对如何检测恶意代码,进行防御有了更深入的理解与体悟。
面对rada恶意代码和crackme程序,我初次尝试使用一些恶意代码分析处理工具,使用这些工具进行文件识别、脱壳、字符串提取。用IDA Pro进行静态分析,这个过程锻炼了我的耐心与细致,需要对恶意代码的一般特性具有较高的理解和掌握。
在最后的一部分里,我按照要求通过系统性地应用过滤器和统计工具,让混乱的数据流逐渐显现出清晰的攻击图谱,从攻击结果分析攻击者的攻击方式有哪些,这让我看到了恶意代码等的分析方法的多样性。
本次实验不仅极大地提升了我的实战技能,更让我明白了防御的真正内涵,安全的底线取决于整个链条中最薄弱的一环。未来,我将带着这种系统性的视角,在每一个技术细节上精益求精,为构筑更安全的网络空间贡献力量。
浙公网安备 33010602011771号