【发布时间】: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]));为什么?
【问题讨论】: