简单总结下常用的注入姿势

来源:互联网 发布:2008年网络歌曲大全 编辑:程序博客网 时间:2024/04/29 05:17

    简单总结下常用的注入姿势,这里面每一个我之前都做个详细的解释以及上传了实现代码,下面有对应的链接。这里整理下方便以后查找和复习。

1.镜像劫持

镜像劫持(1)(http://blog.csdn.net/u013761036/article/details/53290918)

在注册表的

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\Image File Execution Options]

处新建一个以杀毒软件主程序命名的项,

例如aaa.exe。然后再创建一个键“Debugger=" C:\WINDOWS\system32\bbb.exe”。

在启动名字为aaa.exe的程序的时候bbb.exe会被自动运行。

 

镜像劫持2)(http://blog.csdn.net/u013761036/article/details/53527490)

另一个可以镜像劫持的地方:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下面存着一个启动程序路径。

系统登录的时候会先调用它,所以我们可以通过他来劫持。

 

2.DLL注入-APC注入(http://blog.csdn.net/u013761036/article/details/53338322)

APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:
    1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断(或者是Messagebox弹窗的时候不点OK的时候也能注入)。
    2)当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数。
    3)利用QueueUserAPC()这个API可以在软中断时向线程的APC队列插入一个函数指针,如果我们插入的是Loadlibrary()执行函数的话,就能达到注入DLL的目的。

 

3.输入法注入(http://blog.csdn.net/u013761036/article/details/53230610)

IME:输入法相关文件,比如说你安装了输入法A,那么通常是会有两个或者多个IME文件(可以简单理解成是DLL),然后我们自己实现那些常用的导出函数接口,然后把我们自己写的输入法程序(XX.ime)注册成输入法,并且设置成默认输入法,这样之后新启动的程序会尝试自动加载我们的输入法,从而实现注入的目的。

 

4.通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里

(http://blog.csdn.net/u013761036/article/details/52885552)

挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝到里面去,然后修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关,然后跳转回来。

 

5.LSP注入(http://blog.csdn.net/u013761036/article/details/52563513)

总结起来就是说Windows为了方便扩展,在网络请求出做了接口中转,这样的话我们可以去实现这个中转的接口(对应一个dll,对外提供一些固定的接口),然后再把这个dll注册下(其实就是告诉系统,通过这个dll中转),然后我们在帮忙中转的过程中选择性的做一些事,已达到LSP注入的目的。

 

6.DLL劫持(HiJack)原理以及实现细节

(http://blog.csdn.net/u013761036/article/details/52268500)

    这个技术的原理很简单,就是A.exe想要调用B.dll,并且使用里面的FunC函数,这样的话我们把B.Dll改名BB.Dll(有的不用,直接根据路径劫持),然后我们自己写一个B.Dll里面有一个FunC这个函数,然后我们在这个函数里加载BB.Dll,并且调用里面的FunC函数,之后我们在干一些自己的事,对于A.exe来说通常没什么异常感觉,这样我们的目的就达到了,记住此时的你,也就是B.dll的权限和内存归属都是A的,也即是你和A是一家的了,类似于代码注入之后直接修改内存一样。


windows-DLL注入(远程线程注入)

(http://blog.csdn.net/u013761036/article/details/52205331)

    LoadLibrary这个函数所有的进程都是地址一样,我们直接获取LoadLibrary的地址,然后在CreateRemoteThread里面直接把这个地址作为线程地址传过去,然后参数就是我们已经拷贝到对方内存里的那个字符串,这样直接就跑起来了,当这这些动作之前要先在目标进程里开辟一些空间,然后把要用的变量数据什么的都放进去(这里通常指的是dll的路径)。

    

0 0
原创粉丝点击