另一道关于命令行的题目:
ssh连上,密码为cmd1的flag内容,mommy now I get what PATH environment is for :)
查看cmd2.c源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #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\n", argv[1]); system( argv[1] ); return 0; }
|
分析:
和cmd1差不多的题目,这次过滤条件更加苛刻,按cmd1解题思路来想这道题,主要难点就在于”/“被屏蔽了,想办法输入一个”/“问题就可以轻松解决。
不知道哪位大佬发现的pwd在修改了PATH路径后依旧可以执行:
所以这里就简单了,我们进入/
根目录,然后利用pwd输出的路径”/“来构造cat flag命令:
/home/cmd2/cmd2 ‘$(pwd)bin$(pwd)cat $(pwd)home$(pwd)cmd2$(pwd)fla*’
即可成功得到flag: