免杀 | 利用管道通信传递参数

文摘   2024-11-06 15:54   上海  

1


   

永恒之锋将代表出席 FCIS 大会,敬请关注哦


2


   

利用管道通信传递参数

利用CreateProcess调用出 cmd 之后,如果直接将 cmd 的参数放进 api 中,则会被 EDR 进行记录,可以使用管道通信的形式去传递参数。可以使用runas命令提权或者是关闭防火墙命令。

2.1


   

进程间通信(IPC)机制

进程间通信(IPC)机制是指同一台计算机的不同进程之间或网络上不同计算机进程之间的通信。Windows 下的方法包括邮槽(Mailslot)、管道(Pipes)、事件(Events)、文件映射(FileMapping)等。

管道分有名匿名两种。

  • 命名管道:可以在同台机器的不同进程间以及不同机器上的不同进程之间进行双向通信。

  • 匿名管道:只在父子进程之间或者一个进程的两个子进程之间进行通信,它是单向的。

管道操作标示符是 HANDLE,利用这个机制,直接使用ReadFile or WriteFile就可以实现了

若 2 个进程无“父子“关系,且子进程又未继承父进程资源,则这俩进程无法使用 Pipe 传递数据。


2.2


   

过程

  • 创建两个匿名管道,一个读一个写。

  • 创造一个子进程,将输入输出句柄重定向到管道

  • ReadFile()WriteFile()读写管道实现进程的通信

2.3


   

例子

利用程序创建 cmd 子进程执行一个弹出计算器的命令。


#include<stdio.h>
#include<Windows.h>
#include<winnt.h>
#include <wchar.h>

intmain()
{
// frist create two pipe, because the anonymous pipe is unidirectional
    HANDLE hReadPipe;
    HANDLE hWritePipe;
    SECURITY_ATTRIBUTES sa ={0};
    sa.nLength =sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = TRUE;

if(!CreatePipe(&hReadPipe,&hWritePipe,&sa,0))
{
printf("CreatePipe Failed %d\n",GetLastError());
return1;
}

    HANDLE hReadPipe1;
    HANDLE hWritePipe1;
if(!CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0))
{
printf("CreatePipe1 Failed %d\n",GetLastError());
return1;
}

// create a process cmd
    STARTUPINFO si ={0};
    PROCESS_INFORMATION pi ={0};

ZeroMemory(&si,sizeof(si));
ZeroMemory(&pi,sizeof(pi));


//relocaltion stdout, 
// Turn the input of the child process into a read pipe
    si.hStdInput = hReadPipe;
// Turn the output of the child process into a write pipe
    si.hStdOutput = hWritePipe1;
    si.hStdError = hWritePipe1;
    si.dwFlags = STARTF_USESTDHANDLES;

    LPTSTR program =L"C:\\Windows\\System32\\cmd.exe";
if(!CreateProcessW(program,NULL,0,0, TRUE,0,0,0,&si,&pi))
{
printf("CreateProcess Failed %d\n",GetLastError());
return1;
}

// send command to cmd.exe, cmd.exe stop by "\r\n"
char lpBuffer[]="calc\r\n";
if(!WriteFile(hWritePipe, lpBuffer,(DWORD)strlen(lpBuffer)+1,NULL,0))
{
printf("WriteFile Failed %d\n",GetLastError());
return1;
}

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

return0;
}

上述代码执行之后可以调用 cmd 弹出一个 calc。还可以通过设置

CreateProcessW(program, NULL, 0, 0, TRUE, 0, 0, 0, &si, &pi)的第六个参数来设置新进程不可见

3


   

帮会双十一活动来啦

帮会领域:专注于 APT 框架、渗透测试、红蓝对抗等领域


3.1


   

帮会内容覆盖

  1. 挖洞技巧和小 tips

  2. 挖洞实战项目案例内部分享

  3. 应急响应案例内部分享

  4. 不定时分享高质量小工具

  5. 可加入内部群进行攻防技术交流

  6. 团队内部师傅开发的小工具,优先体验新版本,还可和师傅提出 bug 获得奖励哦

  7. 有机会进入团队,成为正式成员,获得更多好处

  8. 私域信息安全图书馆

活动价格:15/月卡、39.9/季卡

9.9/月 20/季 79/永久

活动结束后将恢复原价


3.2


   

帮会私域信安图书馆

建立信息安全图书馆也有一段时间了,为大家准备了大量的资料,想学的时候,翻开那些你感兴趣的领域的资料看一看只要你需要,我们会尽可能的帮你寻找你感兴趣或者需要的资料。


Eonian Sharp
Eonian Sharp | 永恒之锋,专注APT框架、渗透测试攻击与防御的研究与开发,没有永恒的安全,但有永恒的正义之锋击破黑暗的不速之客。
 最新文章