资讯动态 news

客服


使用VC2017 IDA模拟复现CVE

发布于:2020-11-21 23:24 编辑:admin  

缓冲区溢出是一种十分遍及的缝隙,广泛存在于操作系统和各种应用软件中。经过缓冲区溢出进犯,能够完结履行非授权指令、履行歹意shellcode等高危进犯操作。

在过往的缓冲区缝隙运用事例中,CVE-2017-11882是我形象比较深也是觉得比较有意思的一个。进犯者只需给方针发送一个制作好的word文档而且这个文档被翻开即可完结进犯,够简略暴力。

这个缝隙居然躲藏10余年后才被发现,惊叹之余便有了一点小反思: 这样的“缝隙代码”作者倒底是怎么写出来的。

网上已经有许多关于11882的缝隙剖析、复现的文章,本文从别的一个视点来复现: 经过VC写一个小段程序,模仿展现这个缓冲区缝隙是怎么发作和运用的。

演示代码是两年前写的,想想仍是该配上篇文章,混点Star好春节。本文适合于开发新手阅览,需求一点根本的汇编和C根底,大牛请飘过…

CVE-2017-11882的运用进程扼要概述如下,详细剖析文章可查阅本文结尾相关网页

1.用Word翻开一个包括进犯代码的Doc文档
2.Word发动公式编辑器组件EQNEDT32.EXE
3.EQNEDT32.EXE在处理OLE目标的数据流时发作溢出,跳转 .text:00430C12 调用WinExec履行指令或shellcode

为模仿复现上述进程,编写结构2个小程序和1个txt文档,操作过程如下:

Word应用软件 - OF-GUI.exe EQNEDT32.EXE == OF-Demo.exe Doc文档 == txt文档

1.用OF-GUI.exe翻开txt文档
2.OF-GUI.exe发动OF-Demo.exe, 加载处理txt文档
3.OF-Demo.exe发作溢出后,履行txt中的指令

试验作用如下图:

演示代码下载: https://github.com/ekgg/Overflow-Demo-CVE-2017-11882

1、用IDA翻开EQNEDT32.EXE,找开调用WinExec的那个函数sub_430C00

2、按F5转为C代码,

3、 在Visual Studio中创立一个控制台程序工程,仿制上面这个sub_430C00函数,微调一下,去掉无关代码

UINT sub_430C00
 UINT result;
 char Buffer[256];
 result = WinExec;
 if  // 1 = SW_NORMAL
 FatalAppExit);
 return result;
 }

4、 编写一个典型的缓冲区溢出函数, 运用strcpy这个不安全复制函数,界说一个32字节的局部变量,传入超越32字节的字符串,就会发作溢出

void sub_ovdemo
 char stack_buf[32];//传入超越32字节的字符串,就会发作溢出
 strcpy; // Disable Security Check 
 DWORD bufsize = strlen;
 if 
 printf;
 else
 printf;
 }

5、 编译工程后,在strcpy行设置断点,发动调试

如上图直观可见,进入sub_ovdemo函数代码空间后,EBP=0X18FF04,