실행시켜보니 다음과 같이 출력되었습니다.
gdb로 디버깅 해보도록 하죠.

 

Level01과 별반 다른게 없습니다.
SUID,SGID로 설정하고 getenv함수를 통해 어떤 환경변수 값의 주소를 구한 뒤,
asprintf함수를 사용했습니다. Sprintf하고 포맷이 같은 함수이네요.

먼저 getenv함수부터 보겠습니다.


getenv("USER")라는 것을 알 수 있고 그 리턴 값을 보면 level02를 얻을 수 있습니다.

 

 

그리고 asprintf 함수를 분석해보도록 하겠습니다.

asprintf의 파라미터로는

#1 – 아직안들어감

#2 – "/bin/echo %s is cool"

#3 – level02 ßgetenv함수 결과 값

 

 

이렇게 수행된 후 system함수가 호출된다.

결과적으로 System("/bin/echo level02 is cool"); 인 것을 알 수 있다.

그럼 환경변수 USER에 ;\"/home/level02/test""로 변경해줘서 test파일이 실행되게 해줍니다.


그럼 system("/bin/echo ; "/home/level02/test" is cool")이 되고,
결과적으로 echo명령이 수행된 다음 /home/level02/test 명령이 수행되어 쉘을 얻을 수 있습니다.


<test.c 소스코드>

 

 

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30
Nebula [Level03]  (0) 2015.10.30
Nebula [Level01]  (0) 2015.10.29

+ Recent posts