Ret2shellcode

利用原理

ret2shellcode,即控制程序执行 shellcode 代码。一般来说,shellcode 需要我们自己填充。这其实是另外一种典型的利用方法,即此时我们需要自己去填充一些可执行的代码。

在栈溢出的基础上,要想执行 shellcode,需要对应的 binary 在运行时,shellcode 所在的区域具有可执行权限。

   

利用关键:

1、程序存在溢出,并且还要能够控制返回地址

2、程序运行时,shellcode 所在的区域要拥有执行权限

3、操作系统还需要关闭 ASLR (地址空间布局随机化) 保护 。

   

解题步骤:

  • 先使用cyclic测试出溢出点,构造初步的payload
  • 确定程序中的溢出位,看是否可在bss段传入数据

    使用GDB的vmmap查看bss段(一般为用户提交的变量在bss段中)

  • 先发送为shellcode的数据写入到bss段
  • 在将程序溢出到上一步用户提交变量的地址

   

system函数

在正常调用system函数的时候,堆栈位置的system_plt之后的内容为system函数的返回地址,在之后才是新的堆栈的栈顶位置,因此在system_plt和sh_addr之间增加了4个字符来进行填充。

   

   

猜你喜欢

转载自www.cnblogs.com/da1sy/p/12299134.html