본문 바로가기
Pwnable/Pwnable CTF

[Pwnable.kr] Toddler's Bottle_cmd1

by Y06 2021. 5. 19.

문제는 cmd1 리눅스의 환경변수를 이용하는 것이었다.

접속한 후 ls 명령어를 통해 디렉토리 목록을 확인한다. 위의 사진과 같이 cmd1, cmd1.c, flag 파일이 있다.

cat 명령어를 통해 읽어보면 다음과 같다. 사용자에게 입력받은 문자열을 시스템 함수에 넣고 실행하는 코드이다. 이때 strstr() 함수를 통해 몇가지 문자열이 필터링 된다. 필터링 되는 문자열은 flag, sh, tmp이다.

 

strstr(string1, string2)

string2가 string1에 나타는지를 검사하는 함수. 아니면 NULL. string2에서 끝나는 널문다를 무시한다.

 

이를 우회하기 위해서 문제의 힌트에 나와있듯이 리눅스의 환경변수를 이용한다.

 

[ 리눅스의 환경변수 ]

: 윈도우와 마찬가지로 리눅스에도 환경변수가 존재하는데 리눅스에서 환경변수를 설정하기 위해서는 크게 두 가지 방법이 있다.

 

1. 환경변수를 설정할 홈 디렉토리의 ~/.bash_profile에 PATH=를 추가해주는 것

2. export 명령어를 이용해 환경변수를 지정해 주는 것

 

이렇게 두 가지가 있는데 먼저 시도한 ~/.bash_profile 수정은 파일 수정 권한이 없어서 사용할 수 없는 방법이고, 두 번째 export 명령어를 이용해 환경변수를 지정해주면 된다.

 

환경 변수를 설정하고 flag를 확인하였다.

 

 

FLAG: mommy now I get what PATH environment is for :)