레벨 해킹

 2839, 1/142 회원가입  로그인  
   해커sV
   level 4 관련 지식 정리와 질문입니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3247 [복사]


음 ftz 정말 도움이 많이 되는것 같습니다. 이번에 level4풀면서 검색도 많이 해보고 하면서 하니까 문제도 이해되고 리눅스에 점점 익숙해져 가는것 같습니다.

일단 다른분들을 위해 제가 알아낸 점들을 정리하고 질문 들어가겠습니다.

제가 알아낸 것들은 서비스를 하는 서버 프로그램들을 데몬이라고 부른다는 것을 알았고, 데몬이 서비스를 운영하는 방식이 standalone방식과 inet방식이 있는데

첫번째의 standalone방식은 서비스를 하려면 해당 서버가 메모리에 미리 올라와 있어야 하고(항상 가동되어 있어야 하고), 독립적인 데몬이라는 것을 알았습니다.

두번째로 inet방식은 standalone방식의 xinetd라는 수퍼데몬이 항상 가동되고 있고, 이 데몬이 하는 역할은 서비스 요청이 들어올때 자신에게 종속된 하위 데몬(xinetd 타입의 데몬)을 구동시킨 후, 그 데몬이 서비스를 하도록 연결시켜 주고 서비스 요청이 종료되면 구동되었던 하위 데몬도 자동으로 종료된다는 것을 알았습니다.

이 방식으로 운영되는 서비스는 /etc/xinetd.d디렉토리의 파일을 보면 알수있는데 level4의 벡도어가 여기에 설치되어 있어서 level4문제는 inet 서비스 운영 방식에 관한것이라는 것을 알 수 있습니다. 이제 이 서비스 운영방식을 자세히 살펴보면

클라이언트가 finger으로 접속을 시도할 경우

1. xinetd는 접속이 시도된 포트 번호를 /etc/services파일을 참조하여 어떤 서비스인지 확인한다.(이때는 finger)

2. /etc/xinetd.conf를 참조하여 includedir이라고 되있는 디렉토리 안에 있는 파일중 서비스 이름이 finger로 되어 있는 파일을 찾아서 disable = no로 되어 있으면 거기에 있는대로 finger 서버 파일을 실행한다.

이제 밑의 backdoor파일과 finger파일을 읽어본 내용을 보면

[level4@ftz xinetd.d]$ cat backdoor
service finger
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = level5
server = /home/level4/tmp/backdoor
log_on_failure += USERID
}

[level4@ftz xinetd.d]$ cat finger
service finger
{
socket_type = stream
wait = no
user = nobody
server = /usr/sbin/in.fingerd
disable = yes
}

둘다 서비스 이름이 finger인데 진짜 finger은 disable = yes로 되어있고 backdoor finger은 disable = no로 되어있어서 finger 서비스가 요청되면 원래는 진짜 finger의 server 다음에 적혀있는 /usr/sbin/in.fingerd의 finger 서버 파일을 실행해야 되지만 backdoor finger파일의 server 다음에 적혀있는 /home/level4/tmp/backdoor을 실행하게 되는 것입니다.

그리고 이때 실행을 user 다음에 적혀있는 계정의 권한으로 하게 됩니다. 그 데몬의 프로세스 소유자를 user 다음에 적혀있는 계정으로 한다는 것이지요. 여기에서는 backdoor finger 파일에 user = level5라고 되어있으므로 level5 계정으로 접속하여 server 다음에 적혀있는 파일을 실행한것과 같다는 것이지요.

그래서 결국 finger 명령을 통해 서비스를 요청하면 level5의 권한으로 /home/level4/tmp/backdoor을 실행하게 된다는 것입니다. 따라서 backdoor파일을 변경하여 자기가 하고싶은 것을 하면 문제가 풀리게 되는 것입니다. 여기서 권한은 root root로 되어있지만 tmp폴더 안에 들어가 있어서 그런건지 지워지더군요. 저도 변경이 안되는줄 알고 좀 헤맸습니다.

여기까지가 문제와 관련된 지식이고, 이제 질문 몇가지를 하겠습니다. 혹시 문제 아직 안푸신 분들은 아래 안보고 해보시길 바랍니다.






---------------------------------------------------------------------------------------------------------------






제가 궁금한 점은 제가 'finger 명령을 통해 서비스를 요청하면 level5의 권한으로 /home/level4/tmp/backdoor을 실행하게 된다' 여기까지 알아낸후 backdoor을 직접 실행 해보니 ls명령이었는데 finger 이나 finger level4같은 명령을 실행하니 그냥 원래대로 finger명령이 잘 실행되던데 왜 finger @localhost는(이건 다른사람들이 올린 질문 보고 알았어요) 원래대로 실행 안되고 또 ls명령어도 아닌 /에 있는 것들을 보여주나요? 그것도 원래 ls명령하곤 다르게 위에서 아래로 쭉 출력되던데요.

다음으로 제가 backdoor파일을 변경해서 my-pass를 실행하게 바꿔놓았으면 그냥 그상태로 나둬도 되나요? 다른사람이 level4할때 제가 해놓은게 그대로 있는거 아닌가요? 저도 한번 접속 끊어보고 다시 해봤는데 제가 해놓은게 그대로 있어서요.

  Hit : 4831     Date : 2012/01/01 06:01



    
bohblue2 저도 재가 프로그래밍 한 파일이 그대로 있어서 .. 걱정이내요 .. 2012/01/02  
BkeMan 코딩한것들 다음날에 들어가보니 리셋이라고 해야할까요... 다 없어져 있던데요... 2012/01/02