본문 바로가기

IT(개발, 보안)/pwnable

[Pwnable 풀이] 5. cmd1

 

지난 몇일간 여행을 다녀와서 오랜만에 올리는 포스팅이다. 비교적 간단한 문제로 PATH 환경변수를 사용해 해결 가능한 문제이다

 

먼저 해당 서버에 접속해서 ls를 사용해 파일 목록을 확인하면 cmd1.c 파일과 cmd1 실행파일, flag를 확인할 수 있다.

flag 파일은 cmd1_pwn이 읽을수 있기 때문에 cmd1 실행파일으로 확인할 수 있을 것으로 보인다.

 

아래는 cmd1의 소스 코드로 예상되는 cmd1.c 파일이다.

fliter 함수는 인자로 받은 cmd 문자fl열에 'flag', 'sh', 'tmp' 문자열을 포함하면 r에 0이 아닌 값을 리턴하고 main 함수에서는 filter 함수로부터 0이 아닌 값을 리턴받으면 return으로 프로그램을 종료한다. 그렇지 않은 경우엔 system 함수를 사용해서 인자로 받은 문자열을 명령어로 실행함을 알 수 있다.

 

그리고 putenv를 통해 PATH 환경변수를 초기화 하고 있음이 보이는데 PATH 환경변수는 평소 cat이나 vi 같은 명령어를 실행 할 때 그 명령어 기능을 수행하는 실행파일들을 저장한 경로들을 지정해 준다. 쉽게 말해서 cat과 vi 등의 실행파일들의 경로를 지정하는 환경변수이다.

 

그런데 putenv를 통해 PATH가 초기화 되었으니 평범하게 cat, vi와 같은 명령어 만으로는 실행파일을 동작할 수 없기 때문에 직접 실행파일의 절대경로를 입력해야지 명령어를 동작할 수 있다.

인자에 flag, sh, tmp를 포함하면 안되기 때문에 flag 대신 *(와일드카드)를 사용해 flag 파일의 내용을 확인하는 방법과 flag파일의 절대경로를 환경변수로 저장해 이를 사용하는 두가지 방법으로 flag를 확인 할 수 있다.

반응형

'IT(개발, 보안) > pwnable' 카테고리의 다른 글

[Pwnable 풀이] 7. bof  (0) 2022.11.20
[Pwnable 풀이] 6. flag  (0) 2022.11.19
[Pwnable 풀이] 4. shellshock  (0) 2022.11.10
[Pwnable 풀이] 3. coin1  (0) 2022.11.09
[Pwnable 풀이] 2. col  (0) 2022.11.09