首頁
社區(qū)
課程
招聘
在組織payload時候需要調換下順序,沒太理解

師傅想請教一下第6步中6.ROPgadget --binary ./ret2syscall --only "pop|ret" | grep "ebx" | grep "ecx" | grep "edx",這里您提到了一句這里我們需要的是pop ebx ; pop ecx ; pop edx ; ret ,但是得到的結果反了是pop edx ; pop ecx ; pop ebx; ret,您說只不過順序和我們的不同,在組織payload時候需要調換下順序,這里您指的調整payload就是調整后面分別對應ebx ecx edx的參數一一對應即可,意思就是這里對ebx、ecx、edx他們三個pop順序是沒有要求的是嗎,我們只要保證這三項分別存入對應的參數/bin/sh、0、0,然后返回到int 0x80就可以了是嗎,我可以理解為假如這里我們尋找到的是pop ebx ; pop ecx ; pop edx ; ret,那么exp中payload應該改成

1
payload  =  'a'*offset  +  pop_eax  +  p32(0xb+  pop_edx_ecx_ebx  +    bin_sh  +  p32(0+  p32(0)    +  int_0x80

就可以了呢?

收藏
1條回答
Roger 2023-5-23 2023-5-23編輯

您仔細想一下就明白了,這里我們提前在棧里覆蓋了參數,這些參數是要pop到寄存器中的,而我們在棧中存放數據的時候,預想的彈棧順序是ebx,ecx,edx,而我們找到的代碼小片段只有edx,ecx,ebx,這就導致我們必須調整棧中參數的存放位置。

 

我們找到程序小片段中的ebx,ecx,edx的順序是無所謂的,這無非就是設置寄存器的順序不同而已,您在設計棧中的數據時,和指令片段的順序一致即可。64位需要使用寄存器+系統(tǒng)調用號來實現調用函數,32位程序使用棧傳參,64位程序使用寄存器傳參

回復 已采納
零基礎入門pwn
  參與學習     1808 人
  提問次數     36 個
《零基礎入門pwn》,短時間內踏入漏洞利用的大門,快速成為一名合格的pwn題選手
我的問答 領取收益
0
我的提問
0
我的回答
0
學習收益