查看: 202|回复: 0

[转载] 总结一下ObRegisterCallbacks绕过

[复制链接]

2

技术

13

魅力

3

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
4471
人气
169
分享
31

最佳新人活跃会员

发表于 2023-7-30 15:45:50 | 显示全部楼层 |阅读模式
原文地址:https://blog.csdn.net/zhuhuibeishadiao/article/details/83144837

转载已咨询原作者


1.ObRegisterCallbacks函数简介
[C++] 纯文本查看 复制代码
NTSTATUS ObRegisterCallbacks(
POB_CALLBACK_REGISTRATION CallbackRegistration,
PVOID *RegistrationHandle
);

其中CallbackRegistration是一个指向_OB_CALLBACK_REGISTRATION 结构的指针。
[C++] 纯文本查看 复制代码
typedef struct _OB_CALLBACK_REGISTRATION {
  USHORT                    Version;
  USHORT                    OperationRegistrationCount;
  UNICODE_STRING            Altitude;
  PVOID                     RegistrationContext;
  OB_OPERATION_REGISTRATION *OperationRegistration;
} OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION;


2.绕过方法
1.物理Section Map到用户空间 解析物理地址操作内存
2.修改PsProcessType/PsThreadType下_OBJECT_TYPE_INITIALIZER下RetainAccess为0x1fffff
无视抹权限 原理见ObpPreInterceptHandleCreate函数

[C++] 纯文本查看 复制代码
ObpPreInterceptHandleCreate(PVOID Object, unsigned __int8 bIsKernelHandle, PACCESS_MASK AccessMask, PVOID bNeedCallPost)


[C++] 纯文本查看 复制代码
ObpCallPreOperationCallbacks(POBJECT_TYPE pObjectType, POB_PRE_OPERATION_INFORMATION OperationInformation, PVOID bNeedCallPost)

效果:任意权限打开进程都是完整权限
3.修改调用线程的Ethread下的PreviousMode为kernelMode 此时需注意调用创建线程会造成和创建进程会蓝屏 需要全部初始化之后在修改 另外参数需要自己检验.
修改完之后已任意权限打开进程 无视进程权限进程内存操作 包括EnumProcessModulesEx and GetModuleFileNameExA
4.注册两个ObRegisterCallbacks 层分别在xx的上方和下方 等xx抹了之后 抹回去(意思大概是获取保护进程的驱动的高度,在这个高度的上下分别注册ObRegisterCallbacks)
5.遍历EPROCESS->HandleTable 修改GransAccess为0x1fffff
6.PsProcessType PsThreadType >> SupportsObjectCallbacks 置0 (win10 pg)
7.PsProcessType PsThreadType >> CallbackList Fink和bink改完同一个数(win10 pg maybe)
8.遍历CallbacksList替换或修改Pre Post函数(ObRegisterCallbacks在系统中有个类似于回调函数调用链的东西,可以遍历链表并删改函数)
9.注入csrss.exe lsass.exe等进程 用现有有效句柄操作内存
10.注入csrss.exe lsass.exe 或xx进程创建进程继承句柄(创建进程的dup是ExDupHandle不走Obregistercallbacks流程) (https://github.com/Schnocker/HLeaker
11.dup句柄(有些可以 有些不可能) (https://github.com/Schnocker/HLeaker
12.hook ObReferenceObjectByHandle 或ObReferenceObjectByHandleWithTag(pg)
13.遍历CallbacksList UnRegistercallbacks
14.修改PsProcessType/PsThreadType下_OBJECT_TYPE_INITIALIZER下GenericMapping->GenericExecute 为0x1fffff然后Open时第一个参数填入GENERIC_EXECUTE
(0x121001 (Query limited information, Terminate, Synchronize, Read control)) (无用 只做学习使用)
15.注册表无视句柄权限注入调试dll (https://github.com/Cybellum/DoubleAgent

评分

参与人数 1分享 +1 收起 理由
henry217 + 1

查看全部评分

YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表