小伟 2008-7-28 11:35
暴风影音2008Beta1 最新远程溢出 0day 分析
[size=3][color=darkslategray]声明:纯技术研究,禁止将本文相关代码非法用途!后果自负![/color][/size][size=3][color=darkslategray] 下载地址: [url]http://dl.baofeng.com/storm3/storm2008-beta1.exe[/url][/color][/size]
[size=3][color=darkslategray] 一、漏洞分析[/color][/size]
[size=3][color=darkslategray] 今天下午帮同事查找一个[/color][/size][size=3][color=darkslategray]软件[/color][/size][size=3][color=darkslategray]和新版本暴风兼容性的问题,发现其新增了新的模块,回来就试了一下,运气真好被我到一个远程[/color][/size][size=3][color=darkslategray]溢出[/color][/size][size=3][color=darkslategray]。[/color][/size]
[size=3][color=darkslategray] 问题模块是暴风的[/color][/size][size=3][color=darkslategray]视频[/color][/size][size=3][color=darkslategray]加速程序,暴风的[/color][/size][size=3][color=darkslategray]视频[/color][/size][size=3][color=darkslategray]加速功能是通过设置浏览器代理实现的,这个代理服务器(HttpServer.dll)会在本机开 8089 端口监听处理请求,因为此端口绑定的地址不是localhost, 从而导致此[/color][/size][size=3][color=darkslategray]溢出[/color][/size][size=3][color=darkslategray]可以被远程利用。[/color][/size]
[size=3][color=darkslategray] 使用 od 打开暴风安装目录下的 box/Stline.exe,这个程序记[/color][/size][size=3][color=darkslategray]视频[/color][/size][size=3][color=darkslategray]加速模块的主程序文件,按下 F9 让 Stline.exe 跑起来,然后打开 IE 在地址栏中输入 [url]http://baidu.com/111[/url]…11.flv (长度必须大于1000) 回车。Od 在 stormtra.dll因为异常暂停下来,如下图:[/color][/size]
[size=3][color=darkslategray] [/color][/size][size=3][color=darkslategray][img=460,361]http://hack.77169.com/UploadFiles_8057/200807/20080724110808221.jpg[/img][/color][/size][size=3][color=darkslategray][/color][/size]
[size=3][color=darkslategray] Ebx = 堆栈的栈顶,dx 是我们输入的 1, 把堆栈窗口拉到最高处,看到堆栈中填满了我们的输入的 URL 拷贝。使用 ida 打开这个 stormtra.dll 进行上下文分析,如下图:[/color][/size]
[size=3][color=darkslategray] [/color][/size][size=3][color=darkslategray][img=483,178]http://hack.77169.com/UploadFiles_8057/200807/20080724110808309.jpg[/img][/color][/size][size=3][color=darkslategray][/color][/size]
[size=3][color=darkslategray] 发生异常的函数是在 unknown_libname_98 里,而 unknown_libname_98是 _vscan_fn 的回调,通过sub_1003AE2C 参数判断这个是正则表达式 search 函数,[/color][/size][size=3][color=darkslategray]溢出[/color][/size][size=3][color=darkslategray]正是在这个函数里面发生,具体为什么这个 search 过程发生[/color][/size][size=3][color=darkslategray]溢出[/color][/size][size=3][color=darkslategray]暂时可以不用管。[/color][/size]
[size=3][color=darkslategray] 然后在 od 中 shift+f8 忽略异常,接着od 再次断下,如下图,这时eip = 0×00310031, 这是因为[/color][/size][size=3][color=darkslategray]溢出[/color][/size][size=3][color=darkslategray]后,操作系统从堆栈取异常处理函数,但是堆栈中被填满了我们的输入。[/color][/size]
[size=3][color=darkslategray] [/color][/size][size=3][color=darkslategray][img=500,384]http://hack.77169.com/UploadFiles_8057/200807/20080724110808391.jpg[/img][/color][/size][size=3][color=darkslategray][/color][/size]
[size=3][color=darkslategray] 到这里已近可以看到我们的输入成功控制了 eip,那我们离成功也更进了一步了。[/color][/size]
[size=3][color=darkslategray] 二、编写 shellcode[/color][/size]
[size=3][color=darkslategray] 在 od 中注意我们的输入显示的 unicode 串,以前没有搞过此类的溢出,只知道比 ascii 麻烦很多,请教了123 大牛,他给我了一个同类溢出程序的 webdav (参考四),试着改了一下,但是不打算继续放相关代码了,有兴趣自己调吧:)。[/color][/size]
[size=3][color=darkslategray] 三、参考资料[/color][/size]
[size=3][color=darkslategray] Webdav 远程溢出漏洞分析[url]http://www.xfocus.net/articles/200303/500.html[/url][/color][/size]