이번에도 hint를 확인해 보았다.
/etc/xinetd.d에 백도어가 있다고 한다. xinetd는 리눅스 슈퍼 데몬으로, 인터넷 서비스의 연결 및 제어를 담당한다.
해당 디렉토리로 이동해서 파일들을 확인해 보자.
대놓고 backdoor라는 파일이 있다.
한 번 cat으로 읽어 보자.
finger라는 서비스의 설정이 출력되었다.
가장 유력한 힌트는 server 부분이다. 이 서비스가 실행된다면 /home/level4/tmp/backdoor가 실행되는 것 같다.
또한, user가 level5이기 때문에 실행되는 권한이 level5의 권한인 것을 알 수 있다.
만약, /home/level4/tmp/backdoor를 my-pass가 실행되게 하는 프로그램으로 바꾼다면?
서비스가 level5 권한으로 실행되기 때문에 level5의 패스워드가 출력될 것이다.
소스 코드는 다음과 같이 만들었다.
#include <stdio.h>
#include <stdlib.h>
int main() {
system("my-pass");
return 0;
}
소스 코드를 작성하고 gcc로 컴파일한 후 /home/level4/tmp 경로로 옮겨 주자.
ls로 확인해 보니 잘 옮겨진 것을 볼 수 있다.
이제 finger 서비스를 실행할 차례다.
finger는 원격 호스트의 사용자 정보를 확인할 때 쓰이며, 보통 @[호스트]라는 인자를 붙여서 실행하게 된다.
이번에도 finger의 인자가 무엇인지는 상관이 없고, 문제의 의도는 level5의 권한으로 /home/level4/tmp/backdoor가 실행되게 하는 것이기 때문에 특별한 호스트가 아닌 localhost(접속해 있는 호스트)를 사용할 것이다.
따라서 다음과 같은 명령어를 입력한다.
finger @localhost
level5의 패스워드가 표시된 것을 볼 수 있다.