gpt4 book ai didi

linux - 尝试 ret2libc 利用时获取环境变量的位置

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:11 25 4
gpt4 key购买 nike

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

#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 将位于 0xbfffff22

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

最佳答案

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

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

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

关于linux - 尝试 ret2libc 利用时获取环境变量的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com