解决vista.win7 32/64 session隔离 注入
vista/7 以后的系统都存在session隔离,
CreateRemoteThread的流程
vista下 Kernel32!CreateRemoteThread
win7下 Kernel32!CreateRemoteThread->..一些中转..->KernelBase->CreateRemoteThreadEx
在vista/7上,kernel32/或者KernelBase里存在一个全局变量BaseRunningInServerProcess
在进程创建的时候就被初始化了,表示本进程是否是一个服务进程,服务的session是0
由CreateRemoteThread流程的最尾端的函数处理了这个标志,发现不是从服务进程发起的调用,就跳转了,
由于这个判断是在应用层而且是本进程做的,所以很没有意义,可以直接修改.
一般的修改办法是修改判断跳转,其实在某些条件下比如win7/32/64可以更简单的方式绕过.
原理是一样的,只是vista下没有导出这个全局变量,不好定位,只想到用特征码搜索的方式.
但在win7下就方便多了,由于kernelBase!KernelBaseGlobalData 导出,所以直接调用这个函数就可以获得这个全局结构体的地址,\
虽然这个结构体没有文档,但是加上一个偏移就是我们要的标志.
kernelBase!KernelBaseGlobalData的函数原形
typedef void* (__stdcall *LPFN_KernelBaseGetGlobalData)(void);
win7 32下 BaseRunningInServerProcess 位于 KERNELBASE!KernelBaseGlobalData+0x30
win7 64 下, BaseRunningInServerProcess 位于 KERNELBASE!KernelBaseGlobalData+0x5c
原理说完了,贴段可以自适应的代码.
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
