PWN练习之环境变量继承

一、环境变量参数:

      在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")

int execve(const char * filename,char * const argv[ ],char * const envp[ ]);可以设置执行一个进程的参数与环境变量

#include<unistd.h>
main()
{
char * argv[ ]={"ls","-al","/etc/passwd",(char *)0};
char * envp[ ]={"PATH=/bin",0};
execve("/bin/ls",argv,envp);
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值