欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Windows内核池喷射的愉悦

来源:本站整理 作者:佚名 时间:2017-09-21 TAG: 我要投稿
     34  8520e900 Type                      Semaphore
这是一个可以或许在内核空间中分派的工具的列表。咱们可以或许通过反省更多的细节来摸索几个对付它们的紧张属性。应用敕令 dt nt!_OBJECT_TYPE  咱们可以或许得到对付某工具(object)的更多细节,好比句柄总数等。然则最紧张的是 _OBJECT_TYPE_INITIALIZER 布局的偏移量,它将给咱们带来极大的便利。让咱们看看它为咱们供给了 Mutant 工具的哪些我想要的信息:
lkd> dt nt!_OBJECT_TYPE 8521a838
   +0x000 TypeList         : _LIST_ENTRY [ 0x8521a838 - 0x8521a838 ]
   +0x008 Name             : _UNICODE_STRING "Mutant"
   +0x010 DefaultObject    : (null)
   +0x014 Index            : 0xe ''
   +0x018 TotalNumberOfObjects : 0x15f
   +0x01c TotalNumberOfHandles : 0x167
   +0x020 HighWaterNumberOfObjects : 0xc4d7
   +0x024 HighWaterNumberOfHandles : 0xc4ed
   +0x028 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x078 TypeLock         : _EX_PUSH_LOCK
   +0x07c Key              : 0x6174754d
   +0x080 CallbackList     : _LIST_ENTRY [ 0x8521a8b8 - 0x8521a8b8 ]
而后浏览下 _OBJECT_TYPE_INITIALIZER:
lkd> dt nt!_OBJECT_TYPE_INITIALIZER 8521a838+28
   +0x000 Length           : 0x50
   +0x002 ObjectTypeFlags  : 0 ''
   +0x002 CaseInsensitive  : 0y0
   +0x002 UnnamedObjectsOnly : 0y0
   +0x002 UseDefaultObject : 0y0
   +0x002 SecurityRequired : 0y0
   +0x002 MaintainHandleCount : 0y0
   +0x002 MaintainTypeList : 0y0
   +0x002 SupportsObjectCallbacks : 0y0
   +0x002 CacheAligned     : 0y0
   +0x004 ObjectTypeCode   : 2
   +0x008 InvalidAttributes : 0x100
   +0x00c GenericMapping   : _GENERIC_MAPPING
   +0x01c ValidAccessMask  : 0x1f0001
   +0x020 RetainAccess     : 0
   +0x024 PoolType         : 0 ( NonPagedPool )
   +0x028 DefaultPagedPoolCharge : 0
   +0x02c DefaultNonPagedPoolCharge : 0x50
   +0x030 DumpProcedure    : (null)
   +0x034 OpenProcedure    : (null)
   +0x038 CloseProcedure   : (null)
   +0x03c DeleteProcedure  : 0x82afe453     void  nt!ExpDeleteMutant+0
   +0x040 ParseProcedure   : (null)
   +0x044 SecurityProcedure : 0x82ca2936     long  nt!SeDefaultObjectMethod+0
   +0x048 QueryNameProcedure : (null)
   +0x04c OkayToCloseProcedure : (null)
这里奉告了咱们两个紧张的工作:
此工具被分派给的池范例 - 在这里长短分页池(NonPagedPool)
功效偏移(这在现实的漏洞破绽bug应用部门非常紧张)
以后,咱们来分派一个 Mutant 工具,而后在内核池中找到它。我写了一段简短的 Python 代码来实现它:
from ctypes import *
from ctypes.wintypes import *
import os, sys
kernel32 = windll.kernel32
def alloc_not_named_mutex():
        hHandle = HANDLE(0)
hHandle = kernel32.CreateMutexA(None, False, None)
if hHandle == None:
                print "[-] Error while creating mutex"
  sys.exit()
print hex(hHandle)
if __name__ == '__main__':
        alloc_not_named_mutex()
variable = raw_input('Press any key to exit...')
这段代码将为咱们分派一个未定名的 mutex,打印出它的句柄并期待加入。咱们必要期待着,以是咱们可以或许在 WinDBG 中摸索内核池,假如过程加入,则mutex 将被损坏。这里我得到了一个 0x70 的句柄,咱们来看看如何在 WinDBG 中找到它。起首我必要找到 Python 过程并切换上下文,可以或许如许做:
lkd> !process 0 0 python.exe
PROCESS 86e80930  SessionId: 1  Cid: 0240    Peb: 7ffd4000  ParentCid: 0f80
    DirBase: bf3fd2e0  ObjectTable: a8282b30  HandleCount:  41.
    Image: python.exe
lkd> .process 86e80930 
Implicit process is now 86e80930
第一条敕令将为咱们找到过程,第二条敕令将切换上下文。而后咱们查问句柄,就可以得到内存中工具的地点:

上一页  [1] [2] [3] [4] [5] [6] [7] [8]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载