堆溢出

runwu2204 Lv6

主要是对tcache(用于存放free后的空闲堆块)进行对应的pwn

参考tcache运行实例[原创]tcache bin利用总结-Pwn-看雪-安全社区|安全招聘|kanxue.com

而任何堆块都呈现下面这种结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct chunk
{
size_t prev_size;
union
{
size_t size;//注意16字节对齐
union
{
int flag:3;
struct
{
bool PREV_INUSE:1;//如果前面一个chunk处于分配状态,那么此位为1。一般来说,堆中第一个被分配的内存块的 size 字段的 P 位都会被设置为 1,以便于防止访问前面的非法内存。当一个chunk 的size 的P位为0时,我们能通过 prev_size 字段来获取上一个 chunk 的大小以及地址。这也方便进行空闲chunk之间的合并
bool IS_MAPPED:1;//记录当前chunk是否是由mmap分配的
bool NON_MAIN_AREA:1;//记录当前 chunk 是否不属于主线程
};
};
};
char* data[size&0xFFFFFFF8];//只取高29位,这里开始存放数据,所以实际chunk地址需要减去16或者8
};

有下列三种攻击方式

UAF Example:

[NISACTF 2022]ezheap | NSSCTF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int __cdecl main(int argc, const char **argv, const char **envp)
{
char *command; // [esp+8h] [ebp-10h]
char *s; // [esp+Ch] [ebp-Ch]

setbuf(stdin, 0);
setbuf(stdout, 0);
s = (char *)malloc(0x16u);
command = (char *)malloc(0x16u);
puts("Input:");
gets(s);
system(command);
return 0;
}

chunk extend

[pwn]堆:fastbin attack详解-CSDN博客

  • 标题: 堆溢出
  • 作者: runwu2204
  • 创建于 : 2024-03-26 18:46:15
  • 更新于 : 2024-09-17 02:10:43
  • 链接: https://runwu2204.github.io/2024/03/26/Pwn/linux/heap/堆溢出/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
堆溢出