본문 바로가기

Pwnable/Hackerschool FTZ

[FTZ] 01. 해커스쿨 FTZ Training 요약

 

$ telnet ftz.hackerschool.org
$ telnet 115.68.23.201


[FTZ] 01. 해커스쿨 FTZ Training 요약


trainer2의 비밀번호는 linuxer 입니다.

trainer3의 비밀번호는 computer 입니다.

trainer4의 비밀번호는 mungguta 입니다.

trainer5의 비밀번호는 goodluck 입니다.

trainer6의 비밀번호는 coffee 입니다.                  ※ guest 아이디로 로그인 하여 복습하는 것을 잊지말자!!

trainer7의 비밀번호는 to the top 입니다.

trainer8의 비밀번호는 player 입니다.

trainer9의 비밀번호는 programming 입니다.

trainer10의 비밀번호는 best! 입니다.

 

Trainer1

리눅스를 처음 접속하면 "프롬프트"가 나타나며 이것은 서버에 성공적으로 로그인 되었다는 것을 의미한다.

[trainer1@ftz trainer1]$

접속ID  서버 현재위치


ls  : 리스트 출력

ls -l  : 파일&디렉터리

파일 성격       Permission          용량    생성 날짜        이름

-rw-rw-r--     1 trainer1 trainer1   779      9월 24 18:37   start.txt

drwxr-xr-x     2 trainer2 trainer2   1024    9월 24 11:52   tmp

파일/디렉터리 구분 : 앞부분이 -이면 파일, d이면 디렉터리(directory)

ls -a  : 숨겨진파일 리스트 출력 (숨겨진 파일은 앞자리에 "."이 들어감)

ls -al  : 숨겨진파일&디렉터리 리스트 출력

 

Trainer2

pwd  : 현재 경로 출력

cd  : 경로 이동

mkdir [디렉터리명]  : 디렉터리 생성

rmdir [디렉터리명]  : 디렉터리 삭제

cp [복사할 파일명] [복사된 파일명]  : 파일 copy

rm [파일명]  : 파일 remove

mv [변경할 파일명] [변경된 파일명]  : 이름 변경 or 잘라내기-붙여넣기


Trainer3

w  : 서버에 접속자 보기 / TTY 콘솔접속, PST 터미널 접속

USER    TTY     FROM               LOGIN@    IDLE    JCPU   PCPU   WHAT

root     tty1      -                     12:51pm    0.00s   0.20s   0.03s    w

guest   pts/0    210.95.24.129     03:21am    3.10m  0.12s   0.01s    -bash

   1        2         3                      4             5        6        7        8

1. 어떤 아이디로 로그인 하였는지 출력

2. 콘솔 or 터미널 접속 여부 ( tty는 콘솔, pts는 터미널)

3. 접속한 사람의 IP를 출력

4. 어느 시간에 로그인 했는지 출력

5. 지연시간 (얼마나 아무것도 입력을 하지 않고 쉬고 있는지)

6. 각 사용자가 CPU를 사용한 지연 시간

7. WHAT 필드에 있는 명령이 지연된 시간

8. 접속된 사용자들이 현재 어떤 명령을 사용하는지 출력

 

finger -l  : 서버에 접속한 사용자 정보 자세히 보기

tty  : 자신의 터미널 정보 확인

ifconfig  : 현재 접속한 서버의 IP 확인

write ID /dev/pts/번호  : 쪽지 보내기

wall "내용"  : 모든 사용자에게 쪽지 보내기

 

Trainer4

※ 최상위 디렉터리 모음

bin  : 가장 필수적인 리눅스 실행 파일. (기본적인 실행 파일) - ls, rm 모두 이곳에 들어가 있음

- boot  : 리눅스 부팅 관련 파일과, 커널

- dev  : 컴퓨터에 설치된 하드웨어에 관한 정보

etc  : 패스워드 파일, 쉐도우 파일, 리눅스 설정 파일 등...

/etc/passwd  : 사용자들에 대한 간단한 정보

/etc/shadow  : 사용자들의 패스워드 (아무나 보지 못함)

/etc/services  : 서버가 어떤 서비스를 활성화중인지 보여줌

/etc/issue.net  : 처음 접속될 때 나오는 화면.  ex) 해커스쿨의 F.T.Z에 오신걸 환영합니다!

/etc/motd  : 로그인 후에 나오는 메세지

~/public_html  : 각 사용자들의 홈페이지 파일. 보통 해킹에 성공하면 이 파일을 수정하여 hacked by xxx라는 문구를 남김

 

home  : 일반 사용자들의 디렉터리가 들어가는 곳. guest와 trainer1-10, level 1-10 모두 이 디렉터리 안에 속해 있음

- lib  : 라이브러리 파일

- mnt  : mount 명령을 사용하여, 마운트 시킨 시디롬 등이 들어가는 디렉터리

- proc  : 프로세스들이 파일 형태로 저장되는 디렉터리

- root  : 루트의 홈 디렉터리

- sbin  : 기본 명령을 제외한 시스템 관리용 실행 파일

tmp  : 임시로 파일을 저장하는 디렉터리 (누구나 이 디렉터리에 파일 생성 가능)

- usr  : 다양한 응용 프로그램들이 설치되어 있는 곳

- var  : 시스템 운영 중에 생성되는 각종 임시 파일과 외부 접속에 대한 로그 파일

 

Trainer5

※ 정보를 수집하는 방법!

- whoami  : 자신의 기본 정보

- id  : 자세한 자신의 정보

- cat /etc/passwd  : 서버에서 활동중인 사람들의 계정 정보

- uname -a  : 커널 버전 확인

※ root 권한이란 리눅스나 유닉스에서 모든 파일을 관리하는 절대적인 관리자 권한

- cat /etc/*release  : 설치된 OS 버전 확인

- rpm -qa  : 패키지 정보

- cat /proc/cpuinfo  : cpu 정보


Trainer6

※ 패스워드 파일 분석 방법

root  :  x  :  0  :  0  :  Admin  :  /root  :  /bin/bash

    1          2        3        4            5                  6                   7

1. 로그인할 때 사용되는 아이디

2. 패스워드 - 사용자들의 패스워드만 모아 새로운 파일을 만듦 (/etc/shadow)

3. 컴퓨터에 입력되는 사용자 아이디 (컴퓨터 입장에서의 root라는 의미)

4. 해당 사용자가 속해있는 그룹

5. 사용자의 이름

6. 로그인에 성공 했을 때 기본으로 위치하게 되는 디렉터리

7. 처음 로그인 했을 때 실행되게 할 프로그램 (로그인 했을 때 쉘이 실행되는 것) 

 

Trainer7

※ 리눅스 환경에서 압축하고, 해제하는 방법 (tar, gzip)

* tar는 사실 압축 프로그램이 아님 압축을 하면 용량이 줄어야 하는데 늘기 때문이다.

일단 파일을 압축하지 않고 그냥 합쳐버리기만 하니 기존 파일을 복구할 때 속도가 엄청 빠르다.

즉, tar는 속도면에서 볼 때 백업용 프로그램으로 따라올 자가 없음

$ tar cvf [합칠파일] [합칠파일들] 

$ tar xvf [해제할파일]

c - Create  : 새로운 파일을 만드는 옵션
x - eXtract  : 압축을 해제시키는 옵션
v - View  : 압축이 되거나 풀리는 과정을 출력하는 옵션
f - File  : 파일로서 백업을 하겠다는 옵션
 
* 리눅스 gzip 프로그램은 한번에 한개의 파일만 압축할 수 있음. 
그렇기 때문에 tar를 사용하여 여러 파일을 1개로 뭉쳐버리고, gzip 프로그램을 사용하여 압축해 버리면 됨!

$ gzip [파일이름]  : 압축

$ gzip -d [파일이름]  : 압축 해제 

※ 리눅스 압축 확장자 형태
- tar  : tar 프로그램을 사용하여 압축된 파일 (여러 파일들이 하나로 뭉쳐져 있는 파일)
- gz  : gzip 프로그램을 사용하여 압축된 파일
- tar.gz  : tar 프로그램을 사용하여 파일을 합친 후, gzip을 사용하여 압축한 파일
- tgz  : 위의 tar.gz과 동일

Trainer8

※ 텍스트 파일 생성법
1. 쉘 프롬프트 상태에서 $ cat > 파일이름.txt 라고 입력 ('>' 리다이렉션)
2. 원하는 내용 입력
3. Ctrl + D
4. 내용을 추가할 경우 리다이렉션을 두번 입력한다. $ cat >> 내용추가할파일.txt

※ 소스 파일 생성법 

1. 쉘 프롬프트 상태에서 $ cat > 파일이름.c 라고 입력

2. 컴퓨터 언어로 내용 입력

3. $ gcc -o [파일이름1] [파일이름2]  : 파일이름2를 파일이름1로 컴파일한다.

 

※ 절대경로는 최상위 디렉터리부터 시작되는 경로

※ 상대경로는 자신이 위치한 디렉터리를 기준으로 따지는 경로


Trainer9

※ id 설명 

유저  : 자신을 의미

그룹  : 자신이 속한 그룹

아더  : 유저와 그룹을 제외한 모든 다른 사람

루트  : 절대적인 권한을 가진 사람 

uid=2009(trainer9) gid=2009(trainer9) groups=2009(trainer9)
- uid  : User ID의 약자. 컴퓨터가 알아보기 쉽게 숫자를 부여한 것. (trainer9 = 2009)
- gid  : Group ID의 약자. 특별한 일이 없는 한 gid는 항상 uid와 같음.
- groups  : 현재 자신이 어떤 그룹에 속해 있는지를 보여줌. (default uid와 같음)

 

※ 파일 분석법

-rwxrwxrwx      1  trainer9 trainer10    5  10월 20 21:35     test1

  1    2   3              4         5                                       6

r(읽기) w(쓰기) x(실행) s(SetUID로 x를 포함)

1. 유저의 권한

2. 그룹의 권한

3. 아더의 권한

4. 유저

5. 그룹

6. 파일 이름


Trainer10

※ local 해킹시 핵심이 되는 SetUID 설명

Local 해킹  : 관리자 권한 (root)를 얻고자 시도

Remote 해킹 : 일반 아이디를 얻을 때

SetUID  : 일시적으로 자신의 ID를 변경하는 것 (잠시동안 root 권한을 가질 수 있음)

 

- Set이란 말은 "변경하다"란 뜻을 가지고 있고, UID는 User ID의 약자입니다.
따라서 SetUID는 "일시적으로 자신의 ID를 변경하는 것"을 의미합니다.

※ 지금까지 발견된 기법
- 레이스컨디션
- IFS버그
- 링크버그
- 버퍼 오버플로우
- 포맷 스트링 어택

※ 이러한 버그에 의해 루트 권한을 넘겨준 파일
- userhelper
- imwheel-solo
- restore
- screen
 
※ 서버 전체에서 SetUID가 걸린 파일을 찾는 방법
$ find / -perm -4000
find 명령어 옵션
-perm    권한과 일치하는 파일을 찾는다.    ex) # find / -perm 4755
-name    이름과 일치하는 파일을 찾는다.    ex) # find / -name cat
-user      유저와 일치하는 파일을 찾는다.    ex) # find / -user mmung2
-group    그룹과 일치하는 파일을 찾는다.    ex) # find / -group guta

 

FTZ #3 해커스쿨 FTZ 레벨별 힌트

1. 자신의 아이디가 level3이라고 해보자.

2. level4로 넘어가기 위해서, level4의 권한으로 SetUID가 걸린 파일을 찾는다.

# find / -user level4 -perm 4000

3. 그럼 한개 이상의 파일이 발견될 것이다.

4. 그 파일은 임의로 작성된 "멍청한 파일"이다.

5. 그 파일을 이용하여 level4의 쉘을 얻으면 성공!

6. my-pass 라고 입력하면 level4의 패스워드가 ....