zoukankan      html  css  js  c++  java
  • 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 因此可以直接输出

  • 相关阅读:
    influxdb 使用
    【刷题】如何查找最长链
    学习中的开源框架和系统
    常见错误总结
    开发者必备网站
    计算机基础知识以及常用业务场景
    (1)、hive框架搭建和架构简介
    hadoop安装和配置
    linux基础
    UML学习目录
  • 原文地址:https://www.cnblogs.com/socialbiao/p/15695019.html
Copyright © 2011-2022 走看看