Pwnablekr_Toddlers Bottle_cmd1

문제에 대한 답은 ssh로 접속하여 입력한다.
다음은 문제의 소스코드이다. PATH 환경변수를 변경하여 PATH를 통해 플래그 파일에 접근할 수 없도록 한다. 또한 system 함수의 파라미터로 들어가는 argv[1] 에 특정 문자열이 포함되면 안된다. PATH 환경변수 문제와 필터 문제를 해결하며 system 함수를 실행해야 한다.
#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;
}이를 우회하기 위해 환경변수와 심볼릭 링크를 이용한다. 심볼릭 링크로 플래그 파일에 다른 이름으로 접근할 수 있도록 한다.

환경변수 MY를 정의하여 링크파일의 경로를 넣어두고, 이를 이용하여 flag를 출력했다.

flag는 mommy now I get what PATH environment is for :) 이다.
tags: writeup, pwnable, elf file, linux, c lang, symbolic link, environment variables