某工业组态软件整数溢出漏洞(CVE-2018-7471)分析

0x1 漏洞信息

CNVD-ID:CNVD-2018-00995

CVE ID:CVE-2018-7471

某公司工业组态软件存在整数溢出漏洞,该漏洞是由于stgopenstorage读取失败,返回的错误代码超出int在32位系统中的范围,攻击者可利用该漏洞执行任意代码。

补丁信息:http://www.kingview.com/news_info.php?num=1000656

漏洞发布:http://www.cnvd.org.cn/flaw/show/CNVD-2018-00995

0x2 OpenStorage函数说明

OpenStorage加载结构化存储的文件,函数返回HRESULT类型变量。函数原型如下:

返回的结果为长整形:当函数读取正常时,返回值为0,读取失败,返回长整型整数

函数说明参考MSDN:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380024(v=vs.85).aspx.aspx)

0x3查找漏洞函数

根据补丁对比,将漏洞组件确定为Touchvewocx.ocx。经分析,该模块有五个函数有变化,其中三个进行了修改,逐一进行分析。

3.1 0x100223C0

CViewManager::LoadDocInfor(CViewManager this,CPicDocument pd)

放大来看,主要是增加0x10022780部分的判断程序块。

3.1.1 补丁前

var_810(v25)是一个值为负数的int32(函数调用错误是,返回一个负值,其高位为1)变量,系统为64位时,负数扩展高位补F。

3.1.2 补丁后

返回值为dword 类型,返回若不为S_OK,返回值转换为Cstring(whar_t)后,进行异常处理。

3.2 0x10039530

修复后:

将字符串改为wchar

3.3 0x10151880

修补前:

修补后:

0x4 脆弱ActiveX接口确定

Touchvewocx的接口如下:

函数调用路径:

可以基本确定漏洞ActiveX接口为SetProjectPath

0x5 结论

ActiveX组件Touchvewocx.ocx接口函数SetProjectPath(string*)调用OpenStorage( )读取失败是,异常返回长整型(32位系统32位int,64位系统,64位int),函数给返回值分配dword型变量,在32位系统中刚好满足,64位系统中直接截断,造成异常。

*本文原创作者:flypuma,转载请注明来自FreeBuf.COM

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

oracle:wm_concat函数与oracle版本

oracle中有一个看似很NB的内置函数wm_concat,可以方便的实现“行转列”功能(相关用法,大家自行搜索一下,能找到很多资料) 今天偶然发现一个问题: ...

27860
来自专栏程序员的知识天地

Python牛B操作:一行代码减少一半内存占用

在项目制作中,我们必须要存储和处理一个相当大的动态列表。测试人员在测试过程中,抱怨内存不足。下面介绍一个简单的方法,通过添加一行代码来解决这个问题。

16220
来自专栏xingoo, 一个梦想做发明家的程序员

《深入浅出Nodejs》—— 读后总结

这一个月过去了三分之二,加上之前看过这本书三分之一,这才算是看完。 虽然看完一遍,但是这本书内容很深,以后肯定是还要继续翻阅的..... 什么是Node...

20050
来自专栏java一日一条

java提高篇之异常(上)

在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失。同样的道理,计算机的世界也是不完美的,...

11120
来自专栏青玉伏案

设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)

今天是五.四青年节,祝大家节日快乐。看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火。这两道菜大部分人都应该吃过,特别是醋溜土豆丝,...

18190
来自专栏有趣的django

1.python简介

简介 1、python语言介绍 python的创始人:Guido Van Rossum 2、python是一门什么样的语言 编程语言主要从以下几个角度进行分类:...

41150
来自专栏JetpropelledSnake

Linux学习笔记之Redis中5种数据结构的使用场景介绍

原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标是吃透 redis 的数据结构。我们都知...

12710
来自专栏java一日一条

Java异常有多慢?

实际上,真正要讨论的问题并不是,“相对‘那些不会发生错误的代码’来说,‘那些以异常形式上报的错误’会有多慢?”,因为你可能也认同“已接受的回答”。相反,真正的问...

35520
来自专栏佳爷的后花媛

h文件和c文件的区别include本身只是一个简单的文件包含预处理命令,即为把include的后面文件放到这条命令这里,除此之外,没有其它的用处(至少我也样认为).

其实在H文件里写函数也无所谓,只是不符合习惯而已。只要按照以上的格式写,一个H文件添加多少次都无所谓,

24320
来自专栏北京马哥教育

Python入门教程:超详细1小时学会Python

1.Hello world 安装完Python之后,打开IDLE(Python GUI) ,该程序是Python语言解释器,你写的语句能够立即运行。 我们写下...

46250

扫码关注云+社区

领取腾讯云代金券