您的位置:首页 > 运维架构 > Linux

pwnable.kr [Toddler's Bottle] - cmd1

2017-03-22 15:14 357 查看
Mommy! what is PATH environment in Linux?

ssh cmd1@pwnable.kr -p2222 (pw:guest)

没搞懂这题和环境变量有什么关联,不过还是要珍惜这最后一道水题。

先看源码 cmd1.c:

#include <stdio.h>
#include <string.h>

int filter(char* cmd){
int r=0;
r += strstr(cmd, "flag")!=0;
r += strstr(cmd, "sh")!=0;
r += strstr(cmd, "tmp")!=0;
printf("r= %d", r);
return r;
}
int main(int argc, char* argv[], char** envp){
putenv("PATH=/fuckyouverymuch");
if(filter(argv[1])) return 0;
system( argv[1] );
return 0;
}


上述代码段意为 argv[1] 中不含 “flag”,”sh”,”tmp”,就可以让系统执行 argv[1] 所含字串表示的命令。

注 1. strstr( str1, str2 ) 函数功能为判断 str2 是否为 str1 的子串,是则返回 str2 在 str1 中首次出现的地址;否则返回 NULL 。

注 2. putenv(char *envvar) 用来改变或增加环境变量的内容。参数envvar的格式为envvar=value,如果该环境变量原先存在,则变量内容会依参数envvar改变,否则此参数内容会成为新的环境变量。参数envvar指定的字符串会变成环境变量的一部分,如果修改这个字符串,环境变量也会跟着被修改。

这里调用 putenv 的作用大概只是让我们不能直接打命令而已?…(例如 ‘cat xxx’ 要变成 ‘/bin/cat xxx’)

我们期望执行的命令是
/bin/cat flag
,因为传递的参数中不能出现 “flag” ,所以我们可以用通配符, 构造命令:

cmd1@ubuntu:~$ ./cmd1 "/bin/cat fla?"
mommy now I get what PATH environment is for :)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pwn 通配符 Linux c