今天的实验和上次学习的精确覆盖变量数据有关,CTF PWN练习中的环境变量继承。这个题目有联系到环境变量参数,我们需要知道在Linux/Windows操作系统中, 每个进程都有其各自的环境变量设置。缺省情况下, 当一个进程被创建时,除了创建过程中的明确更改外,它继承了其父进程的绝大部分环境变量信息。
C语言main函数可以传递三个参数,除了argc和argv参数外,还能接受一个char**类型的envp参数。envp指向一个字符串数组,该数组存储了当前进程具体的环境变量的内容,envp的最后一个元素指向NULL,此为envp结束的标识符。
实验介绍开始
打印环境变量参数信息的示例代码(位于/home/test/3目录下的env.c):
#include stdio.h>
int main(int argc, char** argv, char** envp)
{
int i = 0;
while (envp[i])
{
printf("envp[%2d] = %s\n", i, envp[i]);
i += 1;
}
return 0;
}
编译这段代码生成env程序,然后在命令行下执行,可以看到程序打印出了具体的环境变量参数信息:
环境变量的格式为:环境变量名=环境变量值
当父进程启动一个子进程时,子进程会继承父进程的换了变量信息。在Linux Shell下,通过export可以给Shell添加一个环境变量,此后通过Shell启动的子进程都会拥有这个环境变量。
在Shell中执行export testenv="Hello_World"之后,再执行./env,可以看到新的环境变量已经被子进程继承了。
除了通过export添加环境变量以外,我们还可以通过函数getenv、putenv、setenv等对环境变量进行操作。
看完基础知识之后,我们开始来做题,本文实验题目:
转载请注明来自网盾网络安全培训,本文标题:《CTF PWN练习之环境变量继承》
标签:CTF
- 上一篇: CTF PWN之精确覆盖变量数据
- 下一篇: 善谋者胜 | HVV大型攻防演练检测篇
- 关于我们