Windows平臺的rop exp編寫

Ox9A82發表於2016-08-10

摘抄自看雪

Windows的ROP與Linux的ROP並不相同,其實Linux下的應該叫做是ret2libc等等。Windows的ROP有明確的執行目標,比如開闢可執行記憶體然後複製shellcode,比如釋放可執行執行檔案然後執行等等,總之要依賴於一些關鍵的Windows API來進行。

進行ROP的目的:繞過DEP保護

ROP gadgets:是以 ret 指令結尾的連續的指令

查詢gadgets的演算法:

  1. 搜尋所有的ret指令
  2. 向前遍歷,判斷ret的前幾個位元組是否為合法指令。保留能構成有效指令的最大位元組數20 bytes。記錄這些指令序列。

常見的功能性gadgets:

  • 賦值暫存器:如:pop eax;ret;
  • 從記憶體讀:如:mov ecx,[eax];ret;
  • 向記憶體寫:如:mov [eax],ecx;ret;
  • 數學運算:如:add  eax,0x0b;ret;
  • 系統呼叫:如:int 0x80;ret;

避免使用的gadgets:

  • 用包含leave的 gadgets,會導致棧禎不可控
  • 用包含pop ebp的 gadgets,會導致棧禎不可控

 

相關文章