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

師傅想請教一下第6步中6.ROPgadget --binary ./ret2syscall --only "pop|ret" | grep "ebx" | grep "ecx" | grep "edx",這里您提到了一句這里我們需要的是pop ebx ; pop ecx ; pop edx ; ret ,但是得到的結(jié)果反了是pop edx ; pop ecx ; pop ebx; ret,您說只不過順序和我們的不同,在組織payload時候需要調(diào)換下順序,這里您指的調(diào)整payload就是調(diào)整后面分別對應ebx ecx edx的參數(shù)一一對應即可,意思就是這里對ebx、ecx、edx他們?nèi)齻€pop順序是沒有要求的是嗎,我們只要保證這三項分別存入對應的參數(shù)/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編輯

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

 

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

回復 已采納
零基礎(chǔ)入門pwn
  參與學習     1788 人
  提問次數(shù)     35 個
《零基礎(chǔ)入門pwn》,短時間內(nèi)踏入漏洞利用的大門,快速成為一名合格的pwn題選手
0
我的提問
0
我的回答
0
學習收益