CTF(Pwn)32位文件 和 64 文件 的 差异

本文探讨了32位和64位系统在地址大小、函数调用以及格式化字符串漏洞利用方面的区别。32位系统地址空间为4GB,64位则扩大到128GB。在函数调用中,64位的参数传递方式不同于32位。在利用格式化字符串漏洞时,64位系统需要注意'00'截断问题,而32位利用相对简单。了解这些差异对于安全研究和exploit开发至关重要。
摘要由CSDN通过智能技术生成

一. 地址方面字节上的差异

32位是cpu一次处理的位数,324字节,相当于地址的宽度,即sizeof(*p);

虚拟地址大小为4G,即有232次方个地址,320321个地址;


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210323094254825.png)


64位是cpu一次处理的位数,648字节,相当于地址的宽度,即sizeof(*p);

虚拟地址大小为128G,即有264次方个地址,640641个地址;

在写Exp的时候: 64位
在这里插入图片描述
32位:
在这里插入图片描述

————————————————

二.函数调用方面的差异

在这里插入图片描述

由于函数调用这方面的差异:

在写 ExP,payload的时候:

32 位: p32(system)+p32(bin_sh)

64 位: p64(rdi)+p64(bin_sh)+p64(system)

出现栈劫持的时候 p(binsh)在前面

三.格式化漏洞利用方面的差异

64位的格式化字符串漏洞,它跟32位有挺大区别的,要注意‘00’的截断,不可以像32位那样一步修改到位,它一次只可修改2字节。
在这里插入图片描述出现截断这种情况时,我们可以根据情况更改偏移量,或者填充字符来克服;

而32位

相比64位利用起来就很简单;

32位的 payload = p32(泄露地址) + %偏移$x 来构建

类似payload=p32(printf_got)+"%6$s"

64位

payload=“aa%9$nAAA”+p64(judge)

64位文件

为了字符串不被截断,我们只能将地址给放在字符串的后面了

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值