PWN!棧遷移原理



棧遷移原理


主要用的就是利用 leave;ret; 這樣的 gadgets


假設,咱們有一個程序,存在棧溢出漏洞,咱們把內容覆蓋成了下面這樣子,固然此時 bss 段或者 data 段尚未內容,待會會經過 read 函數輸入:


而實際上在程序調用完成 call 返回的時候,就會有這樣的指令
mov esp,ebp 
pop ebp 
ret 


當咱們去執行的時候會出現這樣的狀況

首先是 mov esp,ebp 執行完之後變成了這個樣子:


而後 pop ebp 執行完後就是
別忘了,pop 指令是把棧頂的值彈到 指定的寄存器,也就是說 esp 會自動的減一個單位


這時候就到 ret 了,此時咱們能夠經過 read 函數來把內容輸入到 fake ebp1 的地址處
構造的內容主要是把 fake ebp1 處寫成 fake ebp2 的地址


read 函數執行完成之後程序返回到了 leave_ret,這樣就會在執行一遍上面說的那樣
首先是 mov esp,ebp 執行完成後效果以下:


而後是  pop ebp 執行完成後:


此時在執行  ret 命令,他就會執行咱們構造在 bss 段後者 data 段的那個函數


本文分享自微信公衆號 - 陳冠男的遊戲人生(CGN-115)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。微信

相關文章
相關標籤/搜索