PWN练习之环境变量继承

来源:互联网 发布:cms 系统 编辑:程序博客网 时间:2024/06/04 17:44

一、环境变量参数:

      在Linux/Windows操作系统中, 每个进程都有其各自的环境变量设置。 缺省情况下, 当一个进程被创建时,除了创建过程中的明确更改外,

它继承了其父进程的绝大部分环境变量信息。 扩展的C语言main函数可以传递三个参数,除了argc和argv参数外,还能接受一个char**类型

的envp参数。envp指向一个字符串数组,该数组存储了当前进程具体的环境变量的内容,envp的最后一个元素指向NULL,此为envp结束的

标识符。如下代码可以打印环境变量:

#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]);

+=1;

}

return0;

}

环境变量的格式为:环境变量名=环境变量值

当父进程启动一个子进程时,子进程会继承父进程的换了变量信息。在Linux Shell下,通过export可以给Shell添加一个环境变量,此后通过

Shell启动的子进程都会拥有这个环境变量。除了通过export添加环境变量以外,我们还可以通过函数getenv、putenv、setenv等对环境变量进行

操作。 Python的os模块提供创建子进程以及修改环境变量的函数,其中os.system函数可以创建一个子进程,且子进程会继承父进程的环境变量参数信息;os.putenv可以修改进程的环境变量参数信息。

二、关于Linux

Linux Shell中,可以使用$()或者两个反引号(`)来包裹一条shell命令,并返回shell命令的执行结果。比如执行

export testenv2=`python -c "print 'A'*20"`

命令后,再执行./env可以看到有一个名为testenv2的环境变量,其值为20个A。

三、


getenv函数以一个字符串首地址为参数,这个字符串为环境变量名。返回值在eax中,存的内容为环境变量参数字符串首地址。

tips:

python输出不可打印字符时,可以使用“\x”,如print '\x0a\x0d\x0a\x0d'。

python修改环境变量(HEETIAN=AAA):

os.putenv("HEETIAN","AAA")


0 0
原创粉丝点击