ftz level4 를 풀어 보겠습니다.
우선 힌트를 조회해 보겠습니다.
조회 해보니, /etc/xinetd.d/ 에 백도어를 심어놓았다고 합니다.
본격적으로 들어가기 전에, xinetd 과 백도어를 조금 알아보겠습니다.
xinetd 를 알아보기 전에 inetd 를 짚고 넘어 가겠습니다.
데몬 : 주기적이고 지속적인 서비스 요청을 처리하기 위해 백그라운드로 실행되는 프로세스, 이름뒤에 d
가 붙습니다 대표적인예로 httpd 가 있습니다. 여기서 standalone과 inet 방식이 있는데,
standalone 방식같은 경우, 항시 메모리에 상주하면서 클라이언트의 요청을 처리하고,
반면 inet 방식은 계속 상주 하는것이 아니고 요청이 들어 왔을때 프로세스를 실행하고 종료 후에 자동으
로 해당 프로세스를 종료하는 방식입니다. standalone 같은 경우 자주 사용하는 서비스에 효율적이고,
inet은 자주 사용하지 않는 서비스에 효율적입니다.
xinet은 이런 inet 을 확장하여 만든 것으로서 자체적으로 접근제어가 가능하고,
ip 당 접속 수 제한, 시간대별 서비스 제한, Dos 에 대한 대응 등 많은 확장적인 기능을
가지고 있습니다.
xinet의 구성을 대충 보겠습니다.
구성 |
내용 |
/etc/xinetd.conf |
전체적인 환경 설정을 담당하는 파일 |
etc/xinetd.d |
관리, 제어 되는 서비스 파일이 위치하는 디렉터리 입니다. |
/etc/rc.d/ini.d/xinetd |
데몬을 제어하는 데몬스크립트 파일입니다. |
백도어는 그대로 해석하면 뒷문이라는 뜻과 같이, 보안 인증을 거치지 않고도, 시스템 및 응용프로그램에 접근할 수 있는 코드나 프로그램 등의 형태로 존재합니다.
힌트를 해석해보면 xinet데몬이 관리 및 제어하는 디렉터리에 인증을 거치지 않고 시스템에 접근할 수 있는 파일이 있다고 해석이 가능합니다.
한줄씩 해석해 보겠습니다. xinetd.d 디렉터리 안에 있는 파일은 형식이 아래와 비슷하기 때문에 하나씩 해석하겠습니다.
service finger //finger 서비스에 대한 내용입니다,
{
disable = no //해당 서비스의 실행 유무로서 no 면 서비스 사용입니다.
flags = REUSE //계속적으로 재사용한다는 의미 입니다.
socket_type = stream //네트워크 소켓 타입입니다. stream기반의 서비스를 이용합니다.
wait = no //yes인 경우 단일스레드, no 인 경우 다중 스레드 입니다.
user = level5 //UID를 지정하는 부분입니다. 여기서는 level5 로 지정되있습니다.
server = /home/level4/tmp/backdoor //서비스를 실행하는 데몬 파일의 경로입니다.
log_on_failure += USERID //로그에 관련된 설정입니다.
}
우선 해당경로에 들어가서 vi backdoor.c 로 c언어 파일을 만들어 주겠습니다.
system 명령을 사용해서 사용하고 싶은 명령어 my-pass 를 입력해 주시고, 저장하고 나오시면 됩니다.
코딩 내용이 길지 않으니 따로 텍스트로 적지는 않겠습니다.
다 작성하고 나서 gcc로 -o 옵션을 사용해서 컴파일 해줍니다. 실행파일을 만드는 과정입니다.
참고로 컴파일이 완료되지 않으면 에러 메세지가 뜹니다. 오타일 가능성이 높으니 한번씩 더 확인
해보고 수정하시면 됩니다.
컴파일이 완료된 후 finger 서비스를 실행시키는데 기존 리눅스의 finger 명령이 실행되서 사용자
계정 정보가 나옵니다.
그러면 finger 명령에 @localhost 를 붙이면 해결됩니다. 해당 사용자의 정의된 서비스를 실행하기
때문에 실행하면 원하는 결과를 얻으실 수 있습니다.
ftz level4 를 풀어 봤습니다.
'Hack > ftz' 카테고리의 다른 글
ftz 풀이 level6 (0) | 2016.11.28 |
---|---|
ftz 풀이 level5 (0) | 2016.11.27 |
ftz 풀이 level3 (0) | 2016.11.21 |
ftz 풀이 level2 (0) | 2016.11.19 |
ftz 풀이 level1 (0) | 2016.11.18 |
댓글