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