接着上一篇的看雪Exploit me试题。
这道题给出了一个ActiveX的DLL,挖掘这个DLL中的漏洞。
由于从来没有接触过ActiveX的Fuzzing,所以找了一些文章来看。自己动手试验了一下。
根据提示,使用了Comraider来作为Fuzzing工具。这个工具比较老了,找了好久才找到下载地址
http://down.51cto.com/data/1100082
根据出题者的意图,应该是先对这个控件进行Fuzzing,然后根据结果进行分析得出漏洞。最后要这个漏洞写出poc,使用堆喷来完成。
实验环境是ie6+xp sp3
根据Fuzzing的结果可知,LoadPage存在漏洞,看了一下测试的payload,是这样的。
根据256个A,猜想是个栈溢出。
用od调试这个ActiveX控件,这里费了一些时间。因为从来没有调试过ActiveX控件,不知道怎么定位那些函数,因为那些并不是导出函数。后来发现,原来oleaut32.dll的
DispCallFunc函数会调用这个ActiveX中的函数,也就是只要断在DispCalFunc就可以了。
进入之后发现程序逻辑很复杂,有很多子函数调用,逆向分析一时找不到头绪。于是想到了用OD自动单步执行,来定位是执行到哪一条指令时导致的异常。结果如图
可以看到是4573F25处的retn指令导致的异常,此时栈中的返回地址已被覆盖,导致了retn到不可访问的地址,导致了异常。
用ida找到这一段程序后可以发现,这是一个strcmp的误用导致的问题。
rep movsd导致了漏洞的发生。
300个字节的数据刚好可以淹没返回地址。