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