首页
社区
课程
招聘
[旧帖] 堆栈溢出利用的一点疑惑 0.00雪花
发表于: 2013-7-12 13:13 7227

[旧帖] 堆栈溢出利用的一点疑惑 0.00雪花

2013-7-12 13:13
7227
char buffer[8] 第20字节为返回地址 多出来的8个字节是什么

求解

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
你讲的是http://www.pediy.com/kssd/pediy09/pediy09-346.htm这篇?
2013-7-12 13:30
0
雪    币: 1121
活跃值: (722)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=小猪怕怕;1198176]char buffer[8] 第20字节为返回地址 多出来的8个字节是什么

求解[/QUOTE]

ret的时候要释放局部变量,多出来的8个字节,有没有其他的局部变量?我猜是这样吧。
2013-7-12 16:21
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你用od看下汇编代码就清楚了。
2013-7-24 22:20
0
雪    币: 55
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你说的很模糊我只能猜一下,这个函数应该是定义了两个量,第一个是int,第二个是char数组,大小为8。
如果是这样的话,那么在vc6下,那个整数会被放在ebp减0x4的位置上,数组开头第一个的位置就从這里再往前倒8个,就是ebp减0xc。从数组开头开始往后数20个,那是ebp+0x7。ebp+4到ebp+7这4个字节存放的就是返回地址,由于地址的高位在大地址,因此地址开头会放在ebp+7,举例地址是0x12 34 56 78那么内存里放的就是78 56 34 12
2013-7-26 18:08
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
6
↓esp
↓eip
↓eip=jmp esp
codeshell 利用就是溢出部分来跳转到自己恶意构造的代码段
2013-7-26 18:20
0
雪    币: 180
活跃值: (80)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
应该还有其他变量.
2013-8-6 19:54
0
雪    币: 62
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
看看函数入口 应该多出两个push使得retn多返回了
2013-8-8 18:42
0
雪    币: 3
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你说的太不清楚了,栈溢出就是为了覆盖函数的返回地址,函数的调用栈是这样的
----------
返回地址
ebp             ----->ebp
局部变量
------------
栈溢出就是要淹没返回地址,但是如果你在VS2003之后的版本实验的话,记得要关闭GS选项。
2013-8-30 23:38
0
雪    币: 28
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
0000000000000000000000000000000000000000000
2013-8-31 18:17
0
游客
登录 | 注册 方可回帖
返回
//