pwnable cmd1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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