System/FTZ

FTZ. 4

dcho 2019. 9. 5. 21:47
SMALL
level4 // suck my brain


흐음 힌트를 읽어봤는데 backdoor가 심어져있다고함.


SetUID가 걸려있는 파일을 찾아봤는데도 아무런 정보가 나오지 않는 것을 보니 이 것만을 가지고 푸는 것 같다.

디렉토리에 들어가 보니 backdoor라는 파일이 존재한다.

backdoor 파일을 읽기는 가능해서 읽어보니

// backdoor
service finger //서비스 이름, /etc/services 파일에 등록된 이름과 같아야 함
{
    disable = no //xinetd의 제어를 받을 것인가를 경정 Yes-제어 안받어!! No-제어 해줘
    flags = REUSE
    socket_type = stream //사용하는 TCP/IP소켓 stream(TCP), dgram(TCP)
    wait =no //yes=>xinetd가 요청되어 있는 한 데몬이 끝날때까지 다른 요청을 받지 않음
             //no => 각 요청에 대해 데몬이 동작
    user = level5 //데몬의 UID
    server = /home/level4/tmp/backdoor //서비스가 실행될 때 어떤 위치의 프로그램을 불러올지 결정
    log_on_falure += USERID
}


설명을 봐보니 finger 서버가 finger 요청에 응답한다고 하고. finger는 원격 사용자가 로컬 사용자의 로그인 이름 및 마지막 로그인 시간과 같은 정보를 볼 수 잇도록 하는 프로토콜이라고한다.(그렇다고한다)


---------------------------------------------------
리눅스 시스템의 부팅 순서
  1.  부트 로더(Grub) 실행
  2. 커널 이미지 메모리 로딩
  3. /etc/inittab 파일에 있는 내용 중 선택된 모드로 init 프로세스 실행
  4. xinted 데몬에 의한 네트워크 데몬 가동
  5. 부팅 완료

xinetd 는 허가된 사용자인지 검사하는 것이다. (자세한 참고 : https://geundi.tistory.com/43)

이 문제에서 finger가 하는 역할을 표로 나타낸 것이다. (http://logonluv.blogspot.com/2015/02/hacker-school-ftz-level4.html)


중요한것은!
서비스 이름은 finger이고 각 속성들이 정의되어 있다. 중요한 속성은 user 속성과 server 속성인데 user 속성은 해당 서비스를 어떤 사용자의 권한으로 서비스할 것인지를 결정하고 server 속성은 서비스 파일의 절대 경로를 지정한다.
서비스를 실행하는 권한이 LEVEL5 권한이기 때문에 /home/level4/tmp/backdoor 파일을 생성하면 LEVEL5 권한으로 파일을 실행한다.

// backdoor.c
#include <stdio.h>
int main(){
    system("my-pass");
    return 0;
}

c파일을 gcc컴파일러를 통해 컴파일 하고 /home/level4/tmp/backdoor 파일을 만들었다.
finger @localhost 를 입력해주면 된다.


※finger의 옵션은 어떤지 간략하게 보자면
finger ?
: finger는 리눅스에서 사용자의 계정정보를 확인하는 명령어이다.


finger 옵션
-s : 사용자의 로그온 이름, 실제이름, 터미널 이름, 로그온 시간 등을 보여준다.
-l : -s 옵션 정보에 몇 가지를 추가하여, 여러 줄에 걸쳐서 보여준다.
-p : -l 옵션 정보에서 .plan과 .project 파일을 보이지 않는다.
옵션이 주어지지 않으면, 기본적으로 -l 옵션을 사용한 것으로 간주된다.


finger ex)


-$ finger
finger만 치면 현재 시스템에 로그인 되어 있는 사용자들을 보여준다.


-$ finger user명
user를 적고 host명을 명시하지 않으면, finger는 로컬에 접속하게 된다.


-$ finger @host명
host명만 적고 user를 명시하지 않으면, 해당서버의 접속해 있는 모든 유저의 정보를 출력한다.


-$ finger user명 @host명
-$ finger @host명 user명
user명과 호스트명을 이런식으로 기입하면 원격서버의 사용자계정정보 확인하는 것이 된다.


참고
finger명령어는 지정된 계정사용자 정보를 /etc/passwd 파일에서 읽어서 보여주는 것이다.

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

FTZ. 6  (0) 2019.09.05
FTZ. 5  (0) 2019.09.05
FTZ. 3  (0) 2019.09.05
FTZ. 2  (0) 2019.09.05
FTZ. 1  (0) 2019.09.05