나혼자 공부장

[FTZ] Level 4 풀이 본문

pwnable/FTZ

[FTZ] Level 4 풀이

라부송 2019. 9. 25. 00:41

언제나 그렇듯 FTZ의 관례인 hint 파일을 찾아준다.

 

 

hint의 내용을 보면, 백도어를 활용해서 푸는 문제임을 알 수 있다.

일단 /etc/xinetd.d/ 에 있는 듯 하니 그 쪽으로 이동해야겠다.

 

 

역시나 해당 경로 안에 backdoor 라는 파일이 있다.

 

 

해당 경로로 이동 후 backdoor 파일을 열어보면, finger 명령어에 대한 정의가 있다.

 

disable = no : 외부에서 접속해도 실행 가능 

user = level5 : level5의 권한으로

server = /home/level4/tmp/backdoor : 해당 경로에서 실행한다.

 

일단 server 경로로 이동해준다.

 

 

backdoor라는 파일이 있어야 할듯 한데 tmp 파일은 비어있는 상태다.

즉, 우리가 만들어줘야 한다. 파일은 level5의 권한으로 실행될 것이므로 바로 my-pass를 실행시키는 코드를 짜면 될 것이다.

 

 

vi backdoor.c 를 입력하고 다음과 같이 입력해서 저장해준다.

 

 

 

gcc 명령어를 이용해 backdoor.c 파일을 컴파일 해주면, 코드의 실행 파일이 생성된다.

 

 

다음과 같이 finger 명령어를 실행시켜주면 되는데, 왜 꼭 저런 형태여야 하느냐?

그냥 finger만 입력하면 말 그대로 최근 사용자 계정 정보, 로그인 정보 등등이 나온다. 하지만 우리가 지금 원하는건 그게 아니라 backdoor 파일에 있는 finger 명령어로 실행하는 것이다.

 

finger level4@localhost       /      finger @localhost

 

와 같이 입력하면 위 사진처럼 backdoor로 실행이 되는데, 이는 /etc/xinetd.d/ 경로가 수퍼데몬에 관련된 경로기 때문이다. 수퍼데몬을 실행시키려면 인터넷을 통해 접속을 해야하는 거니까 무언가 finger로 외부에서 접속을 해야 실행되는 코드다. 

따라서 finger @localhost 를 하면, 결과적으론 finger와 똑같이 로컬에 접속하는 거지만,

1. finger @localhost : 자신이 외부를 통해 자신에게 접속하는 것

2. finger : 자신이 그대로 자신에게 질의하는 것

과 같은 과정 상의 차이가 있기 때문의 1의 경우에만 backdoor가 실행되는 것이다.

 

정답 : what is your name?

'pwnable > FTZ' 카테고리의 다른 글

함수 프롤로그 & 에필로그 정리  (0) 2019.09.25
gdb 명령어 정리  (0) 2019.09.25
[FTZ] Level2 풀이  (0) 2019.09.24
Comments