type
status
date
slug
summary
tags
category
icon
password
记录学习注入手法
注入(Inject)
远程线程注入
首先我们知道的是LoadLibraryA这个API可以加载我们的动态链接库,而远程线程注入是创建一个远程线程,可以在别的进程里面创造一个线程,用到的API是CreateRemoteThread.
我们可知LoadLibraryA这个函数只有一个参数,我们要做的就是在一个进程里面创造一块虚拟内存用来存储我们要注入的dll,并且将这块内存作为LoadLibraryA的参数,然后调用 kernel32.dll这个模块里面的LoadLibraryA函数,从而实现dll的注入.
注入过程
这里我用了一个winHex作为演示
卸载过程
其实卸载过程的原理跟注入的原理都大差不差,都是调用kernel32.dll里面的API函数,只不过卸载过程调用的是FreeLibrary.
劫持进程注入
所谓劫持进程注入就是在我们要注入的进程启动之前就进行了注入,主要的实现方式通过CreateProcess这个API,我们以挂起的方式启动一个进程,然后对这个进程进行注入.
这里运用了一个GetExitCodeThread,这个API能够返回一个进程的ID,存储到dwExitCode这个变量里面.这样能够利于我们卸载DLL,不用再遍历进程
我们发现它是一种挂起的方式去进行注入的
消息钩子注入
消息钩子注入主要依靠的是SetWindowsHookEx这个API
基本组成就是这样SetWindowsHookEx(钩子消息,回调函数,基本模块,线程ID)
钩子消息其实就是钩子的类型
回调函数就是我们在运行这个模块之后首先要运行的一个函数,最后一个就是我们创建的这一个线程ID,我们可以利用THREADENTRY32这个结构体
我们在遍历线程的时候,比较我们这个模块所属进程的id是否跟我们要注入进程的id相等,然后我们在进行注入的时候用的是th32ThreadID.
main.cpp
InjectDll.dll
UserAPC注入
APC即asynchronous procedure call,每一线程都有一个APC队列。操作系统 允许一个应用向一个指定线程的APC队列中放入APC函数。当指定的线程处于警告状态时,该线程就会调用队列中的APC函数。调用的顺序为先入先出(FIFO)。可以用以下函数使一个线程进入警告状态:
SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx, MsgWaitForMultipleObjectsEx
利用API→QueueUserAPC
但这个时候是注入不了的,当系统处于警告状态的时候才能注入
🤗 总结归纳
总结了一些常见的注入手法,希望可以更多学习一些红队的注入手法
📎 参考文章
有关学习或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- Author:5m10v3
- URL:https://5m10v3.top/article/116533f9-4e40-8054-b48e-fc862eaa6a4c
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!