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

微软Windows系统内核池混和对象的运用,溢出漏洞bug技术研究及探讨

来源:本站整理 作者:佚名 时间:2017-09-19 TAG: 我要投稿

本文重要探究一个根本的内核池溢出漏洞破绽bug,并研讨在经由进程混杂内核对象停止内核池放射后,若何经由进程笼罩TypeIndex来停止渗入渗出的办法。
此前,我参加了AWE系列课程,在课程停止后,我很想找到一些可以或许利用的内核漏洞破绽bug。尽管我可以或许利用HackSys Extreme Vulnerable Driver(HEVD)这个异常棒的进修对象,但我觉得,在现实利用中发明并利用漏洞破绽bug,会让我更有成就感。
因而,我开端进修若何开辟一个Windows内核装备驱动程序的fuzzer,并利用我自己的fuzzer去发明漏洞破绽bug,这个漏洞破绽bug就是我借助自己的fuzzer发明的。盼望我的漏洞破绽bug发明和利用进程能对人人有所赞助。
 
漏洞破绽bug阐发
在测试了一些SCADA(数据采集与监督节制体系)产物后,我发明了一个叫做“WinDriver”的第三方组件,它实在是Jungo的DriverWizard WinDriver,该组件平日绑缚于几个SCADA利用程序当中,常常能在旧版本中发明它的踪影。
在装置以后,它将一个名为windrvr1240.sys的装备驱动程序装置到Windows的驱动文件夹内。经由进程逆向,我找到了几个ioctl代码,可以或许间接拔出到我fuzzer的配置文件中。
{
    "ioctls_range":{
        "start": "0x95380000",
        "end": "0x9538ffff"
    }
}
而后,我经由进程利用verifier/volatile/flags 0x1/adddriver windrvr1240.sys,启用了一个特别的池,并开端尝试运行了我的fuzzer。随后,胜利发明了几个可以或许利用的漏洞破绽bug,此中一个漏洞破绽bug引起了我的留意:
kd> .trap 0xffffffffc800f96c
ErrCode = 00000002
eax=e4e4e4e4 ebx=8df44ba8 ecx=8df45004 edx=805d2141 esi=f268d599 edi=00000088
eip=9ffbc9e5 esp=c800f9e0 ebp=c800f9ec iopl=0         nv up ei pl nz na pe cy
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010207
windrvr1240+0x199e5:
9ffbc9e5 8941fc          mov     dword ptr [ecx-4],eax ds:0023:8df45000=????????
 
kd> dd esi+ecx-4
805d2599  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
805d25a9  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
805d25b9  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
805d25c9  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
805d25d9  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
805d25e9  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
805d25f9  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
805d2609  e4e4e4e4 e4e4e4e4 e4e4e4e4 e4e4e4e4
这是存储在[esi + ecx]中的用户节制数据,而它会对超越内核池的部门停止写入,经由进程进一步的研讨发明,这实在是由loc_4199D8中的内联赋值操纵而招致的池溢出。
.text:0041998E sub_41998E      proc near                    ; CODE XREF: sub_419B7C+3B2
.text:0041998E
.text:0041998E arg_0           = dword ptr  8
.text:0041998E arg_4           = dword ptr  0Ch
.text:0041998E
.text:0041998E                 push    ebp
.text:0041998F                 mov     ebp, esp
.text:00419991                 push    ebx
.text:00419992                 mov     ebx, [ebp+arg_4]
.text:00419995                 push    esi
.text:00419996                 push    edi
.text:00419997                 push    458h                 ; fized size_t +0x8 == 0x460
.text:0041999C                 xor     edi, edi
.text:0041999E                 push    edi                  ; int
.text:0041999F                 push    ebx                  ; void *
.text:004199A0                 call    memset               ; memset our buffer before the overflow

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

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