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

Windows内核池喷射的愉悦

来源:本站整理 作者:佚名 时间:2017-09-21 TAG: 我要投稿
871d39e8  040c0006 e174754d 00000000 00000050
871d39f8  00000000 00000000 9a06fb38 002e002e
871d3a08  aab50528 00000000 00000002 00000001
871d3a18  00000000 000a000e 86e0bd80 99a4fc07
871d3a28  0008bb02 00000001 871d3a30 871d3a30
871d3a38  00000001 00000000 00000000 01d10000
871d3a48  040b000c 6d4d6956 b299b8c8 9a087020
871d3a58  a8246340 00000000 00000000 85d4f0b0
lkd> dd aab50528
aab50528  006f0050 006c006f 00730020 00720070
aab50538  00790061 006e0069 00200067 00730069
aab50548  00630020 006f006f 0020006c 006f0031
lkd> dS aab50528
006c006f  "????????????????????????????????"
006c00af  "????????"
我的 WinDBG 看起来是不想打印出工具的名字,然则假如你以十六进制格局反省它的 UNICODE,它便是咱们给 Mutex 的定名。假如咱们反省这个字符串的存储地位:
lkd> !pool aab50528
Pool page aab50528 region is Paged pool
 aab50000 size:   a8 previous size:    0  (Allocated)  CMDa
 aab500a8 size:   28 previous size:   a8  (Free)       3.7.
 aab500d0 size:   28 previous size:   28  (Allocated)  NtFs
 aab500f8 size:   28 previous size:   28  (Allocated)  MmSm
 aab50120 size:   38 previous size:   28  (Allocated)  CMnb Process: 86ef6760
 aab50158 size:  100 previous size:   38  (Allocated)  IoNm
 aab50258 size:   38 previous size:  100  (Allocated)  CMDa
 aab50290 size:   38 previous size:   38  (Allocated)  CMNb (Protected)
 aab502c8 size:   28 previous size:   38  (Allocated)  MmSm
 aab502f0 size:   20 previous size:   28  (Allocated)  CMNb (Protected)
 aab50310 size:   60 previous size:   20  (Allocated)  Key  (Protected)
 aab50370 size:   20 previous size:   60  (Allocated)  SeAt
 aab50390 size:   d8 previous size:   20  (Allocated)  FMfn
 aab50468 size:   28 previous size:   d8  (Allocated)  CMVa
 aab50490 size:   30 previous size:   28  (Allocated)  CMVa
 aab504c0 size:   60 previous size:   30  (Allocated)  Key  (Protected)
*aab50520 size:   38 previous size:   60  (Allocated) *ObNm
  Pooltag ObNm : object names, Binary : nt!ob
可以或许看到它在分页池中!以后咱们还会回想这里,但在这里先泄漏一些器械:咱们可以或许应用定名的 Mutex 在分页池地区(paged pool area)中创立自定义巨细的分派,巨细取决于咱们给出的称号。这对付在分页池中停止放射是异常有用的。
第二部门——应用pykd编写剧本
正如上一部门中讲到的,得到工具现实巨细的过程是相称简略的,然则假如咱们必要得到许多工具巨细的时刻,这将是一个繁重的手工功课,是以为了防止挥霍太多光阴,此过程应当被自动化履行。手动操纵几回固然是有利益的,分外是对初学者而言,然则更多的反复就没有意义了。那末咱们若何编写 WinDBG 剧本?用 pykd!pykd 是 WinDBG 的一个很棒的 Python 扩大,它乃至容许在没有手动启动 WinDBG 的情况下编写剧本。
第一件事便是装置 pykd,这偶然很让人头疼。它其实不老是像听起来那末简略。假如咱们下载预编译的版本,并将 pykd.pyd 文件放在 WinDBG 的 winext 目录下,可以或许是最简略的办法。请让 WinDBG、Python、VCRedict 和 pykd 的架构雷同(x86 或 x64),这一点很紧张。你也能够或许通过 PIP 来装置 pykd,然则我在测验考试导入它的时刻并无胜利。别的一定要应用最新版本的 Python (2.7.13),当启动 pykd 时,一些较旧的版本(如 2.7.9)会使 WinDBG 加入。至于那些更老版本的 Python(2.7.1),它已经是可以或许工作的。然则你一旦这么做,它将成为一个异常强大的扩大。
于是我写了一个简略的函数来获得工具称号和句柄,而且会查找工具的巨细。大概另有其余更优雅的解决方案,但上面的剧本已经可以或许满意我的需要:
def find_object_size(handle,name):
#find windbg.exe process
wp = dbgCommand('!process 0 0 windbg.exe')
#print wp
#extract process "address"
process_tuples = re.findall( r'(PROCESS )([0-9a-f]*)(  SessionId)', wp)
if process_tuples:
  process = process_tuples[0][1]
  print "Process: " + process
  #switch to process context
  dbgCommand(".process " + process)
  #find object "address"
  object_ref = dbgCommand("!handle " + h)
  object_tuples = re.findall( r'(Object: )([0-9a-f]*)(  GrantedAccess)', object_ref)
  if object_tuples:
   obj = object_tuples[0][1]
   print "Object: " + obj
   #find pool
   pools = dbgCommand("!pool " + obj)

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

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