优看PDF在线阅读控件0day漏洞.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
优看PDF在线阅读控件优看电子科技有限公司优看电子科技有限公司优看PDF在线阅读控件PDFView.cab”的文件就是核心控件,而“PDFTest.html”则是一个由官方提供的测试网页文件。在本地计算机上利用ASP本地测试工具搭建了一个Web测试环境,用记事本程序打开“PDFTest.html”,我们需要修改其中的一些参数,主要有以下几个地方: object id=YCanPDF classid=clsid:474C1AB2-EFA5-4A19-9267-BA38B685C74A codebase=/pdfview.cab#version=3,4,0,0 width = 780 height = 500 function OpenURL() { YCanPDF.SetRCURL(/rc/SC_TC_JP_KR.CAB,0);// 加载字体资源,只支持绝对路径 var n=YCanPDF.SetURL(/YCanPDF PDFView OCX 接口文档.pdf,);// 打开网络的PDF文件 } 上述代码标红的地方,原本的网址是指向优看官方网站的,这里因测试需要,我们暂时修改为了本地计算机的回环地址,即。 将优看PDF在线阅读控件PDFTest.html”文件,此刻会出现一个安装控件的提示,如图1所示。 图1 直接点击“安装”按钮,系统会自动注册优看PDF在线阅读控件PDF在线阅读控件long SetFileName(LPCTSTR filename, LPCTSTR password, long lParams),这个外部接口中,第一个参数filename就代表着要被打开的PDF文件名称。之所以我们非常关心这些参数的类型和意义,是想要测试发现优看PDF在线阅读控件PDF在线阅读控件long SetURL(LPCTSTR szFilePath, LPCTSTR szPassword);”这个用来打开网络上PDF文件的外部接口传递一个超长的文件名参数szFilePath,在测试中,浏览器就会给出下载失败的提示,如图3所示。 图3 看了上面的测试结果,我们似乎不指望能够发现优看PDF在线阅读控件PDF在线阅读控件PDF在线阅读控件long SearchStr(LPCTSTR strKey, long bCaseSensitive, long bAllPages)。该函数的作用是用来在打开的PDF文件中搜索指定的字符串。如果单独调用这个函数,并传递给它一个超长字符串,测试代码这样写:var a=Array(60000);YCanPDF.SearchStr(a,0,0);。浏览器只会提示出“没找到”,如图4所示。 图4 出现这样的结果原因很简单,主要是由于当前没有打开任何PDF文件,搜索函数无法正常运行。现在,我们修改一下代码,首先利用“long SetURL(LPCTSTR szFilePath, LPCTSTR szPassword);”外部接口打开网络上的某个PDF文件,然后再调用“long SearchStr(LPCTSTR strKey, long bCaseSensitive, long bAllPages)”外部接口查找一个过长字符串,看一看会有什么结果。具体测试部分代码为: function OpenURL() { var a=Array(600); var n=YCanPDF.SetURL(/YCanPDF PDFView OCX 接口文档.pdf,);// 打开网络的PDF文件 YCanPDF.SearchStr(a,0,0); } 这一次,使用浏览器打开修改后的测试网页文件,点击“打开网络”按钮,我们发现了新的结果,如图5所示。 图5 终于看到了一个出错的画面,图5中的“0x2c2c2c2c”这个内存地址显然来自于我们测试代码中的变量a。从出错提示,我们推断变量a覆盖了程序一个关键的内存地址,造成了程序发生读取内存地址失败的错误。要想知道更加细节的原因,我们可以使用OllyDBG程序来进行调试,如图6所示。 图6 从图6中,我们看到在出错的时候,ECX寄存器被变量a所覆盖,程序运行到“mov edx,dword ptr[ecx]”这条指令时,由于无法读取ECX寄存器所指向的内存地址,从而发生了读取错误。但是,此刻,我们发现在出错指令的下方,第三行的位置,有一条指令“call eax”,如果我们可以控制EAX寄存器,我们就可以执行任意代码了。而在这条指令之上,我们可以发现EAX寄存器的值取决于EDX寄存器,而EDX寄存器的值就来自于前面被我们覆盖的ECX寄存器!至此,我们终于明白了,EAX寄

文档评论(0)

guanpanxiecheng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档