• 【pwnable.kr】cmd1


    最近的pwnable都是linux操作系统层面的。

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

    首先还是下载源代码:

    #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;
        return r;
    }
    int main(int argc, char* argv[], char** envp){
        putenv("PATH=/fuckyouverymuch");
        if(filter(argv[1])) return 0;
        system( argv[1] );
        return 0;
    }

    其中有一句putenv,其实我现在也没明白有什么用,不过有一个提示,有一个新的文件夹/tmp/fuckuverymuch/。

    还是可以看见有很多东西的。

    现在根据源代码可以分析出的是,程序调用system()函数执行用户输入的参数命令,但其中不能包括“flag”、“sh”、“tmp”字样。

    就是说把这三个东西藏起来就好。

    其实,system命令的默认PWD环境变量应该是与这个程序的PWD环境变量相同,这个环境变量是什么,就是默认“./”执行的文件夹目录,一般是根据程序调用的bash窗口目录来的。

    我们可以通过写一个bash脚本,通过system执行这个脚本来运行。

    比如我在/tmp文件夹下写了一个叫p4nda的脚本,内容是

    cat /home/cmd1/flag

    然后我选择在bash进入/tmp目录下后,执行/home/cmd1/cmd1程序,这样程序的PWD环境变量就是/tmp,这样system的PWD环境变量也是/tmp

    在执行system('./p4nda')就可以了。

    还需要执行一条chmod 777 ./p4nda

    操作流程如下

    进入/tmp目录:cd /tmp

    然后写文件:vi p4nda

    然后修改可执行权限 chmod 777 ./p4nda

     最后,执行 /home/cmd1/cmd1 "./p4nda"

     

  • 相关阅读:
    【分治法】线性时间选择(转)
    【分治法】最接近点对问题(转)
    概率DP入门总结 16题(转)
    动态规划初探及什么是无后效性? (转)
    第15章DP(转)
    整数快速乘法/快速幂+矩阵快速幂+Strassen算法 (转)
    矩阵乘法的理解(转)
    算法导论第4章习题与思考题(转)
    Transaction Script模式
    注册服务
  • 原文地址:https://www.cnblogs.com/p4nda/p/7146767.html
Copyright © 2020-2023  润新知