首页 > 代码库 > 【pwnable.kr】cmd1

【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"

 技术分享

 

【pwnable.kr】cmd1