20232402 2025-2026-1 《网络与系统攻防技术》实验四实验报告

20232402 2025-2026-1 《网络与系统攻防技术》实验四实验报告

1.实验内容

1.1 恶意代码基础分析

(1)文件识别:使用文件类型识别工具(如file、PEiD)分析rada样本,确定其格式(如PE格式)、运行平台(如Windows)及加壳工具(如UPX)。
(2)脱壳处理:通过超级巡警巡警脱壳机对rada样本脱壳,还原原始代码。
(3)字符串提取:用strings工具提取脱壳后样本的字符串,查找可能标识作者的信息(如姓名、邮箱)。

1.2 逆向分析与破解

使用IDA Pro对crackme1.exe和crackme2.exe进行静态/动态分析,定位验证逻辑(如密码校验函数),找到使程序输出“成功”信息的特定输入(如密钥、字符串)。

1.3 恶意代码深度分析(以rada样本为例)

(1)提取基本信息(如MD5哈希、文件大小)用于样本标识;
(2)分析功能目的(如远程控制、持久化);
(3)识别特性(如自复制、注册表操作);
(4)检测反分析技术(如加壳、反调试);
(5)分类;
(6)对比相似工具;
(7) 探讨作者溯源可能性;
(8)提出检测方法。

1.4 僵尸网络取证分析

基于Snort捕获的蜜罐流量(172.16.134.191):
(1)解析IRC协议细节(JOIN命令、端口6667等);
(2)分析僵尸网络定义及用途;
(3)定位蜜罐通信的IRC服务器IP;
(4)统计访问特定僵尸网络服务器(209.196.44.172)的主机数量;
(5)提取攻击蜜罐的IP地址;
(6)识别攻击者尝试的漏洞(如SMB、Web服务漏洞);
(7)判定成功攻击(445/4899/80端口)及原因(漏洞利用、权限获取)。

2.实验过程

2.1 恶意代码文件类型标识、脱壳与字符串提取

2.1.1 文件类型、运行平台与加壳工具识别

(1)在Kali虚拟机中分析样本基础信息
启动Kali虚拟机,将rada样本复制到Kali系统。执行file RaDa.exe
image
file命令会读取文件的头部信息(如PE文件的MZ标记、节表结构)和特征字段,从而判断文件格式(此处为PE32)、运行平台(MS Windows)、架构(Intel 80386即x86)以及程序类型(GUI表示带图形界面)。这些信息是后续选择分析工具(如32位IDA Pro)的基础,避免因工具与样本位数不匹配导致分析失败。

(2)加壳工具检测(PeID)
在Windows主机中双击打开PEiD,点击菜单栏“File”→“Open”,在文件选择窗口中找到RaDa.exe并打开。观察PEiD主界面中间“Packer”栏的显示内容。
image
PEiD的核心是通过内置的签名库与样本中的壳特征码匹配。恶意代码常用加壳(如UPX)压缩或加密原始代码,目的是隐藏逻辑、对抗静态分析。这里显示“UPX 0.89.6 - 1.02 / 1.05 - 2.22 -> Markus & Laszlo”,说明样本被UPX加壳,便于后续针对性脱壳。

2.1.2 Rada恶意代码样本脱壳处理(使用超级巡警脱壳机)

启动PEID,点击“文件”→“打开”,选择Rada样本。
image

加壳后的样本中,原始代码被壳代码包裹,直接分析会显示乱码或无效信息。脱壳的目的是移除壳代码,还原原始程序的PE结构和代码逻辑,确保后续字符串提取和反汇编的准确性。超级巡警脱壳机针对常见壳(如UPX)有较高的脱壳成功率,修复PE结构可避免脱壳后文件无法被IDA Pro识别。
image
看到输出地址啦~脱壳成功!(因为我的系统切成UTF-8了,这里的中文会显示乱码,不过不影响脱壳。)

2.1.3 脱壳后样本字符串提取与作者信息分析

启动IDA Pro(选择32位版本,因样本为32位),点击“New”→“PE Executable”,即对Windows下的可执行文件进行分析。
image

在文件选择窗口中选中RaDa_unpacked.exe,保持默认加载选项(如基地址0x00400000),点击“OK”,等待IDA完成反汇编(底部状态栏显示“Analysis finished”)。
选择IDA ViewA,在地址为00403F7A处可以看到RaDa文件的作者信息,为Raul Siles && David Perez。
image

在地址为00403FD4处可以看到RaDa文件的创作时间,为2004年9月。
image

2.2 IDA Pro分析crackme1.exe与crackme2.exe

2.2.1 分析crackme1.exe:

(1)初步运行测试:
在Windows主机中打开cmd,切换到crackme1.exe所在目录,直接输入.\crackme1.exe(无参数),.\crackme1.exe a(1个参数),.\crackme1.exe a b(2个参数),.\crackme1.exe a b c(3个参数),并观察输出。
image
通过多组测试可知,程序的参数校验逻辑是 “仅当参数数量为 1 时,才会进入下一层校验(但此时参数错误,导致提示‘Pardon? What did you say?’);当参数数量≠1 时(0 个、2 个、3 个及更多),直接提示‘I think you are missing something.’”。说明程序的核心逻辑是要求 1 个参数,但该参数需满足特定条件(如内容、格式等),而非参数数量的校验。

(2)IDA Pro静态分析:
用IDA Pro加载crackme1.exe,反汇编完成后,点击菜单栏“View”→“Graphs”→“Function calls”打开函数调用图。在图中找到调用strcmp(字符串比较)、printf(输出函数)的函数(sub_401280),双击该函数进入反汇编视图,再右键函数名选择“Graph view”查看流程图。
因为函数调用图展示程序中所有函数的调用关系,strcmpprintf是关键函数(分别负责比较输入与正确值、输出结果),因此其所在的函数(sub_401280)很可能是核心校验逻辑。
image

“Windows”→“Functions”,打开函数管理工具。
image

双击sub_401280函数打开其流程图。
image

流程图能直观呈现条件判断(如cmpjnz指令),分析可知:当参数数量为1且第参数等于“I know the secret”时,程序执行成功输出。
image

(3)验证成功输入:
在cmd中输入.\crackme1.exe any_arg "I know the secret"(参数为分析得到的字符串),观察输出。
image
验证是为了确认逆向分析的正确性,发现找到的输入能触发程序的成功提示(此处输出“You know how to speak to programs, Mr. Reverse-Engineer”)。

2.2.2 分析crackme2.exe:

(1)初步运行测试:
在cmd中直接输入.\crackme2.exe(无参数),.\crackme2.exe a(1个参数),.\crackme2.exe a b(2个参数),.\crackme2.exe a b c(3个参数),并观察输出。
image
通过多组测试可知,程序的参数校验逻辑是 “仅当参数数量为 1 时,才会进入下一层校验(但此时参数错误,导致提示‘Pardon? What did you say?’);当参数数量≠1 时(0 个、2 个、3 个及更多),直接提示‘I think you are missing something.’”。说明程序的核心逻辑是要求 1 个参数,但该参数需满足特定条件(如内容、格式等),而非参数数量的校验,需要进一步分析。

(2)IDA Pro静态分析:
用IDA Pro加载crackme2.exe,打开函数调用图,定位到调用strcmp和输出函数的核心函数sub_401280
image

查看其流程图。重点关注参数校验逻辑,除参数外,是否有对文件名的判断(如比较argv[0]与“crackmeplease.exe”)。部分程序会校验自身文件名(argv[0]为程序名),若不匹配则拒绝执行成功逻辑。
image
image
分析发现,crackme2要求文件名必须为“crackmeplease.exe”。

(3)验证成功输入
将crackme2.exe重命名为“crackmeplease.exe”
image

打开CMD(而非PowerShell,避免./前缀影响文件名识别),切换到对应目录,输入crackmeplease.exe "I know the secret",观察输出。CMD中直接输入文件名时,argv[0]会被解析为“crackmeplease.exe”,满足文件名校验条件,因此能触发成功提示。
image

2.3 自制rada恶意代码样本分析

2.3.1 二进制文件摘要(含唯一识别信息)

(1)基础属性获取
在Kali终端中,执行file RaDa.exe,记录输出结果(如“PE32 executable (GUI) Intel 80386, for MS Windows”),明确文件格式(32位PE)、运行平台(Windows)、架构(x86)。 (2.1.1已获取过)
image

右键文件查看属性,记录文件大小、创建/修改时间。
image

(2)唯一标识计算
执行md5sum RaDa.exe获取MD5哈希,执行sha1sum RaDa.exe获取SHA1哈希,作为样本的唯一数字指纹。
image

执行exiftool RaDa.exe | grep "Linker Version",记录编译器版本(如“Microsoft Visual C++ 6.0”),辅助溯源。
image

这些信息共同构成样本的“身份标签”,MD5/SHA1哈希可用于威胁情报库匹配(判断是否为已知样本),文件格式和平台信息决定分析工具的选择,时间戳可推测样本的开发阶段。

2.3.2 文件目的分析

(1)静态导入函数分析
IDA Pro初步筛选核心函数,核心功能函数通常满足两个特征——调用大量子函数(功能复杂)和引用关键字符串(如C2地址、注册表路径)

(2)sub_404FB0函数调用图分析(理解函数层级关系)
通过调用图直观查看sub_404FB0调用的子函数
在“Functions”面板中,右键点击“sub_404FB0”,选择“Graphs→Function Calls”(打开函数调用图)

  • 代码块1:初始化与C2地址加载
    image
  1. 前3条指令是标准C函数的栈帧初始化(保存基址、分配局部变量空间)
  2. mov edx, offset aHttp10_10_10_1:将硬编码的C2服务器地址字符串的偏移量加载到edx寄存器
  3. 最后两条指令:将C2地址存入函数参数arg_0指向的内存地址(后续通信会使用该地址)
  • 结果记录:确认sub_404FB0是第一个加载C2地址的函数,核心通信逻辑由此启动

  • 代码块2:字符串拼接(组合C2通信URL)
    image

  1. strcat函数的参数顺序:第一个参数是“目标字符串”(待拼接的基础字符串),第二个参数是“源字符串”(要拼接的内容)
  2. 第一次拼接:将RaDa_commands.html拼接到C2地址后,形成“指令接收URL”(攻击者通过该URL下发控制指令)
  3. 第二次拼接:将cgi-bin拼接到C2地址后,为后续download.cgi(下载模块)、upload.cgi(上传数据)提供路径基础
  • 结果记录:sub_404FB0通过4次strcat调用,构建了完整的C2通信URL体系,具备“接收指令+下载+上传”的双向通信能力(对应题目问题3的“通信特性”)

  • 代码块3:本地目录创建(构建持久化存储结构)
    image
    image

  1. CreateDirectoryA函数:需传入“目录路径”和“属性”两个参数,返回非0表示创建成功
  2. 先创建C:\RaDa\tmp(用于存储下载的临时指令/模块),再创建C:\RaDa\bin(用于存储自身副本)
  3. 通过strcatRaDa.exe拼接到C:\RaDa\bin后,形成自身副本的完整路径(后续自启动会指向该路径)
  • 结果记录:sub_404FB0完成了本地恶意目录结构的构建,为持久化驻留提供存储基础(对应题目问题3的“本地操作特性”)

  • 代码块4:注册表自启动配置(实现持久化)
    image
    1.__vbaStrCopy函数:需传入“源字符串”和“目标字符串缓冲区”参数,功能为复制字符串内容
    2. 先复制注册表路径"HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",再复制键名"RaDa",最后复制键值类型"REG_SZ"
    3. 通过多次__vbaStrCopy拼接注册表键路径HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa,并设置键值类型为字符串

  • 结果记录:这段代码完成了注册表自启动项的配置字符串初始化,为后续设置自启动键值、实现恶意程序持久化驻留提供基础(对应恶意软件的“持久化特性”)

2.3.3 识别文件的不同特性

(1)功能特性梳理:

  • 持久化:通过修改注册表Run键,确保开机自动运行;
  • 网络通信:与硬编码的C&C服务器建立HTTP连接,支持指令接收和数据回传;
  • 环境准备:自动创建C:\RaDa\tmp(临时文件)和C:\RaDa\bin(自身副本)目录,结构化存储恶意组件。

(2)技术特性分析:

  • 加壳特性:通过PEiD确认使用UPX加壳,压缩原始代码以隐藏逻辑;
  • 编译特性:通过IDA Pro“File Header”查看,发现由Visual C++ 6.0编译,推测开发环境为早期Windows平台;
  • 字符串存储:关键信息(如C&C地址)以明文硬编码,未加密(简化分析但易被检测)。

功能特性反映样本的攻击链(驻留→通信→执行指令),技术特性揭示开发水平(如使用常见加壳工具、未加密敏感信息,可能为初级恶意代码)。

2.3.4 防止被分析的技术识别

操作步骤:
(1)加壳检测:
用PEiD分析原始样本,确认存在UPX加壳(“Packer”栏显示UPX版本),脱壳后文件大小从50KB增至150KB,说明壳代码占用一定体积,用于压缩原始代码、隐藏入口点。
(2)反调试与混淆检查:
在IDA Pro中搜索反调试相关函数(如IsDebuggerPresentCheckRemoteDebuggerPresent),未发现相关调用,说明无明显反调试逻辑;
查看代码段,未发现大量冗余跳转、花指令等代码混淆手段,逻辑较清晰。

该样本仅采用UPX加壳作为反分析手段,通过压缩原始代码增加静态分析难度,但未使用高级反调试或混淆技术,防御能力较弱,易被脱壳后逆向。

2.3.5 恶意代码分类及理由

(1)对比各类恶意代码定义:

  • 病毒:需感染其他文件(样本未发现CreateFileA写入其他程序的行为,排除);
  • 蠕虫:需自主传播(无WSASendTo等扫描传播函数,排除);
  • 后门:通过隐藏通道提供远程控制(样本符合“持久化+C&C通信+指令执行”特征,匹配)。

(2)结合行为验证:
样本无自我复制到其他文件或扫描远程主机的行为,核心是“驻留并等待远程指令”,符合后门程序的核心定义。

结论:属于后门程序,理由是其主要功能是建立隐蔽的远程控制通道,无自主传播或感染能力。

2.3.6 相似功能的其他工具

(1)列举同类远程控制工具:

  • 灰鸽子:早期知名后门,支持注册表持久化、远程文件操作、屏幕监控,与样本的“自启动+C&C通信”功能相似;
  • Gh0st RAT:通过HTTP与C&C通信,支持命令执行、数据窃取,架构与样本的“客户端-服务器”模式一致;
  • Poison Ivy(毒藤):具备持久化驻留、远程shell功能,技术特点与样本的基础远程控制逻辑重合。

这些工具均以“隐蔽驻留+远程控制”为核心,与RaDa的功能定位一致,属于同类后门程序。

2.3.7 调查开发作者的可能性及条件

(1)提取作者相关信息:

  • 在IDA Pro字符串窗口中搜索“Author”“Created by”等关键词,找到字符串“Raul Siles && David Perez”,明确标注为作者。
    (2)分析信息有效性条件:
  • 条件1:信息未加密——样本中作者信息以明文存储,未经过异或、Base64等加密处理,可直接提取;
  • 条件2:脱壳后可见——原始样本加壳但未加密字符串,脱壳后IDA Pro可直接解析;
  • 条件3:作者主动标注——若作者未在代码中留下标识(如无相关字符串),则无法通过静态分析获取。

结论:可以调查出作者(Raul Siles && David Perez),前提是样本中存在明文作者信息、已完成脱壳,且作者未刻意隐藏标识。

2.3.8 至少5种检测方法及详细说明

(1)基于特征码的检测:

  • 操作:提取脱壳后样本的MD5哈希或特征字符串(如http://10.10.10.10/RaDa),将其加入杀毒软件病毒库。
  • 原理:通过比对文件哈希或特定字符串,快速识别已知样本,适用于批量扫描。
  • 优势:检测速度快、资源消耗低;局限:无法识别变种(哈希或字符串被修改则失效)。
    (2)基于行为的检测:
  • 操作:通过EDR(终端检测与响应)工具监控进程行为,若发现“修改注册表Run键+创建C:\RaDa目录+连接10.10.10.10”的组合行为,触发告警。
  • 原理:恶意行为的组合模式具有唯一性,即使样本哈希变化,行为特征仍可识别。
  • 优势:可检测未知变种;局限:需精准定义行为规则,避免误报(如正常程序也可能修改注册表)。
    (3)沙箱动态分析:
  • 操作:将样本放入隔离沙箱(如Cuckoo Sandbox)运行,记录其网络连接(目标IP、端口)、文件操作(创建路径、复制自身)、注册表修改(Run键值)。
  • 原理:沙箱可捕获样本的完整行为链,通过与恶意行为库比对(如“自启动+连接可疑IP”)判定恶意性。
  • 优势:无需提前知晓特征,适合未知样本;局限:部分样本会检测沙箱环境并隐藏恶意行为。
    (4)基于导入函数的检测:
  • 操作:通过工具(如PEiD、CFF Explorer)提取样本的导入函数,若发现socket+RegSetValueExA+CreateDirectoryA的组合(网络+持久化+文件操作),标记为可疑。
  • 原理:良性程序通常不会同时具备这三类函数(尤其是无正常业务需求时),组合出现暗示恶意意图。
  • 优势:可在静态分析阶段快速筛选可疑文件;局限:需排除正常程序(如合法远程管理工具)的误判。
    (5)基于网络流量的检测:
  • 操作:在防火墙或IDS(入侵检测系统)中配置规则,拦截向10.10.10.10的HTTP请求,或检测包含RaDa_commands.html(样本中提取的指令页面)的数据包。
  • 原理:样本与C&C服务器的通信具有固定特征(IP、URL),可通过流量特征阻断或告警。
  • 优势:能在样本未被识别前阻断其与控制端的通信;局限:若C&C服务器IP更换则失效,需结合域名/URL检测。

2.4 取证分析实践(基于Snort蜜罐日志)

2.4.1 IRC相关概念及技术细节

IRC定义:IRC(Internet Relay Chat,互联网中继聊天)是一种基于TCP的实时文本通信协议,允许用户通过客户端连接到IRC服务器,加入频道(Channel)进行群聊或私聊。

加入IRC网络的消息:IRC客户端申请加入IRC网络时,首先需完成与服务器的连接握手,核心消息为JOIN命令(格式:JOIN <频道名>),用于申请加入特定频道(如僵尸网络常用的#botnet等)。

常用TCP端口:默认端口为6667(未加密),此外还有6660-6669、7000等端口(部分服务器使用SSL加密的6697端口)。

2.4.2 僵尸网络的定义及用途

僵尸网络定义:僵尸网络(Botnet)是由攻击者控制的大量被感染计算机(僵尸机,Bot)组成的网络,这些计算机被植入恶意程序(僵尸程序),可接收攻击者通过命令控制服务器(C&C)发送的指令并执行。

主要用途

  • 分布式拒绝服务攻击(DDoS):控制大量僵尸机向目标发送流量,瘫痪目标服务;
  • 垃圾邮件分发:利用僵尸机群发垃圾邮件;
  • 信息窃取:窃取僵尸机上的敏感数据(如账号密码、信用卡信息);
  • 勒索软件部署:向僵尸机推送勒索软件,加密文件后勒索赎金;
  • 挖矿:占用僵尸机算力进行加密货币挖矿。

2.4.3 蜜罐主机(172.16.134.191)通信的IRC服务器

用 Wireshark打开botnet_pcap_file.dat。
image

输入过滤条件:ip.src == 172.16.134.191 and tcp.dstport == 6667(筛选蜜罐作为源、目标端口为 IRC 默认端口的流量)。
image

分析筛选结果的目的 IP字段,去重后得到 IRC 服务器 IP:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10。

2.4.4 访问209.196.44.172僵尸网络的不同主机数量

(1)在 Kali 中安装 tcpflow 工具:
sudo apt update
sudo apt-get install tcpflow
image

(2)将botnet_pcap_file.dat文件传到虚机:
image

(3)提取目标服务器流量:
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"

命令参数解释:
-r botnet_pcap_file.dat:读取指定的流量包文件(“r”=read)。
"host 209.196.44.172 and port 6667":筛选条件,仅保留与该 IP 和端口相关的 TCP 流量。
执行结果:当前目录下生成两类文件 ——report.xml(流量统计报告)和多个 TCP 流文件(如209.196.044.172.06667-172.016.134.191.01152)。
image

(4)统计去重后的主机数量:
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:读取 C&C 服务器(209.196.44.172:6667)与蜜罐的 TCP 流文件(包含 IRC 频道用户列表)。
grep -a "^:irc5.aol.com 353":筛选以:irc5.aol.com 353开头的行(IRC 协议中,353 代码表示 “频道用户列表”,-a表示按文本模式处理二进制文件)。
sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g":删除行首无关字符,仅保留用户列表(sed用于文本替换,正则表达式匹配前缀并删除)。
tr ' ' '\n':将空格分隔的用户名单行显示(tr用于字符转换,把空格换成换行符)。
tr -d "\15":删除隐藏的回车符(避免空行干扰统计)。
grep -v "$":过滤掉空行(-v表示反向匹配,$表示空行)。
sort -u:排序并去重(-u表示保留唯一值,避免同一主机重复统计)。
wc -l:统计行数(每行对应一个唯一主机,最终结果即不同主机数量)。
image
执行后得到结果:3461 个不同主机。

2.4.5 攻击蜜罐主机(172.16.134.191)的IP地址

(1)操作步骤(Kali 命令行)
提取攻击 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 > attack_ips.txt

命令分段解释:
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191':
tcpdump:命令行流量分析工具。
-n -nn:禁用 DNS 解析(直接显示 IP 和端口,不转换为域名和服务名,提高效率)。
-r botnet_pcap_file.dat:读取流量包文件。
'dst host 172.16.134.191':筛选目的 IP 为蜜罐的所有流量(所有向蜜罐发送的数据包)。
awk -F " " '{print $3}':提取第 3 列数据(tcpdump 输出格式中,第 3 列是 “源 IP. 源端口”)。
cut -d '.' -f 1-4:从 “源 IP. 源端口” 中分离出纯 IP(-d '.'表示以点为分隔符,f 1-4表示取前 4 段,即 IP 地址)。
sort | uniq:排序并去重(避免同一 IP 重复统计)。
more > attack_ips.txt:将结果保存到attack_ips.txt文件(more用于分页显示,>表示输出重定向)。
image

(2)统计 IP 数量:
wc -l attack_ips.txt # 统计文件行数,即不同攻击IP的数量
image
共有 165 个不同 IP 地址用于攻击蜜罐。

2.4.6 攻击者尝试攻击的安全漏洞

(1)分析协议分布(Wireshark)
打开 Wireshark 并加载botnet_pcap_file.dat。
点击统计 → 协议分级统计
image
流量以 TCP 为主,且存在 IRC 协议通信,验证了僵尸网络通过 IRC 进行控制的特征,同时大量未展开的 TCP 流量为漏洞攻击分析提供了数据支撑。

(2)提取攻击者目标端口(Kali 命令行)
提取蜜罐发起的 TCP 连接源端口(即攻击者攻击的目标端口):
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

命令解释:
tcp[tcpflags]== 0x12:筛选 SYN+ACK 标志的数据包(TCP 三次握手的第二次,标识蜜罐响应外部连接请求,即外部主机发起的连接)。
cut -d '.' -f 5:提取源端口(第 3 列是 “蜜罐 IP. 源端口”,第 5 段是端口号)。

image
输出135、139、25、445、4899、80

(3)提取蜜罐发送的 UDP 数据包源端口:
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq
image
输出137

(4)端口与漏洞关联分析
image
端口是服务的 “入口”,不同服务对应不同的漏洞类型,通过提取目标端口可初步推断攻击者的攻击方向。

2.4.7 成功的攻击及原因

(1)分析 135 端口攻击(未成功)
目的:验证攻击者是否成功利用 RPC 服务(135 端口)漏洞。
设置过滤条件:ip.addr172.16.134.191 and tcp.port135(筛选蜜罐 135 端口的 TCP 流量)。
image
分析流量:仅存在 TCP 三次握手(SYN→SYN+ACK→ACK),无后续恶意数据包,客户端快速发送FIN断开连接。
结论:135 端口仅建立连接,未发送攻击载荷,攻击未成功。

(2)分析 139 端口攻击(未成功)
目的:验证攻击者是否成功利用 SMB 服务(139 端口)漏洞。
设置过滤条件:ip.addr172.16.134.191 and tcp.port139(筛选蜜罐 139 端口的 TCP 流量)。
image
分析流量:三次握手后,攻击者尝试访问共享目录\PC0191\c,但蜜罐返回RST包(拒绝访问),无后续操作。
结论:139 端口连接被拒绝,未获取访问权限,攻击未成功。

(3)分析 25 端口攻击(未成功)
目的:验证攻击者是否成功利用 SMTP 服务(25 端口)漏洞。
设置过滤条件:ip.addr172.16.134.191 and tcp.port25(筛选蜜罐 25 端口的 TCP 流量)。
image
分析流量:三次握手建立连接后,无任何数据传输,蜜罐主动发送FIN+ACK断开连接。
结论:未进行恶意操作,攻击未成功。

(4)分析 445 端口攻击(成功)
目的:验证攻击者是否成功利用 SMB 服务(445 端口)漏洞。
设置过滤条件:ip.addr172.16.134.191 and tcp.port445(筛选蜜罐 445 端口的 TCP 流量)。
image
分析流量:
外部主机195.36.247.77与蜜罐完成三次握手,通过NTLMSSP认证获取访问权限。
攻击者发送Tree Connect请求访问共享资源,执行SAMR/DCE/RPC操作(枚举用户、提升权限)。
最终删除系统文件C:\System32\PSEXESVC.EXE(PsExec 服务端组件,用于清除痕迹)。
结论:攻击者通过 SMB 漏洞(如MS08-067)或弱口令认证,获得管理员权限并执行恶意文件操作,攻击成功。

(5)分析 4899 端口攻击(成功)
目的:验证攻击者是否成功利用远程控制软件(4899 端口)漏洞。
设置过滤条件:ip.addr172.16.134.191 and tcp.port4899(筛选蜜罐 4899 端口的 TCP 流量)。
image
分析流量:
外部主机与蜜罐完成三次握手,发送大量带PSH标志的数据包(表示紧急数据传输,建立稳定控制通道)。
攻击者发送目录遍历攻击HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir,执行系统命令。
结论:攻击者利用远程控制软件(如 Radmin)的 Web 界面漏洞,执行恶意命令并控制主机,攻击成功。

(6)分析 80 端口攻击(成功)
目的:验证攻击者是否成功利用 Web 服务(80 端口)缓冲区溢出漏洞。
设置过滤条件:ip.addr172.16.134.191 and tcp.port80(筛选蜜罐 80 端口的 TCP 流量)。
image
分析流量:
三次握手后,攻击者发送由大量字符 “c” 组成的缓冲区溢出载荷。
蜜罐未返回RST或ICMP错误,说明载荷被成功处理,后续维持通信(可能植入后门)。
结论:攻击者利用 Web 服务缓冲区溢出漏洞,发送恶意载荷控制主机,攻击成功。

(7)分析 137 端口攻击(未成功)
目的:验证攻击者是否成功利用 NetBIOS 服务(137 端口)漏洞。
设置过滤条件:ip.addr172.16.134.191 and udp.port137(筛选蜜罐 137 端口的 UDP 流量)。
image
分析流量:仅存在正常 NetBIOS 名称查询与响应,无攻击载荷。
结论:未利用该端口漏洞,攻击未成功。

3.问题及解决方案

  • 问题1:输入.\crackmeplease.exe "I know the secret"时,明明文件名和参数都对了,但就是输出“I have an identity problem.”。
  • 问题1解决方案:
    因为程序 crackmeplease.exe 内部可能存在对自身文件名的严格校验(即检查 argv[0] 的值),当输入 .\crackmeplease.exe 时,命令行会将 argv[0] 解析为 .\crackmeplease.exe(包含当前路径前缀 .\)。若程序内部校验 argv[0] 必须严格等于 crackmeplease.exe(不含路径前缀),则会判定 “身份不匹配”,输出错误提示 I have an identity problem.。
    所以在 CMD 中直接执行 crackmeplease.exe "I know the secret" 时,输出成功信息 We have a little secret: Chocolate。
    image

4.学习感悟、思考等

   这次实验里,我又学了一个新工具——IDA Pro。
   一开始打开IDA加载样本时,看着满屏的汇编指令直接懵了,mov、cmp、jnz这些指令单独看都认识,连起来就像看天书。尤其是分析crackme1的时候,对着函数调用图发呆,不知道该从哪下手。后来试着从输出字符串“成功”“失败”反推,顺着printf函数的引用找到调用它的函数,再通过流程图看条件判断,才慢慢理清楚,参数校验逻辑就藏在那几个strcmp和跳转指令里。这种“从结果倒推过程”的思路,比硬啃汇编代码省力多了。  
   不过最头疼的是看函数调用图。rada里的sub_404FB0函数调用了一堆子函数,一开始对着密密麻麻的箭头犯晕,后来试着把它拆成“初始化→路径创建→注册表操作→网络通信”几个模块,逐个分析每个代码块的作用,才明白这个函数其实是在搭建整个恶意代码的“生存环境”。
   现在回头看,IDA Pro就像个“代码翻译官”,但它不会直接告诉你答案,得靠自己带着问题去问它——比如“这段代码在判断什么?”“这个字符串会被用到哪里?”。一开始总想着“IDA能不能直接告诉我作者是谁、漏洞在哪”,后来才明白,真正的分析能力,是学会用它的各种功能(流程图、交叉引用、字符串搜索)拼凑出真相。
   下次再分析样本,可能会先花5分钟用IDA扫一遍字符串和导入函数,大概猜一下程序的功能,再针对性地钻细节会更快点。
posted @ 2025-11-10 22:52  王艺瑶  阅读(5)  评论(0)    收藏  举报