【问题标题】:Get the location of environment variable when trying ret2libc exploit尝试 ret2libc 漏洞利用时获取环境变量的位置
【发布时间】:2016-06-10 05:26:01
【问题描述】:

最近在学习一些关于ret2libc的exploit的实验,发现可以使用环境变量来存储payload,下面的代码getenv.c可以帮助我们获取环境变量的位置:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(int argc, char *argv[]) {


    char *ptr;
    if(argc < 3) {
            printf("Usage: %s <environment var> <target program>\n", argv[0]);
            exit(0);
    }

    ptr = getenv(argv[1]); /* Get env var location. */
    ptr += (strlen(argv[0]) - strlen(argv[2])); /* Adjust for program name. */
    printf("%s will be at %p\n", argv[1], ptr);

}

我们可以这样使用程序:

$ ~/getenv FAV ./program FAV will be at 0xbfffff22

这让我很困惑,没有直接使用ptr值,而是调整(strlen(argv[0]) - strlen(argv[2]));为什么?

【问题讨论】:

    标签: linux gdb exploit


    【解决方案1】:

    程序foo上的环境变量地址是在使用你的getenv二进制文件时被猜到的。

    程序名在环境变量之前,所以如果原程序名长或短,就会改变环境变量地址。

    这就是为什么您将 getenv 程序名称长度减去 env 地址,并添加 foo 二进制名称长度。

    【讨论】:

      猜你喜欢
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 2022-01-13
      相关资源
      最近更新 更多