此题本来能edit两次,直接unlink就能get shell。打过去后发现不对,经手工测试发现题目可能改了,询问后果然如此。
题目漏洞点在off-by-one,限制了堆地址上限,申请堆的大小固定为0x28,edit只能一次,默认不能show。主要做法是通过off-by-one使heap overlap,然后就可能unlink、double free等,从而修改bss,突破各种限制,最后更改堆指针,通过edit修改__free_hook为system地址并get shell。对了,此题Libc为2.27版本,有tcache,一直没做有tcache的题,临时搞了环境,还找队友帮了忙。
__free_hook
system
最终exp如下:
这次比赛,使用libc2.27服务器上的shell似乎作了改动,直接打印flag然后就退出了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课