• BUUCTF PWN others_shellcode


    1.在做之前补充一下知识点
    写这道题之前, 大家首先要了解, 想要获得一个shell, 除了system("/bin/sh") 以外, 还有一种更好的方法, 就是系统调用中的 execve("/bin/sh", NULL, NULL)获得shell。
    我们可以在 Linxu系统调用号表 中找到对应的系统调用号,进行调用
    其中32位程序系统调用号用 eax 储存, 第一 、 二 、 三参数分别在 ebx 、ecx 、edx中储存。 可以用 int 80 汇编指令调用。
    64位程序系统调用号用 rax 储存, 第一 、 二 、 三参数分别在 rdi 、rsi 、rdx中储存。 可以用 syscall 汇编指令调用。

    2.查看IDA

    int getShell()
    {
      int result; // eax
      char v1[9]; // [esp-Ch] [ebp-Ch] BYREF
    
      strcpy(v1, "/bin//sh");
      result = 11;
      __asm { int     80h; LINUX - sys_execve }
      return result;
    }
    

    int 80 指令。eax = 0FFFFFFFFh - 0FFFFFFF4h = 11。看上面函数也发现result也就是eax的值就是11

    看下Linxu系统调用号表 11对应的就是 execve 因此可以直接输出

  • 相关阅读:
    MQTT 协议快速体验
    vue学习之动态绑定样式
    vue学习之过滤器Filters
    ES6学习之async和await
    vue学习之组件命名
    vue学习之props验证
    vue学习之vite
    使用less
    Js学习之ES6模块化
    webpack通俗易懂入门篇
  • 原文地址:https://www.cnblogs.com/socialbiao/p/15695019.html
Copyright © 2020-2023  润新知