zoukankan      html  css  js  c++  java
  • 【pwnable.kr】cmd2

    这道题是上一个cmd1的升级版

    ssh cmd2@pwnable.kr -p2222 (pw:mommy now I get what PATH environmentis for :))

    登录之后,还是审计一下源代码:

    #include <stdio.h>
    #include <string.h>
    
    int filter(char* cmd){
        int r=0;
        r += strstr(cmd, "=")!=0;
        r += strstr(cmd, "PATH")!=0;
        r += strstr(cmd, "export")!=0;
        r += strstr(cmd, "/")!=0;
        r += strstr(cmd, "`")!=0;
        r += strstr(cmd, "flag")!=0;
        return r;
    }
    
    extern char** environ;
    void delete_env(){
        char** p;
        for(p=environ; *p; p++)    memset(*p, 0, strlen(*p));
    }
    
    int main(int argc, char* argv[], char** envp){
        delete_env();
        putenv("PATH=/no_command_execution_until_you_become_a_hacker");
        if(filter(argv[1])) return 0;
        printf("%s
    ", argv[1]);
        system( argv[1] );
        return 0;
    }

    可以看到,比上一次的命令过滤要严格,过滤了“/”,这样一来,上一次的payload就不能用了。

    但是可以想办法构造上一次的payload。—— /tmp/p4nda

    仔细看来,只有/被过滤了,其他的都可以保持不变。而通过尝试,发现system函数可以执行pwd命令

    可以想到,是否可以通过pwd构造/呢?

    在linux文件目录下 / 代表根目录,这样cd /之后,再次执行pwd就是/了。

    因此,同样构造上次的/tmp目录下p4nda文件,内容为“/bin/cat /home/cmd2/flag”

    并且利用$()来拼接/tmp/目录

    具体可以用$(pwd)tmp$(pwd)p4nda 

    当输入到程序中,并没有执行

    原因是在调用时,系统自动就把$(pwd)转换成了/

    这时想到用单引号',来绕过这种修改,

    /home/cmd2/cmd2 '$(pwd)tmp$(pwd)p4nda'

     flag:

     

  • 相关阅读:
    Codeforces 1045C Hyperspace Highways (看题解) 圆方树
    Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
    Codeforces 803G Periodic RMQ Problem 线段树
    Codeforces 420D Cup Trick 平衡树
    Codeforces 295E Yaroslav and Points 线段树
    Codeforces 196E Opening Portals MST (看题解)
    Codeforces 653F Paper task SA
    Codeforces 542A Place Your Ad Here
    python基础 异常与返回
    mongodb 删除
  • 原文地址:https://www.cnblogs.com/p4nda/p/7147552.html
Copyright © 2011-2022 走看看