본문 바로가기
CTF, 워게임 문제 풀이/Hackerschool FTZ

Hackerschool FTZ: Level 4 문제 풀이

by secumark 2023. 1. 30.
728x90

 

아놔 백도어 왜 심어 놓은거야~~

 

보니까 읽을 수 있는 권한만 주었다..

 

 

service finger { }라고 적혀있다.

참고로 xinetd는 수퍼데몬. (데몬을 관리하는 데몬) inetd랑 정확히 뭐가 다른진 모르겠지만 xinetd가 좀 더 최신? 버전이라고 할 수 있겠다. standalond 방식과 xinetd 방식.. 둘 중 하나를 사용하고 xinetd는 슈퍼 데몬을 이용해서 개별 서비스를 동작하는 방식이라 서버 리소스 절약이 된다는 점..(https://nevertrustbrutus.tistory.com/86)

 

데몬의 정의는.. 맨날 까먹어서 위키백과에서 긁어왔다.

사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램. syslogd가 시스템 로그를 남기는 것처럼.. 이 d가 데몬의 d를 뜻한다. 일반적으로 프로세스로 실행. 데몬은 부모 프로세스를 갖지 않아 PPID가 1이다. 프로세스 트리에서 init 바로 아래에 위치함. 시스템은 시동할 때 데몬을 시작하는 경우가 많고, 네트워크 요청이나 하드웨어 동작, 여타 프로그램에 반응하는 기능을 담당한다. devfsd같은 하드웨어 설정, 그리고 cron같은 주기적인 작업을 실행하는 등 다양한 목적으로 사용. 

데몬이 되는 방법은 일반적으로 자식 프로세스를 fork하여 생성하고, 자식을 분기한 자신을 죽이면서 init이 고아가 된 자식 프로세스를 자기 밑으로 데려가도록 하는 방식이라고 한다. (fork off and die)

https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%AA%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85) 

 

 

 

그래서 /etc/xinetd.d 경로 아래에 있는 것들은 xinetd 기반 서비스들의 개별 설정 파일들이다. 이 안에 backdoor라는 폴더가 있는데, 여기서 말하는 service finger의 finger는 사용자 계정 정보를 확인할 때 쓰인다. 데몬의 위치는 ../usr/sbin/inetd

 

해당 파일에 대한 문법은 아래와 같다.. 

service telnet(서비스 이름 */etc/service 파일에 등록)

{

disable = no (서비스함)

flags = REUSE

socket_type = stream (TCP = stream , UDP = dgram)

wait = no (stream 경우 반드시 no 설정)

user = level (어떤 사용자권한으로 서비스 할 것인지.. 이 파일은 level5 권한으로 서비스 한다.)

server = /home/level4/tmp/backdoor (실행할 데몬 명)

log_on_failure += USERID ( 서버에 접속 성공하지 못했을 때, /etc/xinetd.conf 파일에 정의된 기본 항목 외에 유저 아이디 값을 로그파일에 추가하라는 뜻)

(https://gorans.tistory.com/9)

 

그래서 이 backdoor 파일은 /home/level4/tmp/backdoor 데몬을.. 실행하는 것 같다.

 

수퍼데몬에 대한 문제는 한번도 풀어본 적이 없어서 매우 당황 ㅠ

근데 보니까 /home/level4/tmp/backdoor 라는 파일이 없었다.

해당 경로에 backdoor라는 파일을 만들었다. (참고로 실행권한은 없는데.. bash backdoor라고 하면 실행 권한 없는 스크립트 파일도 실행이 됨. 그냥 파일은 chmod 권한 줘야한다.)

 

어쨌든.. 이 문제에서 중요한건 일단 finger라는 서비스에 대한 데몬을 실행하고 있고.. 서비스가 실행되면 /home/level4/tmp/backdoor 파일을 level5 사용자 권한으로 실행한다는 소리..

 

아마 C언어 파일을 하나 만들어야할거 같은데ㅠ 최대한 간단하게 작성했다..

위치가 /bin/이라 my-pass만 해도 됨.

 

여기까진했고..

xinetd 서비스가 네트워크에 들어오는 요청을 수행하기 위해선 단순히 finger level5~이런식으로 실행해선 안되고 보통 이럴땐 @localhost를 이용. (나 자신을 말함)

 

finger @localhost

 

 

 

오우! 

 

수퍼데몬에 대해서 더 공부를 해봐야겠다. 

728x90

댓글