16.04에서 fake chunk를 만들 수 없을때, fastbin range에서 size check를 우회하기 위해서 fake chunk를 찾아야 한다.
import gdb
import struct
addr = 0x602000
length = 0x50
bp = 0x400e9c
file_name = './secretgarden'
gdb.execute("file %s"%file_name)
gdb.execute("b * %s"%hex(bp))
gdb.execute("r")
inf = gdb.inferiors()[0]
m = inf.read_memory(addr,length).tolist()
for i in range(8):
cur = i
while(cur < length-7):
val = b''
for j in range(8):
val += m[cur + j]
val = struct.unpack('<Q',(val))[0]
sz = (val & 0x00000000ffffffff)
if(0x20 <=sz <= 0x80):
print("found sz : ",hex(sz))
print("addr : "+hex(addr+cur-0x8))
cur += 8
자동으로 찾아줄 수 있다.
https://github.com/msh1307/fastbin_fakechunk_finder
github에도 올라가있다.
gdb -q -x ./script.py
로 실행시킬 수 있다.