【问题标题】:How to find address of the environment variables in Linux如何在Linux中找到环境变量的地址
【发布时间】:2019-07-01 14:57:45
【问题描述】:

我目前正在学习使用“The Art of Exploitation”中的环境变量来利用基于堆栈的缓冲区溢出。本章的重点是在 shellcode 中使用环境变量而不需要创建 NOP sled。这需要我要使用的变量的确切地址。这是片段:

使用execl(),使用现有环境,但如果使用 execle() ,可以指定整个环境。如果环境 数组只是作为第一个字符串的 shellcode(带有 NULL 指针 终止列表),唯一的环境变量将是 外壳代码。这使得它的地址易于计算。在 Linux 中, 地址将是 **0xbffffffa** 减去 shellcode 中的长度 环境,减去执行程序名称的长度。

关键是我使用的是完全不同的系统版本(Kali Linux 64 位和 4.19 内核),在我的例子中,作者 (0xbffffffa) 使用的基地址非常不同,我不知道去哪里看为了它。有什么方法可以找到,还是我应该在文档中的某个地方查找?

我假设这个地址在栈底的某个地方。还是栈基的确切地址?

【问题讨论】:

    标签: linux environment-variables buffer-overflow exploit shellcode


    【解决方案1】:

    这看起来像是 32 位内核下 32 位进程的 32 位地址,没有堆栈 ASLR。 main 获得 3 个参数:argc、argv 和 envp,最后一个是指向 env[] 数组 above RSP 的指针。当然它不会接近 RSP,但低于它,它会被函数调用的堆栈增长踩到。

    在进程入口点 (_start),x86-64 System V ABI 指定初始 RSP 指向 argc,在此之上为 argv[0]argv[1]、...。然后envp 数组(再次以 NULL 结尾)。

    这在 x86-64 System V ABI 中有记录。

    除非禁用堆栈 ASLR,否则 RSP 的初始值不固定。

    【讨论】:

      【解决方案2】:

      我猜,如果您只找到该环境变量的特定地址,您可以使用 getenv() 函数。

      % export PAYLOAD=$<whatever_payload>
      

      例子:

      #include <stdio.h>
      #include <stdlib.h>
      
      int main(int argc, char** argv)
      {
          printf("env address at %p\n", argv[1], getenv(argv[1]));
          return (0);
      }
      

      用法:

      % ./getenv PAYLOAD
      

      【讨论】:

        【解决方案3】:

        在 gdb 中:

        x/10s *((char **)environ)
        

        这会显示前 10 个环境变量。

        【讨论】:

          【解决方案4】:

          好的,所以我去了 gdb 并开始查看 $rsp 下面的地址(具有更高的值),直到我得到这个:

          0x7fffffffeffc: ""
          0x7fffffffeffd: ""
          0x7fffffffeffe: ""
          0x7fffffffefff: ""
          0x7ffffffff000: <error: Cannot access memory at address 0x7ffffffff000>
          

          这就是我想知道的。不过,感谢您的宝贵时间。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-07-18
            • 1970-01-01
            • 1970-01-01
            • 2014-02-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多