1. 程式人生 > >【pwnable.kr】cmd1

【pwnable.kr】cmd1

strstr blog pre += 其中 函數 /tmp har cmd

技術分享

最近的pwnable都是linux操作系統層面的。

ssh [email protected] -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