首页
社区
课程
招聘
在组织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位需要使用寄存器+系统调用号来实现调用函数,32位程序使用栈传参,64位程序使用寄存器传参

回复 已采纳
零基础入门pwn
  参与学习     1767 人
  提问次数     35 个
《零基础入门pwn》,短时间内踏入漏洞利用的大门,快速成为一名合格的pwn题选手
我的问答 领取收益
0
我的提问
0
我的回答
0
学习收益