#include <string.h> int (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; } ``` 源码是这样,`filter`函数中有个`strstr`函数,这个函数搜索一个字符串在另一个字符串中的第一次出现,若存在,则返回子串在字符串中首次出现的位置,若不存在返回NULL。所以只要`argv`中不出现`flag`,`sh`,`tmp`字符串则会执行`system`,所以构造命令: ```.sh ./cmd1 "/bin/cat ?lag
|
近期评论