반응형

해커스쿨 ftz 문제풀이 / level6

level6로 로그인하면 바로 hint가 출력됩니다. 

인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이라고 합니다.

 

엔터를 입력하면 아래와 같이 화면이 나옵니다. 

1,2,3을 모두 입력해도 접속은 안되고 프로그램이 종료됩니다. 

 

이 화면에서 Ctrl + C 키를 입력하면 level6 권한으로 bash가 실행됩니다. 

hint가 보여지는 화면에서 입력을 기다리고 있다가 엔터를 누르면 텔넷 접속 서비스 순으로 출력되는 것을 생각할 수 있습니다. (hint 출력 -> 키 입력 대기 -> 키 입력 -> 텔넷 서비스 출력) 

텔넷 서비스가 출력되었을 때에는 Ctrl + C를 하면 ssh를 종료하도록 해 놓은 듯 합니다. 

level6 홈 디렉토리에 password가 있고, 이 파일의 내용을 보면 level7의 패스워드를 확인할 수 있습니다.

반응형
반응형

해커스쿨 ftz 문제풀이 / level5

 

level6의 권한을 얻는 문제입니다. 

 

/usr/bin/level5 프로그램은 level6에 setuid가 설정되어 있습니다.  

이 프로그램을 실행시키면 /tmp 디렉토리에 level5.tmp를 생성한다고 합니다. 

하지만, /tmp/에 가보면 level5.tmp 라는 파일은 찾을 수 없습니다. 

 

이는 /tmp/level5.tmp를 생성하고 바로 지우는 것을 유추할 수 있습니다. 

이 파일을 지우는 것은 /tmp/level5.tmp 파일이 level6 권한으로 만들어 졌기 때문입니다. 

그러면 /tmp/level5.tmp 파일을 level5의 권한으로 만들면, /usr/bin/level5 프로그램 실행시켜도 해당 파일이 삭제되지 않을 것입니다. 

 

level5.tmp를 level5의 권한으로 생성합니다. 

파일 내용 없이 만드니깐 크기는 0이 됩니다. 

 

그리고 나서 /usr/bin/level5를 실행시킵니다. 

그러면 /tmp/level5.tmp 파일 내용을 업데이트 하였지만, 이 파일에 대한 소유자는 level5이기 때문에 삭제하지는 못하게 되어 파일이 그대로 남아 있습니다. 파일 크기를 보면 약간 증가한 것을 볼 수 있습니다. 

이 파일의 내용을 보면 다음 레벨의 패스워드가 있는 것을 볼 수 있습니다.

반응형
반응형

exploit-exercises 문제풀이 / Nebula Level07 - perl

 

flag07 사용자는 웹 서버에서 접근 할 수 있는지 확인하기 위해,

호스트를 ping 할 수있는 첫 번째 perl 프로그램을 작성했다고 합니다. 

 

login은 ID/PW를 level07/level07로 하고, 이 레벨을 위한 파일은 /home/flag07에 있다고 합니다. 

 

문제로 나온 index.cgi 코드입니다. 

Host에 $host 입력을 위한 localhost 주소(127.0.0.1)를 입력해 보도록 하겠습니다. 

./index.cgi 파일에 Host 전달인자를 넣어 실행하면, 전달인자로 넣은 주소로 ping이 가게 됩니다. 

웹 서버에 대한 설정이 들어 있는 thttpd.conf 파일을 보겠습니다. 

port는 7007이고, 웹 서버의 디렉토리를 /home/flag07로 설정되어 있습니다. 

웹으로 포트는 7007이고, /home/flag07 디렉토리에 있는 파일을 실행시킬 수 있습니다. 

또한 그 파일을 실행시킬 때, flag07의 권한으로 실행시킬 수 있습니다. 

웹으로 접근하기 위해 ip를 확인하여 접근하도록 하겠습니다. 

index.cgi 파일에 Host를 ping 하는 것이 flag07 권한으로 실행되었습니다. 

그러면 이 주소에 getflag 명령어를 넣어 flag07 권한으로 getflag가 실행되도록 하겠습니다. 

세미콜론을 의미하는 %3B를 넣고, getflag 명령어를 입력하였더니, 아래와 같이 문제가 해결되었습니다. 

반응형
반응형

해커스쿨 ftz 문제풀이 / level4

level4의 문제로 level5의 패스워드를 찾는 문제입니다. 

level4의 홈디렉토리에 있는 hint 파일을 보면 아래와 같이 /etc/xinetd.d/에 백도어가 심어져 있다고 합니다. 

/etc/xinetd.d/ 디렉토리에 backdoor라는 파일이 있고, 이 파일의 내용을 보면 아래와 같습니다.

해당 설정에 대한 내용은 아래와 같습니다. 

중요한 부분은 user와 server입니다. 

finger 서비스에 의해 level5의 권한으로 /home/level4/tmp/backdoor 파일이 실행된다는 의미입니다. 

# service finger => 서비스의 이름입니다. 
# disable = no => 데몬을 비활성화하지 않는 것으로 데몬을 활성화하겠다는 것입니다. 
# flags = REUSE => 서비스 포트가 사용 중인 경우 포트의 재사용을 허가한다는 의미입니다. 
# socket_type = stream => TCP/IP 프로토콜입니다. 
# wait = no => 이미 서비스가 연결된 상태에서 다른 요청이 들어오면 기다리지 않고, 바로 응답합니다. 
# user = level5 => level5의 권한으로 실행됩니다. 
# server = /home/level4/tmp/backdoor => xinetd에 의해 실행될 데몬 파일입니다. 
# log_on_failure += USERID => 정상적인 기동에 실패한 경우 USERID를 로그에 기록합니다. 

/home/level4/tmp에 finger 서비스에 의해 실행되는 backdoor 프로그램을 만듭니다. 

backdoor 프로그램은 level5의 권한으로 실행되기 때문에, level5의 패스워드를 확인하기 위해 system call로 my-pass를 실행하도록 하면, level5의 패스워드를 출력할 것입니다. 

 

finger 서비스를 실행하면 아래와 같이 level5의 패스워드가 출력되는 것을 볼 수 있습니다.

반응형

+ Recent posts