返回信息流大家好,近来学习buffer overflow,读了一些文章,主要讲了经典的通过直接覆盖EIP溢出、覆盖SEH Chain溢出以及一些定位shellcode的跳转方式。在此我不打算列举基本原理,我主要通过一个具体示例来展示一下整个exploit过程,由于是刚刚学习,所以肯定会有不足之处,希望各位不吝指正。
安全起见,我先声明一下:本帖涉及的内容只作为学习的目的,任何因为滥用本帖内容而导致对个人或者企业组织造成危害,作者并不承担任何责任,特此申明一下。
好,闲话休提,进入正题:
目标程序:mp3-millennium(见附件)
溢出点:读取.m3u文件
本机测试平台:Windows xp
调试器:OllyDbg v1.10
首先,生成畸形m3u文件:
code:
使用OllyDbg打开目标程序,载入born2love.m3u,使用OllyDbg查看SEH chain如图,表明SEH chain被覆盖:
下面,找到确切的覆盖位置,再次我使用Metasploit的两个脚本pattern_create.rb和pattern_offset.rb。使用方法如下:
首先Windows下命令行运行:ruby pattern_create.rb 5000
将生成的5000字符串代替perl脚本中的5000个"A",再次使用OllyDbg运行程序,看看SEH Chain中被覆盖的SEH handler为何值:
同样,Windows命令行下运行:ruby pattern_offset.rb 0x46396746 5000
根据SEH结构,next SEH位于SEH handler之前,所以所得值应该减4,为4103,进一步修改脚本构造畸形m3u文件测试:
与原意相符合。下一步就是找到"pop pop ret"结构地址,首先使用OllyDbg插件safeSEH查看,找到safeSEH选项为off的dll,在此我们选用xaudio.dll,使用OllyDbg找到符合"pop pop ret"结构的指令地址:
0x10010328
将其写入脚本,同时替换上有效的shellcode,如图:
大家可以看到$nSEH的值不是常规的"\xeb\x1e\x90\x90",这是因为目标程序对其进行过滤了,所以我进行了变化。
最后,直接运行程序,载入born2love.m3u
Game over!
附件(1.8MB) 3c35dc3d6067fcc50f118500eb116c0b-millennium.exe
这是一条镜像帖。来源:北邮人论坛 / security / #28944同步于 2010/7/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
一个SEH溢出示例~
xsxtxt
2010/7/12镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
xsxtxt有空你可以找我要个大果粒。以鼓励你为信息安全版做出的贡献。
其他同学,也可以就下面的话题单独发帖:
1、关于SEH、溢出……
2、关于Metasploit的使用……
我稍微看了下lz的溢出过程,发现处理过程把软件本身当做黑盒处理了,这也是为啥用了Metasploit的两个脚本pattern_create.rb和pattern_offset.rb这个两个脚本的原因。
但感觉这样的利用有所限制,既然研究溢出,最好是跟踪到软件内部处理m3u文件缓冲区的代码处,直接调试,然后看看堆栈的变化,这样就能直接确定SEH的地方了。
很感谢你指出来,下次我就按照你的说法好好跟踪研究一下。昨天写的时候有点晚,想节约一下时间,就偷懒用了pattern_create.rb和pattern_offset.rb,呵呵~
【 在 jmpesp 的大作中提到: 】
: 我稍微看了下lz的溢出过程,发现处理过程把软件本身当做黑盒处理了,这也是为啥用了Metasploit的两个脚本pattern_create.rb和pattern_offset.rb这个两个脚本的原因。
: 但感觉这样的利用有所限制,既然研究溢出,最好是跟踪到软件内部处理m3u文件缓冲区的代码处,直接调试,然后看看堆栈的变化,这样就能直接确定SEH的地方了。
: --
: ...................