首页
社区
课程
招聘
[讨论]我在本地调试堆溢出题目时候第一个chunk地址的起始地址低字节都是从0x290开始的而不是从正常的0x000,这导致我无法本地调试堆溢出double free操作
发表于: 2021-4-17 08:46 7161

[讨论]我在本地调试堆溢出题目时候第一个chunk地址的起始地址低字节都是从0x290开始的而不是从正常的0x000,这导致我无法本地调试堆溢出double free操作

2021-4-17 08:46
7161

问题:如题目,详细情况见下图

望经历过这种情况的大佬不吝赐教,为什么会出现这种情况,如何解决?
谢谢。


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

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
我补充一下,因为起始地址地地址从0x290开始,无法通过上面代码中第48步溢出去下盖下一chunk的fd指针地址去伪造fake chunk了
2021-4-19 10:14
0
雪    币: 449
活跃值: (262)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这种情况我碰到过,有许多原因,比如glibc2.26版本后的Tcache机制,会在堆上分配一大块内存,比如输入输出也会在堆上开辟内存。你这种2.23版本的很大可能是输入输出函数分配的内存,特别是scanf函数。有方法可以确定是什么原因开辟的内存,在main函数打断点,然后运行程序,检查堆是不是还没有分配,然后在_int_malloc函数打断点,继续运行程序,然后查看调用栈就知道是谁分配的内存了。
2021-4-19 17:36
0
雪    币: 6737
活跃值: (3490)
能力值: ( LV3,RANK:31 )
在线值:
发帖
回帖
粉丝
4
0x291 基本上可以确定是tcache,换一个低版本的系统(16.04)或者libc(2.23)即可
2021-4-19 20:07
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
感谢您的回答
2021-4-24 20:55
0
雪    币: 4168
活跃值: (15932)
能力值: ( LV9,RANK:710 )
在线值:
发帖
回帖
粉丝
6
堆上前0x290是tcache pthread的位置,储存的是tcache中chunk的信息。
2021-4-29 14:19
0
游客
登录 | 注册 方可回帖
返回
//