보안 공부하는 꼬깔이

Nebule level01 풀이


#Nebula level01 계정

ID  : level01

PW : level01


Nabula level01 문제에 접속하면 나오는 메인화면이다. 

소스를 간단히 해석하면 해당 프로그램의 gid,uid를 가져와 system 함수를 실행시키는 소스이다.

system("/usr/bin/env echo and now what?");

소스 중 해당 부분은 system 함수를 이용해 env 환경 변수를 참조한뒤 echo 명령어로 "and now what?" 이라는 문구를 출력시킨다. 

실제로 /home/flag01 디렉터리에 존재하는 flag01 파일을 실행시켜보면 "and now what?" 이라는 문구가 출력된다.


해당 문제는 $PATH weaknesses 취약점을 이용하는 문제인 것 같다.

echo 명령어를 예로 $PATH weaknesses 취약점을 설명해보도록 하겠다.


사용자가 echo 명령을 사용하면 쉘은 echo 명령을 실행시키려 위 사진의 환경변수 $PATH 에 존재하는 경로를 왼쪽에서 부터 차례대로 확인한다. 그리고 echo 명령이 존재하는 경로를 찾으면 그 곳에 존재하는 echo 명령을 수행해 결과를 우리에게 출력시켜 준다.

이러한 특징을 이용해 우리는 PATH 환경변수의 가장 앞에 현재 계정인 level01 권한으로 파일생성이 가능한 디렉터리를 임의로 추가한뒤 해당 경로에 echo 라는 이름의 파일을 생성하고 파일에 getflag 또는 /bin/bash를 실행시키는 코드를 저장하게 되면 쉘은 맨 앞에 우리가 임의로 추가한 경로에 저장된 echo 명령을 수행할 것이고 그렇게 되면 flag01계정의 권한으로 getflag 명령 또는 /bin/bash가 실행되어 문제가 해결될 것이다.

먼저 현재 계정인 level01 권한으로 파일생성이 가능한 디렉터리를 찾아보자.

/tmp 디렉토리는 sticky 비트가 설정되어 있으며 소유자, 그륩, 그외 사용자 모두가 읽기, 쓰기 , 실행이 가능하다.

해당 디렉토리에 echo 파일을 생성하고 getflag 명령어를 수행하는 코드의 추가와 함께 실행권한을 주자

echo 파일에 getflag를 실행시키는 코드와 함께 실행권한이 추가됬다.


이제 /tmp 디렉토리 경로를 PATH 환경변수의 가장 앞에 넣어보자.

export 는 환경변수를 추가할때 사용하는 명령어다. 해당 명령어를 이용해 PATH 환경변수의 제일 앞에 /tmp 디렉터리를 추가했다. 

모든 준비를 끝마쳤으니 /home/flag01 디렉토리의 flag01 파일을 다시 실행시켜보자

성공적으로 문제를 공략했다 :D


#Nebula level01 Clear!








'System Hacking > Nebula' 카테고리의 다른 글

Nebula level00 풀이  (0) 2017.08.03