Nimbo-C2:一款功能强大的轻量级C2 框架

关于Nimbo-C2

Nimbo-C2是一款功能强大的轻量级C2 框架,Nimbo-C2代理支持x64
Windows&Linux操作系统。该工具基于Nim和Python开发,其WIndows端使用了.NET组件。Nim的功能非常强大,但在跟Windows系统交互时使用PowerShell可能会更加简单,因此该工具的部分功能是基于PowerShell实现的。Nimbo-C2的Linux代理更加的精简,只能执行基本命令,其中包括ELF加载(通过memfd技术实现)等。

工具所有的服务器端组件都基于Python开发,并具备下列功能:

1、HTTP监听器负责管理代理;

2、构建器负责生成代理Payload;

3、Nimbo-C2是一个交互式C2组件,负责管理所有组件;

功能介绍

1、构建EXE、DLL、ELF Payload;

2、使用 NimProtect加密植入物配置和字符串;

3、使用 UPX封装Payload,并对PE代码进行混淆处理以增加检测和解包的难度;

4、HTTP通信加密;

5、C2命令行终端支持命令自动补全;

6、在内存中执行PowerShell命令;

7、提供文件上传和下载命令;

8、内置扫描发现命令;

9、支持屏幕截图、剪贴板数据窃取和音频记录;

10、LSASS和SAM Hive转储;

11、Shellcode注入;

12、内联.NET程序集执行;

13、具备持久化感染能力;

14、支持UAC绕过;

15、其他…

工具安装

首先,我们需要使用下列命令将该项目源码克隆至本地,并切换至项目目录中:

git clone https://github.com/itaymigdal/Nimbo-C2

cd Nimbo-C2

接下来,构建Docker镜像:

docker build -t nimbo-dependencies .

切换到源文件目录中,并运行Docker镜像,暴露的端口为80端口,并会将Nimbo-C2目录加载进容器中(如果是Linux,则需要将下列命令中的 p w d 替换为 {pwd}替换为 pwd替换为(pwd)):

cd Nimbo-C2

docker run -it --rm -p 80:80 -v ${pwd}:/Nimbo-C2 -w /Nimbo-C2 nimbo-dependencies

工具使用

首先,我们需要根据自己的需求修改config.jsonc文件。

然后运行下列命令启动Nimbo-C2:

python3 Nimbo-C2.py

使用help命令可以查看该工具的帮助信息。

工具主窗口

Nimbo-C2 > help

 

    --== Agent ==--

    agent list                    ->  查看活动代理

    agent interact <agent-id>     ->   与代理交互

    agent remove <agent-id>       ->  移除代理数据

 

    --== Builder ==--

    build exe                     ->  构建exe代理(-h查看帮助信息)

    build dll                     ->  构建dll代理 (-h查看帮助信息)

    build elf                     ->  构建elf代理 (-h查看帮助信息)

 

    --== Listener ==--

    listener start                ->   开启监听器

    listener stop                 ->  终止监听器

    listener status               ->   打印监听器状态

 

    --== General ==--

    cls                           ->  清屏

    help                          ->  打印工具帮助信息

    exit                          ->  退出

代理窗口

Windows代理

Nimbo-2 [d337c406] > help

 

    --== Send Commands ==--

    cmd <shell-command>                    ->  执行一个Shell命令

    iex <powershell-scriptblock>           ->  在内存中执行PowerShell命令

 

    --== File Stuff ==--

    download <remote-file>                 ->  从代理下载一个文件

    upload <loal-file> <remote-path>       ->  向代理上传一个文件

 

    --== Discovery Stuff ==--

    pstree                                 ->  显示进程树

    checksec                               ->  检查安全产品

    software                               ->  检查已安装的软件

 

    --== Collection Stuff ==--

    clipboard                              ->  检索剪贴板数据

    screenshot                             ->  检索屏幕截图

    audio <record-time>                    ->  记录音频

    

    --== Post Exploitation Stuff ==--

    lsass <method>                         ->  转储lsass.exe [方法:  direct,comsvcs] (需要提权)

sam                                    ->  使用reg.exe转储sam,、security

system hive (需要提权)

    shellc <raw-shellcode-file> <pid>      ->  向远程进程注入Shellcode

    assembly <local-assembly> <args>       ->  执行.net程序集、

 

    --== Persistence Stuff ==--

    persist run <command> <key-name>       ->  设置运行密钥

    persist spe <command> <process-name>   ->  使用静默进程退出技术实现持久化(需要提权)

 

    --== Privesc Stuff ==--

    uac fodhelper <command> <keep/die>     ->  使用fodhelper UAC绕过技术实现会话提权

    uac sdclt <command> <keep/die>         ->  使用sdclt UAC绕过技术实现会话提权

 

    --== Interaction stuff ==--

    msgbox <title> <text>                  ->  弹窗消息

    speak <text>                           ->  基于sapi.spvoice实现语音交互

 

    --== Communication Stuff ==--

    sleep <sleep-time> <jitter-%>          ->  修改休眠时间间隔

    clear                                  ->  清理挂起命令

    collect                                ->  重新收集代理数据

    kill                                   ->  终止代理运行

 

    --== General ==--

    show                                   ->  显示代理详情

    back                                   ->  返回主窗口

    cls                                    ->  清屏

    help                                   ->  打印工具帮助信息

    exit                                   ->  退出

Linux代理

Nimbo-2 [51a33cb9] > help

 

    --== Send Commands ==--

    cmd <shell-command>                    ->  执行一个终端命令

    

    --== File Stuff ==--

    download <remote-file>                 ->  从代理下载一个文件

    upload <local-file> <remote-path>      ->  向代理上传一个文件

    

    --== Post Exploitation Stuff ==--

    memfd <mode> <elf-file> <commandline>  ->  使用memfd_create系统调用在内存中加载ELF

                                               implant模式: 以子进程形式加载ELF并返回

                                               task模式: 以子进程形式加载ELF,并等待执行完成后的输出结果

                                               

    

    --== Communication Stuff ==--

    sleep <sleep-time> <jitter-%>          ->  修改休眠时间间隔

    clear                                  ->  清理挂起命令

    collect                                ->  重新收集代理数据

    kill                                   ->  终止代理运行

    

    --== General ==--

    show                                   ->  显示代理详情

    back                                   ->  回到主窗口

    cls                                    ->  清屏

    help                                   ->  打印工具帮助信息

    exit                                   ->  退出

工具运行截图

工具主界面:

代理下载文件:

注入Shellcode:

记录麦克风数据(录音):

发送命令:

获取剪切板数据和屏幕截图:

UAC绕过:

服务器端主界面:

许可证协议

本项目的开发与发布遵循
MIT
开源许可证协议。

项目地址

Nimbo-C2 :【 GitHub传送门

参考资料


https://github.com/itaymigdal/NimProtect

https://github.com/upx/upx

开发与发布遵循
MIT
开源许可证协议。

项目地址

Nimbo-C2 :【 GitHub传送门

参考资料


https://github.com/itaymigdal/NimProtect

https://github.com/upx/upx

网络安全工程师(白帽子)企业级学习路线

第一阶段:安全基础(入门)

img

第二阶段:Web渗透(初级网安工程师)

img

第三阶段:进阶部分(中级网络安全工程师)

img

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资源分享

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RlajLjvN-1692151013724)(C:\Users\Administrator\Desktop\网络安全资料图\微信截图_20230201105953.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个最短路径问题,可以使用Dijkstra算法或者Floyd算法进行求解。以下是使用Dijkstra算法的示例代码: ```python import heapq # 构建有向图 graph = { 'S': {'A1': 6, 'A3': 3}, 'A1': {'S': 6, 'A2': 3, 'A3': 6, 'B1': 5, 'B2': 4}, 'A2': {'A1': 3, 'B1': 6, 'B2': 6, 'C1': 7, 'C2': 8, 'T': 3}, 'A3': {'S': 3, 'A1': 6, 'B1': 7, 'B2': 4}, 'B1': {'A1': 5, 'A2': 6, 'A3': 7, 'B2': 7, 'C1': 7, 'C2': 8}, 'B2': {'A1': 4, 'A2': 6, 'A3': 4, 'B1': 7, 'C1': 8, 'C2': 9}, 'C1': {'B1': 7, 'B2': 8, 'A2': 7, 'C2': 5, 'T': 5}, 'C2': {'B1': 8, 'B2': 9, 'A2': 8, 'C1': 5, 'T': 6}, 'T': {'A2': 3, 'C1': 5, 'C2': 6} } def dijkstra(graph, start, end): # 初始化距离列表和堆 distances = {node: float('inf') for node in graph} distances[start] = 0 heap = [(0, start)] # 初始化前驱节点列表 previous_nodes = {node: None for node in graph} while heap: # 弹出堆中距离最小的节点 (distance, current_node) = heapq.heappop(heap) # 如果该节点已经访问过,则跳过 if distance > distances[current_node]: continue # 遍历该节点的所有邻居 for neighbor, weight in graph[current_node].items(): new_distance = distance + weight # 如果新的距离比之前的距离更小,则更新距离和前驱节点 if new_distance < distances[neighbor]: distances[neighbor] = new_distance previous_nodes[neighbor] = current_node heapq.heappush(heap, (new_distance, neighbor)) # 构建路径 path = [] current_node = end while current_node is not None: path.insert(0, current_node) current_node = previous_nodes[current_node] return distances[end], path start = 'S' end = 'T' distance, path = dijkstra(graph, start, end) print(f'最短路径为:{" -> ".join(path)},长度为:{distance}') ``` 在上述代码中,我们首先构建了一个有向图,然后使用Dijkstra算法求解经过指定节点的最短路径。其中,使用了堆来维护当前距离最小的节点,以提高算法的效率。最后,输出了最短路径及其长度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值