欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]CVE-2018-8120 两种利用方式学习

[原创]CVE-2018-8120 两种利用方式学习

菜鸡调试学习了一下 CVE-2018-8120 两种利用方式, 分享一下, 如有错误的地方, 还请指正.

测试环境

  • Windows 7 SP1 x86
  • Win32k 6.1.7601.17514

构造 POC

该漏洞是由于 win32k!SetImeInfoEx 在复制数据时, 由于检查不够, 造成空指针解引用漏洞. 下面是补丁前的代码:

SetImeInfoEx(tagWINDOWSTATION *winsta, tagIMEINFOEX *imeinfoex)

{

  result = winsta;

  if ( winsta )

  {

    keyboard_layout = winsta->spklList;

    while ( keyboard_layout->hkl != imeinfoex->hkl )

    {

      keyboard_layout = keyboard_layout->pklNext;

      if ( keyboard_layout == winsta->spklList )

        return 0;

    }

    iiex = keyboard_layout->piiex;

    if ( !iiex )

      return 0;

    if ( !iiex->fLoadFlag )

      qmemcpy(iiex, imeinfoex, sizeof(tagIMEINFOEX));

    ......

可以看到, 函数在使用 tagWINDOWSTATION 中的 spklList 成员时, 没有判断其是否为 NULL 就在下面开始使用. 下面是补丁后的代码(这里可以用 expand -F:* 命令从更新程序中提取补丁后的文件):

SetImeInfoEx(tagWINDOWSTATION *winsta, tagIMEINFOEX *imeinfoex)

{

  if ( winsta && (v3 = winsta->spklList) != 0 )

  {

    keyboard_layout = winsta->spklList;

    while ( keyboard_layout->hkl != imeinfoex->hkl )

    {

      keyboard_layout = keyboard_layout->pklNext;

      if ( keyboard_layout == v3 )

        return 0;

    }

    iiex = keyboard_layout->piiex;

    if ( !iiex )

      return 0;

    if ( !iiex->fLoadFlag )

      qmemcpy(iiex, imeinfoex, sizeof(tagIMEINFOEX));

    ...

补丁后在 if 语句中增加了判断 spklList 成员是否为 NULL 的条件.

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功