CTF(Pwn)32位文件 和 64 文件 的 差异
生活随笔
收集整理的这篇文章主要介绍了
CTF(Pwn)32位文件 和 64 文件 的 差异
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
一. 地址方面字节上的差异
32位是cpu一次处理的位数,即32位4字节,相当于地址的宽度,即sizeof(*p);虚拟地址大小为4G,即有2的32次方个地址,从32个0到32个1个地址;64位是cpu一次处理的位数,即64位8字节,相当于地址的宽度,即sizeof(*p);虚拟地址大小为128G,即有2的64次方个地址,从64个0到64个1个地址;在写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位文件
为了字符串不被截断,我们只能将地址给放在字符串的后面了
总结
以上是生活随笔为你收集整理的CTF(Pwn)32位文件 和 64 文件 的 差异的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: CTF(Pwn) Rop + ret2
- 下一篇: 攻防世界(pwn) level3