zoukankan      html  css  js  c++  java
  • 【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"

     

  • 相关阅读:
    Android 手势&触摸事件
    vim常用命令总结
    关于背景中的雪花
    博客园美化——看板娘
    组合数
    扩展欧几里得和求逆元
    dfs序
    RMQ问题
    NOIP2017 列队
    线段树详解
  • 原文地址:https://www.cnblogs.com/p4nda/p/7146767.html
Copyright © 2011-2022 走看看