pwnable.kr之cmd1

Posted by rk700 on November 9, 2016

由这道题目的提示可知,应该与环境变量有关。具体地,程序首先通过putenvPATH设置为一个不存在的地址:

putenv("PATH=/fuckyouverymuch");

并检查了要执行的命令中是否包含了敏感字符串。

r += strstr(cmd, "flag")!=0;
r += strstr(cmd, "sh")!=0;
r += strstr(cmd, "tmp")!=0;

由于PATH是一个不存在的地址,要执行命令必须提供绝对路径;另一方面,提供的命令中不能包含tmp,所以为了便于操作,我们可以通过环境变量来达到目的。例如,我们首先进入/tmp目录再离开,则此时的OLDPWD=/tmp

由此,通过环境变量来代替敏感字符串tmp,便可执行我们放在/tmp目录下的脚本了,从而读取flag文件。