rop 64位程式中引數傳遞及棧溢位利用

2021-10-10 19:55:46 字數 734 閱讀 7233

32位程式引數傳遞是直接彈出棧頂元素作為引數,而64位程式通過edi暫存器傳參;因此在棧溢位漏洞利用的步驟為:

找到「pop edi\rdi;ret;」語句、system函式和「bin/sh」字串的位址,輸入資料:【填滿棧空間的資料+覆蓋edb的資料(32位大小為4h,64位大小為8h)+「pop edi\rdi;ret;」語句的位址+「bin/sh」字串的位址+system函式的位址】。

具體執行過程:

子函式呼叫結束時,通過返回位址執行「pop edi\rdi;ret;」語句,將「bin/sh」字串的位址出棧到edi\rdi暫存器作為引數,通過「pop edi\rdi;ret;」語句的「ret」指令及棧頂的system函式位址執行system函式,將edi\rdi暫存器中的「bin/sh」字串的位址所在的「bin/sh」字串作為引數傳給system函式 ,執行system(「bin/sh」)語句。

rop即返回導向程式設計,其原理是利用動態鏈結庫以及已有的指令中接「ret」指令的指令,利用乙個棧,在棧中存入各個利用指令的位址並將其按照想要的執行流程順序存入棧中,在執行完第乙個指令後因為後接「ret」指令,所以會將下一條想要執行的指令的位址作為返回位址出棧繼續執行,通過每一條指令後的「ret」指令以及棧中安排好的位址可以實現控制想執行的指令的執行流程。

ps:像rop是某個暫存器這種世界機密我是不會說的(/滑稽)

64位windows中執行託管程式

在64位 windows 上存在著 32位和 64位兩個版本的 clr。本文介紹如何通過 clr自帶的工具 ldr64.exe corflags.exe 指定託管程式 寄宿 的 clr版本,並且和大家分享筆者研究這兩個工具運作機理的過程以及使用的 秘密 procmon dumpbin 在過去的一年中...

網頁中顯示模態視窗及引數傳遞

基本介紹 showmodaldialog ie 4 支援 showmodelessdialog ie 5 支援 window.showmodaldialog 方法用來建立乙個顯示html內容的模態對話方塊。window.showmodelessdialog 方法用來建立乙個顯示html內容的非模態對...

Python中的函式(def)及引數傳遞

抽象 函式 1 callable 判斷乙個物件是否可以被呼叫 x 1 def y return none callable y y可以被呼叫 callable x x不可以被呼叫 2 當函式沒有return時 函式將預設返回none 3 放在函式開頭的字串成為文件字串 如下 def square x...