안녕하세요 Triumph 입니다.

Hackerschool의 워게임인 FTZ에서 level4단계 풀이를 하고자 합니다.

 

level4로 로그인 후 힌트를 확인합니다.

 

힌트 : 누군가 /etc/xinetd.d/에 백도어를 심어놓았다.! 

 

음...백도어를 심어놨다네요..일단 감이 안잡히니 해당 디렉터리로 이동 후 파일목록을 출력해 봅시다.

 

고맙게도..누구나 알수있도록 backdoor라는 이름으로 백도어가 존재하고 있네요. 파일을 한번 열어보겠습니다.

 

해당 backdoor의 내용을 보고 분석해 봅시다.

 service finger
{
        disable = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = level5
        server          = /home/level4/tmp/backdoor
        log_on_failure  += USERID
}

 service명이 finger

 

 현재 실행중임

 해당 포트가 사용중일 경우 재사용

 TCP  프로토콜 사용

 요청이 들어오면 기다리지 않고 바로 응답

 level5의 권한으로 실행함

 해당 파일을 실행함

 실패시 계정을 로그에 기록함

 

 

대충 이해 하셨나요? 정리하자면 backdoor가 finger 서비스를 이용해서

/home/level4/tmp/backdoor라는 파일을 level5의 권한으로 실행하고 있네요

 

backdoor가 실행하는 /home/level4/tmp/backdoor 파일을 찾아봅시다.

 

아무파일도 없네요.. 만들란 소린가..?

없으니 만들어 봅시다.

level3때 autodig 소스코드 기억하시나요? c를 이용하여 level5의 패스워드를 얻어봅시다.

 

backdoor.c 라는 파일명으로 아래 파일을 작성합니다.

 

간단합니다. 메인함수를 선언하고 system함수를 통해 my-pass명령을 입력하게만 했습니다.

 

backdoor.c를 gcc로 컴파일 합니다. (gcc -o backdoor backdoor.c)

컴파일 시 메인함수가 int형이 아니라고 경고메시지가 출력되네요..무시하고 finger 서비스를 실행합니다.

(finger level4@localhost)

level5의 패스워드를 획득했습니다.

 

감사합니다.

'War Game > FTZ' 카테고리의 다른 글

Hackerschool FTZ 풀이 - LEVEL3  (0) 2017.03.08
Hackerschool FTZ 풀이 - LEVEL2  (0) 2017.03.07
Hackerschool FTZ 풀이 - LEVEL1  (0) 2017.03.07
Hackerschool FTZ 구축  (0) 2017.02.15

안녕하세요 Triumph 입니다.

Hackerschool의 워게임인 FTZ에서 level3단계 풀이를 하고자 합니다.


level3으로 로그인 후 힌트를 확인합니다.

 

 힌트1 : autodig의 소스를 이용하여 level4의 권한을 얻어라

 힌트2 : 동시에 여러 명령어 사용하는법

 힌트3 : 문자열 형태로 명령어를 전달하는법

level1, level2 대비 힌트가 기네요..게다가 소스코드도 등장했습니다. 부족할까봐 추가힌트도 줬네요.

아마 autodig를 이용하여 level4의 권한을 얻으라는 것을 보니, level1, level2와 마찬가지로 setuid가 걸려 있을 것으로 추측됩니다.

autodig가 실행 중 쉘을 실행하려면 일단 autodig부터 분석 해야겠죠?

 

소스코드를 분석하기 이전에 소스코드에 등장하는 내용을 먼저 설명하겠습니다.

 argc : 프로그램을 실행할 때 지정해 준 명령행 옵션의 개수

 argv : 인자벡터

  ex) [level3@ftz level3]$test.exe test2 //test.exe와 test가 실행되므로 argc는 2, argv[0]=test.exe, argv[1]=test 이다.

 strcpy : 문자열 복사

 strcat : 문자열 붙이기

 system : 해당 명령 실행

 dig : DNS 질의응답 확인

 

이제 autodig의 소스코드를 분석해 봅시다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv){

    char cmd[100];

    if( argc!=2 ){
        printf( "Auto Digger Version 0.9\n" );
        printf( "Usage : %s host\n", argv[0] );
        exit(0);
    }

    strcpy( cmd, "dig @" );
    strcat( cmd, argv[1] );
    strcat( cmd, " version.bind chaos txt");

    system( cmd );

}

//헤더파일 include

 


//메인함수 선언
//cmd 문자형 배열변수 선언

//명령줄 라인개수가 2개가 아닐경우
//내용 출력
//argv[0] 출력
//종료


//cmd변수에 dig @문자열 복사(cmd="dig @"
//cmd변수 뒤에 argv[1] 붙임(cmd="dig @" argv[1])
//cmd변수 뒤에 문자열 붙임(cmd="dig @" argv[1] " version.bind chaos txt")
//cmd 변수 실행

 

 

소스코드를 분석한 내용을 바탕으로 유추할 수 있는 것들은 아래와 같습니다.

1. audodig 뒤에 인자가 1개여야 합니다.(인자가 1개가 아니면 argc!=2가 되어 종료됨)

2. argv[1]에 서버주소가 들어가면 해당 서버의 bind버전을 조회합니다.

 

autodig는 인자 값을 받아 해당 서버의 bind버전을 확인하는 프로그램인 것을 확인했습니다.

확인 해 봐야겠죠? 일단 autodig를 찾고, 실행해 봅니다.

 

인자 0, 1, 2개를 넣고 실행해본 결과, 1개인 경우 bind버전을 조회하고 다른 경우는 예상한 대로 메시지 출력 후 종료됩니다.

(localhost에 bind가 설치되어 있지 않아 인자 1개실행 했을 때 connection timed out 발생함)

 

이제 추가 힌트를 분석해 봅시다.

힌트2 : 동시에 여러 명령어 사용하는법

동시에 여러 명령어를 사용하는 법은 &입니다. &를 사용하여 여러 명령어를 한번에 전달해 보겠습니다.

 

&를 사용하여 echo test1과 echo test2가 동시에 실행된 것을 확인했습니다.

 

힌트3 : 문자열 형태로 명령어를 전달하는법

문자열 형태로 명령어를 전달하는법..문자열에서 감이 오시지 않나요? 답은 "(더블쿼터)입니다.

위처럼 &로 여러가지 명령을 사용하면 빈칸(space)이 생길 수 있습니다.

하지만 audodig는 하나의 인자 값만 입력 가능하기 때문에 "(더블쿼터)로 묶어 주어 여러 명령어를 실행하더라도

하나의 인자값으로 인식하도록 할 수 있습니다.

 

그럼 이제 답이 나왔죠 ? &를 사용하여 my-pass명령을 실행해 보겠습니다.

level4의 패스워드를 획득했습니다.

 

감사합니다.

'War Game > FTZ' 카테고리의 다른 글

Hackerschool FTZ 풀이 - LEVEL4  (0) 2017.03.09
Hackerschool FTZ 풀이 - LEVEL2  (0) 2017.03.07
Hackerschool FTZ 풀이 - LEVEL1  (0) 2017.03.07
Hackerschool FTZ 구축  (0) 2017.02.15

안녕하세요 Triumph 입니다.

오늘은 Hackerschool의 워게임인 FTZ에서 level2단계 풀이를 하고자 합니다.

 

이전에 level1에서 획득한 level2 패스워드를 입력 후 level2로 로그인합니다.

역시 level3의 권한을 어떻게 얻어야할지 모르겠으니.. 힌트를 봐야겠죠..?

 

 힌트 : 텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데..

 

이제 힌트를 파악해 봅시다. 텍스트 파일을 편집하는 도중에 쉘의 명령을 실행시킬수 있는 취약점이 있는 것 같습니다.

그럼 어떤 텍스트 파일을 편집해야 할까요?

level3의 권한을 얻어야 하니 level3의 권한을 가진 텍스트 파일이겠죠?

level1과 마찬가지로 setuid 권한을 갖는 파일을 찾아 텍스트 편집 시 쉘을 실행시킬 수 있는 것으로 파악됩니다.

그럼 일단 해당 파일을 찾아봅시다.

 

소유자가 level3이고 setuid권한을 가진 파일 찾기

 파일찾기 : find / -user level3 -perm -4000 2>/dev/null

 

 

파일을 찾았으니, 일단 실행해 봅시다.

 

실행하니 vi editor 화면이 출력되었네요. 여기서 level3의 권한을 획득해야 하나 봅니다.

어떻게 권한을 획득해야 할까요? 답은 vi editor에서 명령어를 실행 시킬수 있다는 것입니다.

 

일단 밖으로 나와서 test 파일을 vi editor로 만들어서 :!ls -al 을 입력해 봅니다.

 

결과를 확인해 보니, vi editor가 열린 상태에서 명령어가 사용된 것을 확인할 수 있습니다.

그렇다면 setuid를 가진 파일을 편집하는 상태에서 명령어를 입력한다면?

해당 권한을 획득 할 수 있겠죠? 그럼 한번 해 봅시다.

/usr/bin/editor파일을 연 후 쉘을 얻기 위해 :!/bin/sh를 입력 해 봅니다.

 

입력한 결과 vi editor에서 나와졌네요? 뭐지?

자세히 보니 계정에 해당하는 @앞부분을 보니 level3이네요.

whoami 명령을 실행하여 해당 계정이 level3인 것을 확인했습니다.

 

level3의 권한을 얻었으니 my-pass로 패스워드를 획득합니다.

 

level3의 패스워드를 획득했습니다.

 

감사합니다.

'War Game > FTZ' 카테고리의 다른 글

Hackerschool FTZ 풀이 - LEVEL4  (0) 2017.03.09
Hackerschool FTZ 풀이 - LEVEL3  (0) 2017.03.08
Hackerschool FTZ 풀이 - LEVEL1  (0) 2017.03.07
Hackerschool FTZ 구축  (0) 2017.02.15

안녕하세요 Triumph 입니다.

오늘은 Hackerschool의 워게임인 FTZ에서 level1단계 풀이를 하고자 합니다.

 

FTZ는 각 level에서 취약점을 찾아 상위 level의 권한을 획득하는 워게임 입니다.

1. 일단 level1로 접속합니다. (level1 / level1)

2. 막연하게 접속해서 level2의 권한을 얻어라 하면 감이 안잡히기 때문에 각 level별 힌트가 존재합니다.

 

level2 권한을 얻기위한 힌트를 확인합니다. (cat hint)

 

 힌트 : level2 권한에 setuid가 걸린 파일을 찾는다.

 

여러분들은 이 힌트를 이해 하셨나요?

일단 level2권한에 걸린 파일을 찾으란 의미는 소유자가 level2인 파일을 찾으라는 의미 입니다.

그렇다면 setuid는 무엇일까요?

※ setuid란 파일을 실행하는 동안 실행자의 권한이 아닌 임시적으로 해당 파일의 소유자의 권한을 갖는 것을 의미합니다.

 

setuid를 이해했으면 힌트의 내용은 아래와 같습니다.

 힌트의 의미 : setuid가 걸려있고 소유자가 level2인 파일을 찾아라

 

이제 힌트의 파일을 찾아야 하니 힌트대로 명령어를 유추해 봅시다.

1. 일단 파일을 찾아야 하니 find를 사용해야 할 것같습니다.

2. 위치가 어디인지 모르니 전체 디렉터리(/)에서 검색해야 겠지요?

3. 소유자가 level2 여야 하니 조건에 소유자 옵션을 level2로 지정합니다.

4. 권한 옵션을 setuid로 지정합니다.

 

해당 조건을 검색하기 위한 명령어는 아래와 같습니다.

 힌트의 파일 찾기 : find / -user level2 -perm -4000 2>/dev/null

-user는 소유자, -perm은 권한옵션입니다. 4000은 setuid의 권한을 나타내며,

2>/dev/null은 리눅스에서 휴지통과 같은 역할로 에러를 출력하지 않는 역할을 합니다.

 

위 명령어의 결과는 아래와 같습니다.

 

setuid 권한을 가지고 소유자가 level2인 파일이 발견되었습니다. level2계정과 level1그룹 사용자만 실행이 가능하네요.

저는 level1계정이니 일단 실행해 보겠습니다.

 

원하는 명령어를 하나만 실행해 주겠답니다. my-pass는 안되네요...

그럼 어떻게 level2 권한을 얻을 수 있을까요?

답은 쉘입니다. 쉘은 OS와 사용자간의 대화를 위한 인터프리터로서 입력하는 명령을 해석하여

OS에게 전달하는 역할을 수행합니다. 쉽게 말하면 지금 명령어를 치는 프롬프트라고 생각하시면 됩니다.

 

쉘은 bash, korn 등 여러가지가 있지만 여기서는 /bin/sh를 실행해 보겠습니다.

 

/bin/sh를 실행한 결과 level2 권한을 획득한 것을 확인했습니다. 이제 level2의 패스워드를 확인해야겠죠?

level2의 패스워드를 획득했습니다.

 

감사합니다.

'War Game > FTZ' 카테고리의 다른 글

Hackerschool FTZ 풀이 - LEVEL4  (0) 2017.03.09
Hackerschool FTZ 풀이 - LEVEL3  (0) 2017.03.08
Hackerschool FTZ 풀이 - LEVEL2  (0) 2017.03.07
Hackerschool FTZ 구축  (0) 2017.02.15

안녕하세요 Triumph 입니다.

오늘은 Hackerschool FTZ 구축에 대해 알아보고자 합니다.

예전에 FTZ를 많이 했었는데, 지금은 접속이 되지 않더라구요.

그래서 집에서 직접 구축하여 하는 방법을 공유하고자 합니다.

 

1. 아래 필요한 파일들을 다운받습니다.

VMware Player

http://www.hackerschool.org/Sub_Html/HS_Service/VmwareLinux/VMware-player-2.5.0.exe

 

레드햇 이미지

http://www.hackerschool.org/Sub_Html/HS_Service/VmwareLinux/Red_Hat_9.0.zip

 

ftz.iso

https://drive.google.com/open?id=0B7o5xEOWXrSkUGxLTEM1MkZrTHc

 

putty

https://drive.google.com/open?id=0B7o5xEOWXrSkSFNBc3A0UmtzSWs

 

2. VMware 설치, 레드햇 이미지 압축 해제 후 VMware로 레드햇 이미지를 불러옵니다.

3. Edit virtual machine settings > CD/DVD에서  ftz.iso 파일을 넣습니다.

 

4. I copied it 클릭

 

5. 로그인 후 cdrom을 마운트 합니다. (root / hackerschool)

 

6. LEVELS/LEVLE1 에서 ExcuteMe.C > ExcuteMe.c 로 변경합니다.(안하면 이후 에러남)

 

7. AUTO_SCRIPT 에서 auto_script.sh 를 실행합니다. (./auto_script.sh 입력)

 

8. 스크립트 실행이 완료되면 재부팅 후 IP를 확인합니다.

 

8. Putty를 실행하여 IP입력 후 접속합니다.

 

9. 접속 후 경고창이 뜨면 예를 클릭합니다.

 

10. 이제 level1로 로그인 후 FTZ가 가능한데, 힌드를 면 한글이 깨진것을 확인했습니다. (level1 / level1)

 

11. 주소창 오른쪽클릭>Change Settings > Translation > Remote Character set을 Use font encoding 으로 변경하면 정상적으로 한글이 출력됩니다.

 

감사합니다.

'War Game > FTZ' 카테고리의 다른 글

Hackerschool FTZ 풀이 - LEVEL4  (0) 2017.03.09
Hackerschool FTZ 풀이 - LEVEL3  (0) 2017.03.08
Hackerschool FTZ 풀이 - LEVEL2  (0) 2017.03.07
Hackerschool FTZ 풀이 - LEVEL1  (0) 2017.03.07

+ Recent posts