zoukankan      html  css  js  c++  java
  • 简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞

     

      这是别人给我发的,让我分析一下,看能否写出exp。只怪自己水平不够,最后没能写出exp,以下为自己的分析思路

      环境为win10 pro x64 英文版(10.0.16299) 默认安全配置

    一、漏洞分析

      此漏洞是由于LeviStudioU在处理.G_Picture.xml文件的szFilename时没有对其长度进行检查,导致调用后续的函数MSVCR90!wcscpy时发生缓冲区溢出,从而引发SEH异常。

      首先打开LeviStudioU,附加windbg,到达漏洞现场

          

      此时引用了无效指针,再次执行到达可控位置

      通过KB回溯堆栈调用,从0x0019d3a8位置的ntdll!KiUserExceptionDispatcher+0x26可判断调用了SEH程序

      通过分析0x0019d860位置的Hmi_BmpLib_Dll!GetXmlBmpInfoByPos+0x24c,可判断上层函数为Hmi_BmpLib_Dll!GetXmlBmpInfoByPos;重新启动程序,用windbg中断Hmi_BmpLib_Dll!GetXmlBmpInfoByPos位置

      

      单步运行到0x03042258位置,出现G_Picture.xml的文件路径。

      

      其中eax为漏洞文件G_Picture.xml的路径。

      

      一直单步运行,直到0x0304239e位置,此时程序准备清空缓冲区。

      

      执行完0x30423ac后,此时会调用memset函数将缓冲区置为0,缓冲区的首地址为ecx=0x0019d426,空间大小为0x206h,存储内容为0。

      继续执行到0x030423b4处,可以看到szFilename变量。

      

      从0x030423b4至0x030423de处,这个过程会从G_Picture.xml文件中取得szFilename的值,并且值转换为unicode字符,即x61x61x61………变为x0061x0061x0061………。

      

      接下来会调用MSVCR90!wcscpy函数。进入此函数,查看esp的值,其中0x19d424为目的地址,0x058fb988为源地址。

      

      

      此时重点关注缓冲区地址处0x0019d426的内容值为0

      

      

      继续执行到0x683b7130处,如下图所示会将源参数src的第一个值x0061拷贝到缓冲区0x0019d426处。

      

      查看缓冲区位置0x0019d426的值开始变为x00000061

      以此类推,会将源地址内容逐个拷贝到缓冲区0x0019d426处

      

      执行到漏洞触发位置,因为是seh异常,用!exchain查看异常,可知next SEH的地址为0x0019d854,seh的位置为0x0019d858。

      此时改变szFilename的值,将得出:

      SEH在第539字节后被覆盖,

      Next SHE在537个字节后被覆盖(因为字符要被转换为unicode格式)

    二、漏洞利用

      根据以上漏洞分析可大致画出如下的栈分布图

      思路1:将seh覆盖为pop pop ret(而且要找到类似0x00nn00mm的地址),然后将next seh改为jmp xx,最后在seh后添加shellcode,但最后因没有发现/safeseh OFF的模块而放弃。

      思路2:利用加载模块之外的地址,找到pop pop ret、call/jmp dword ptr[ebp + xx]或call/jmp dword ptr[esp + xx]的地址,而且格式要为0x00nn00mm,经过查找,未发现符合0x00nn00mm的地址。

  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/st404/p/9783207.html
Copyright © 2011-2022 走看看