-
[FTZ] Level 4보안/Pwnable 2021. 8. 23. 17:52
Backgrounds
Daemon
데몬은 백그라운드에서 실행되는 프로세스로, 사용자의 요청을 기다리다가 요청이 발생하면 대응한다 (windows의 서비스와 비슷한 개념이다). 데몬은 다음 2가지 종류가 있다.
- Standalone: 메모리에 언제나 상주하는 데몬 (실행 스크립트 위치 /etc/inetd.d)
- inetd: inetd라는 특별한 데몬에 의해 실행되는 데몬; inetd에 요청이 들어오면 inetd는 해당 데몬을 메모리에 올려 요청 처리 (실행 스크립트 위치 /etc/xinetd.d)
Backdoor
백도어는 root 계정으로 로그인하지 않고서도 root 권한을 가질 수 있게 하는 길이다. 백도어는 root 쉘을 얻어 root 쉘을 일반 계정으로 접근할 수 있도록 복사한 후 setuid를 설정할 수 있으나, 이 방법은 관리자가 쉽게 찾아낼 수 있는 문제가 있다. 다른 방법으로는 접근 가능한 포트로 들어가 root 권한을 얻어낼 수 있는데, 대표적으로 데몬 서비스에 백도어를 심는다.
Linux Commands
finger
finger 명령어는 사용자 계정 정보와 로그인 정보 등을 볼 수 있는 명령어다. finger는 다음과 같이 사용될 수 도 있다.
finger @[HOST_NAME]
finger 명령어에서 호스트를 지정해주면 /etc/xinetd.d/finger가 실행되지만,
finger
로 실행할 경우 로컬 서버 /usr/sbin/in.fingerd가 실행된다.
Solution
/etc/xinetd.d/backdoor의 내용은 다음과 같다.
service finger { disable = no flags = REUSE socket_type = stream wait = no user = level5 server = /home/level4/tmp/backdoor log_on_failure += USERID }
기존의 finger 서비스를 나타내는 /etc/xinetd.d/finger의 내용은 다음과 같다.
service finger { disable = yes socket_type = stream wait = no user = nobody server = /usr/sbin/in.fingerd }
backdoor의 disable는 no, finger의 disable은 yes로 설정되어 있어, 쉘에서 finger 명령어를 사용하면 backdoor의 서비스가 실행된다. backdoor는 level5 사용자로 접속해 server의 /home/level4/tmp/backdoor 파일을 실행시킨다. 즉 /home/level4/tmp 위치에 my-pass 명령어를 실행하는 backdoor 파일을 만들어야 한다. 다음은 /home/level4/tmp/backdoor.c 코드이다.
#include <stdio.h> #include <stdlib.h> int main(void) { system("my-pass"); return 0; }
위 코드를 컴파일해 /home/level4/tmp/backdoor 실행 파일을 만든다. 그런 다음 다음 명령어로 finger 서비스를 실행한다.
finger @localhost
그러면 my-pass 명령어가 user=level5로 실행돼 플래그를 얻을 수 있다.
Flag
what is your name?
Reference
'보안 > Pwnable' 카테고리의 다른 글
[FTZ] Level 3 (0) 2021.08.23 [FTZ] Level 2 (0) 2021.08.23 [FTZ] Level1 (0) 2021.08.23