풀이
다음은 cmd2.c의 코드이다.
#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 문제보다 필터링 규칙이 더 많이 추가되었다.
제일 까다롭다고 생각하는 필터는 당연 / 일 것이다.
그렇다면 / 을 우회할 수 있는 방법이 없을까?
호오..? 8진수와 16진수 입력을 echo로 받을 수 있다.
가장 친근한 16진수로 시도해봤으나, 안되서 그냥 8진수로 했더니 해결되었다.
'Wargame > pwnable.kr' 카테고리의 다른 글
[Pwnable.kr] uaf 풀이 (8pt) (0) | 2020.07.27 |
---|---|
[Pwnable.kr] blukat 풀이 (3pt) (0) | 2020.07.23 |
[Pwnable.kr] coin1 풀이 (6pt) (0) | 2020.07.22 |
[Pwnable.kr] cmd1 풀이 (1pt) (0) | 2020.07.22 |
[Pwnable.kr] lotto 풀이 (2pt) (0) | 2020.07.22 |