内核漏洞基础初学

终于开始看这个东西了,等了很久,迷失自己很久了~~~~~~~~~

本文是个人笔记,如有类同,纯属巧合~~~~~~~~~~~~~~~~~~~~~~~~~


内核漏洞主要作用:            

 1)远程代码执行 2)本地权限提升 3)远程拒绝服务攻击 4 本地拒绝服务攻击

但是最后实现时执行了内核 r0 shellcode ,明明修改了进程token 为system 的token 但回到用户层还是没修改的样子,也就没提权成功,

出现问题的怀疑: 

1) 不是纯粹的原系统(下次验证)        

2) 代码问题  (我都执行了书上的代码还是那样?)  

3)  设置有问题?  xpsp3 exe用release版本  ,sys 用 build xp 模式 check?  下次换成 free 试试


远程拒绝服务攻击 和 本地拒绝服务攻击 一般不必过多 “构造”

驱动程序编译期默认开启 GS  那么利用缓冲区溢出比较困难。

一般采用修改系统内核内存数据  /   执行 Ring 0 shellcode 的漏洞

思路:

构造条件 ——》 构造数据 ——》 触发漏洞  ——》利用方法 1)R0  shellcode  2)修改内核内存数据 

1)提权 system      修改当前进程的TOKEN 为SYSTEM 进程的token 这样当前进程具备了 系统最高权限

2)恢复内核HOOK  安全软件通过HOOL/INLINE HOOK系统内核函数来实现防御,恢复这些HOOK/INLINE HOOK 就可突破

3)添加调用门,添加中断门,添加任务门,添加陷阱门   出入R0 R3 的重要手段,在系统中成功添加一个门就自由R0/E3



三种:   1 任意地址写任意数据(必定造成本地提权)    2  固定地址写任意数据   3 任意地址写固定数据


方法:  1)不推荐修改内存数据,因为很多重要的内核内存数据都是不可直接修改的,如果内存所在页属性被标记为只读,并且CR0寄存器的WP位设置为1,是不能直接写入该内存的

2)R0 shellcode 首先将CR0 的WP位置为0,即禁止内存保护,修改完再恢复WP位即可


R0 有很多内核API 函数,多保存于一些表中,并且这个表也是由内核导出的。例如 SSDT HalDispatchTable

并且修改这些表中的内核 API 函数地址为事先准备好的 shellcode 存放的地址(本进程空间内存地址),然后

在本进程中调用这个内核API函数,这样实现了在R0权限下执行shellcode的目的,一定选“冷门” 函数


可以看 reactOS 了解源码, 

NtQueryIntervalProfile(IN KPROFILE_SOURCE ProfileSource, OUT PULONG Interval)      -》 

ReturnInterval = (ULONG)KeQueryIntervalProfile(ProfileSource);                                         -》

ProfileSourceInformation.Source = ProfileSource;

Status = HalQuerySystemInformation(HalProfileSourceInformation,

                                           sizeof(HAL_PROFILE_SOURCE_INFORMATION),
                                           &ProfileSourceInformation,
                                           &ReturnLength);


HalQuerySystemInformation

1) 然后选择 HalDispathTable 表地址为x   中的一个函数 HalQuerySystemInformation 入口存放地址y=x+4 篡改为0,(最后再调用该函数的上层函数NtQueryIntervalProfile)

2) 在0x0地址(上面被篡改的地址)申请内存,存放 R0 shellcode 代码,

3) 然后R0 shellcode 被执行, 

4) 调用  NTdll.dll 模块中的 NtQueryIntervalProfile 函数 


kd> dt -v -r1 _kpcr
nt!_KPCR
struct _KPCR, 27 elements, 0xd70 bytes
   +0x000 NtTib            : struct _NT_TIB, 8 elements, 0x1c bytes
   ```````````````````````````````````
   +0x0dc KernelReserved2  : [17] Uint4B
   +0x120 PrcbData         : struct _KPRCB, 91 elements, 0xc50 bytes
      +0x000 MinorVersion     : Uint2B
      +0x002 MajorVersion     : Uint2B
      +0x004 CurrentThread    : Ptr32 to struct _KTHREAD, 74 elements, 0x1c0 bytes              //内核模式下fs:[0x124]

kd> dt -v -r1 _KTHREAD
nt!_KTHREAD
struct _KTHREAD, 74 elements, 0x1c0 bytes
   +0x000 Header           : struct _DISPATCHER_HEADER, 6 elements, 0x10 bytes
   ``````````````````````````````
   +0x02e Alerted          : [2] UChar
   +0x030 Iopl             : UChar
   +0x031 NpxState         : UChar
   +0x032 Saturation       : Char
   +0x033 Priority         : Char
   +0x034 ApcState         : struct _KAPC_STATE, 5 elements, 0x18 bytes
      +0x000 ApcListHead      : [2] struct _LIST_ENTRY, 2 elements, 0x8 bytes
      +0x010 Process          : Ptr32 to struct _KPROCESS, 29 elements, 0x6c bytes              //_kthread+0x44

kd> dt _ePROCESS
nt!_EPROCESS
   +0x000 Pcb              : _KPROCESS
   +0x06c ProcessLock      : _EX_PUSH_LOCK
   +0x070 CreateTime       : _LARGE_INTEGER
   +0x078 ExitTime         : _LARGE_INTEGER
   +0x080 RundownProtect   : _EX_RUNDOWN_REF
   +0x084 UniqueProcessId  : Ptr32 Void                                //ProcessID
   +0x088 ActiveProcessLinks : _LIST_ENTRY                             //next eprocess
   +0x090 QuotaUsage       : [3] Uint4B
   +0x09c QuotaPeak        : [3] Uint4B
   +0x0a8 CommitCharge     : Uint4B
   +0x0ac PeakVirtualSize  : Uint4B
   +0x0b0 VirtualSize      : Uint4B
   +0x0b4 SessionProcessLinks : _LIST_ENTRY
   +0x0bc DebugPort        : Ptr32 Void
   +0x0c0 ExceptionPort    : Ptr32 Void
   +0x0c4 ObjectTable      :
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值