2024强网青少年
线上
heap
2.31的of by one,add free,show free菜单函数
add和edit都有末尾置零,show直接被截断,没办法泄露出libc
这题的难点也就是泄露出libc
解题思路:
先free7个堆块,前6个进入tcachebin,第7个会进入unsortdbin,之后堆块切割,将一个大堆块分为小堆块,并且留一部分堆块在unsortdbin中,这样每个小堆块中都有libc地址,但会被\x00截断,修改小堆块的size,将申请的小堆块合并,并且可以修改在unsotrdbin中的prsize,size
这样可以show出libc地址
之后malloc会报错,提前布置好堆块打of by one attack攻击free_hook,获取shell

1 | from pwn import* |
线下awdp
smart_home
攻击:
无限次fmt,字节限制为0x10
非栈上打指针跳转,攻击rbp+8,改为one_gadet,3退出
1 | from pwn import* |
防御:
找到fmt漏洞的汇编:
将call _printf改为call _puts:


youth_memory_album
攻击:
蜀道山mini_hook的弱化版,基本同样的打法,攻击tcachebin的指针区
1 | from pwn import* |
防御:

free函数内存在uaf漏洞

在en_frame段上抄汇编即可:

使用r8当介质,将chunklist[index]置零,最后跳转到call _free的下一段汇编
同时将call _free改为call en_frame该段地址

成功防御:
