首页
社区
课程
招聘
ShellCode没有正确执行,内容在堆栈中变了,请高手指点
发表于: 2014-11-25 16:12 4226

ShellCode没有正确执行,内容在堆栈中变了,请高手指点

2014-11-25 16:12
4226
最近发现了某个软件的一个缓冲区溢出漏洞,按照绿皮书上的思路,可以成功溢出(缓冲区长度为155,接着的4个字节为EIP,缓冲区的入口地址为0x0012E498,因此直接利用缓冲区长度,放入弹框的shellcode,EIP的位置设为缓冲区入口地址,shellcode成功执行,弹出框框)。

现在遇到的问题是:我想让其弹出计算器来,使用看雪上那个经典弹出计算器的shellcode(144字节),按照上面类似的原理构造,最终计算器并没有弹出来。使用windbg查看堆栈内容,发现与实际shellcode不一样:原来shellcode中为 “FC 30“ 的地方,在堆栈中成了3F,接着后边又有一处不同,详细如下图所示。

请问各位前辈,为什么会出现这种情况?该如何解决?万分感谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 215
活跃值: (90)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
shellcode解码了,在shellcode前加sub,esp xxxx估计可以解决。
2014-11-25 17:08
0
雪    币: 235
活跃值: (214)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
谢谢回复。试过这个办法,进入shellcode前先抬高栈顶,还是不管用。。。。
2014-11-25 17:13
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
字符串问题。很多无法显示的code在文本框会变成问号“0x3f”,复制粘贴导致代码出错。写个转换器把code转换成ASCII码,然后在内存中还原执行
2014-11-26 08:37
0
雪    币: 235
活跃值: (214)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
这个不是复制粘贴的哈,就是ASCII码(右边那个图就是原版shellcode),只是到内存执行了,windbg dump堆栈看到对应位置成了0x3f。
2014-11-26 09:09
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
给shellcode自建个栈结构,大概12Byte就够用了当然,你code内要精打细算才行
2014-11-26 09:46
0
雪    币: 3171
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
7
你方便的话把你测试代码发出来让大家跑下 看看问题何处,现在看数据头疼、眼花。。。还是直接调试来得快
2014-11-28 23:00
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
8
原来shellcode中为 “FC 30“ 的地方,在堆栈中成了3F---->

看编码 ,如果是 可显字符,到堆栈的实际地方会自动变化成ansic 表示的范围...
2014-12-4 08:27
0
雪    币: 5
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你抬高的栈顶不够吧
2014-12-4 09:54
0
雪    币: 235
活跃值: (214)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
感谢大家的回复!!换了个方法解决了,用了一个只有75字节弹计算器的shellcode搞定的
2014-12-5 10:37
0
雪    币: 1555
活跃值: (3103)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
11
转码试试,要不就是,软件用了,转大小写功能
2015-1-10 11:29
0
雪    币: 64
活跃值: (55)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
你的特殊字符被过滤了,重新选择xor key,xor加密shellcode不要出现0x30就解决问题了。
2015-3-3 14:17
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
13
你的shellcode的某些编码超出了ascii的表示范围自动转为了 ? ,就变成了内存中的0x3f 了使用纯字符的shellcode .
2015-4-2 11:47
0
游客
登录 | 注册 方可回帖
返回
//