CVE-2016-0095 Win32k.sys特权提升漏洞

0x00 漏洞分析
     1.运行pocwindbg捕捉到崩溃异常,栈回溯,可以看出是bGetRealizedBrush函数里触发了异常
    

   2.分析下bGetRealizedBrush函数崩溃处的代码

     2.1 ida分析下可以看出eax引用的是pEBRUSHOBJ结构体偏移0x34处的结构再偏1c的数据从而访问无效地址
    


     2.2bGetRealizedBrush下硬件执行断点,ebx = 96bd9af8 ,eax = fe8d8658, eax+1c = 0
     

     

3.poc中的FillRgn函数调用内核NtGdiFillRgn函数,分析NtGdiFillRgn
     
    3.1初始化pochRgn对象的数据
    

    3.2 初始化pochBrush结构(pEBRUSHOBJ
   

   3.3 获取pocCOLORREF的值
  

  3.4 到达EngPaint函数,可以知道大概传进的数据类型
  

  3.5 _SURFOBJ 结构(fe174250,而导致蓝屏的pEBRUSHOBJ结构(8a16eaf8偏移0x34fe174240,fe174240偏移0x1c0; 也就是说   pEBRUSHOBJ结构 偏移0x34中的值(fe174240)再偏移0x10就是_SURFOBJ 结构;那么_SURFOBJ 结构偏移0xc访问的是hdev字段 == pEBRUSHOBJ结构(8a16eaf8偏移0x34fe174240,fe174240偏移0x1c

  typedef struct _SURFOBJ {
   DHSURF dhsurf;
   HSURF  hsurf;
   DHPDEV dhpdev;
   HDEV   hdev;
   SIZEL  sizlBitmap;
   ULONG  cjBits;
   PVOID  pvBits;
   PVOID  pvScan0;
   LONG   lDelta;
   ULONG  iUniq;
   ULONG  iBitmapFormat;
   USHORT iType;
   USHORT fjBitmap;
} SURFOBJ;

   


  由于Poc中未对hdev进行初始化就直接引用,从而导致漏洞产生


0x01 漏洞利用
      
     1.利用点
     


   2.从漏洞触发到漏洞利用有几处if判断
     
      第一处
       

   第二处
   

  第三处
  


  
  3.利用思路:通过NTAllocateVirtualMemory在零页申请内存,在几处判断处赋上对应值,使流程往call edi处执行,其中偏移 0x748赋上shellcode地址
   


  



         





评论

此博客中的热门博文

Opencart-v3-0-3-0 user changes password at csrf vulnerability

Docker's latest version of privilege escalation vulnerability

Charles 4.2.7 XML External Entity