[F.T.Z] HackerSchool FTZ Training 6~10
Training 6
패스워드 파일 분석 방법
패스워드 파일 : 한 서버를 사용하는 사용자들의 모든 정보를 기록해 놓은 파일
- 사용자들의 모든 정보를 저장해 놓은 매우 중요한 파일
root : x : 0 : 0 : Admin : /root : /bin/bash
각 필드별로 살펴보자.
- 1번째 필드 : 서버에 로그인할 때 사용되는 아이디(계정) ex. root
- 2번째 필드 : 패스워드가 적혀있는 부분
(크래커를 사용한 공격을 막기 위해 /etc/shadow/라는 파일을 만들어 관리자 권한을 가진 사람이 아니면 펼쳐 볼 수 조차 없도록 만듦. 그래서 x라는 문자만 보여줌) - 3번째 필드 : 컴퓨터가 보는 로그인 계정. (컴퓨터는 영어가 아닌 숫자로 사용자를 판단하기 때문에)
- 4번째 필드 : 사용자가 속해있는 그룹
- 5번째 필드 : 사용자의 이름을 말해주는 부분
- 6번째 필드 : 사용자가 로그인에 성공했을 때 기본으로 위치하게 되는 디렉토리
- 7번째 필드 : 사용자가 처음 로그인했을 때, 실행되게 할 프로그램
Trainer 7
리눅스 환경에서 파일 압축/해제하는 방법
파일 압축하는 명령어
tar | gzip | |
사용법 | 파일 압축 : tar cvf 합칠 파일 합칠파일들 압축 해제 : tar xvf 해제할파일 |
파일 압축 : gzip 파일이름 압축 해제 : gzip -d 파일 이름 |
옵션 | c - Create : 파일 생성 x - eXtract : 압축 해제 v - View : 압축이 되거나 풀리는 과정을 출력 f - File : 파일로서 백업 |
- |
장점 | 파일 복구 속도가 빠름. (파일을 압축하지 않고 그냥 합쳐버리기만 하기 때문) |
용량을 많이 줄일 수 있음 |
단점 | 압축 프로그램이 아님. tar로 파일을 압축하면 용량이 줄지 않고 늘어남. 이는 파일을 압축하지 않고 그냥 합치기만 하기 때문 |
한번에 한 개의 파일만 압축 가능 (즉, 3개의 파일을 압축하면 각각 3개의 압축 파일이 생김) |
압축 파일 확장자
- tar : tar 프로그램을 사용하여 압축된 파일. 압축이 아닌 여러 파일들이 하나로 뭉쳐져있는 파일
- gz : gzip 프로그램을 사용하여 압축된 파일
- tar.gz : tar 프로그램을 사용하여 파일을 합친 후, 또 다시 gzip을 사용하여 압축한 파일
- tgz : tar.gz를 합친 tgz라는 확장자
Trainer 8
파일 생성, 컴파일, 실행
파일을 만드는 방법은
1. 일반 텍스트 파일 : cat 명령 사용 가능
2. 프로그램 소스 파일 : cat 명령 사용 불가. 컴파일 과정을 통해 실행이 가능하도록 만든 후 사용
으로 크게 2가지 방법이 있음
텍스트 파일
생성법
- 쉘 프롬프르 상태에서 cat > 파일이름.txt 입력
- 내용 작성
- Ctrl + D
리다이렉션 (">")
: 출력의 방향을 전환한다는 의미
이와 같이 리다이렉션을 사용하면 텍스트 파일을 생성할 수 있고, cat 명령을 통해 텍스트 파일의 내용을 확인할 수 있다.
또, 리다이렉션을 두 번 사용하면, 텍스트 파일의 뒤에 새로운 내용을 추가할 수 있다.
프로그램 소스 파일
생성법은 텍스트 파일과 똑같지만, C언어로 작성해야 함
cat 명령을 통해 프로그램 소스 파일을 만들어주고, 내용을 입력한다.
gcc -o 파일명.exe 파일명.c
이후 gcc -o 명령을 통해서 프로그램 소스 파일을 컴파일해준다.
이제 프로그램 소스 파일을 실행시켜보자.
도스에서는 파일을 실행 시킬 때, 디렉토리로 이동한 후 파일 이름만 입력하면 실행이 됐지만, 리눅스는 절대 경로를 모두 입력시켜줘야 실행이 된다.
*절대 경로 : 최상위 디렉토리인 루트()에서 시작되는 경로
pwd 명령어를 통해서 절대 경로를 확인할 수 있다.
프로그램 소스 파일의 절대 경로를 입력하면 소스 파일이 실행된다.
./파일명.exe
절대 경로를 쓰지 않고도 현재 디렉토리를 의미하는 '.'을 사용하면 간단하게 프로그램을 실행시킬 수 있다.
Training 9
리눅스의 권한
리눅스는 윈도우와 달리 한 서버에 여러 사용자가 접속하여 사용함
=> 개인 계정 파일에 다른 계정이 접근하지 못하도록하는 것이 바로 권한(permission)
권한에 대한 정보를 분석하는 법
- ls -al 명령을 사용하여 파일들의 권한에 대한 정보를 출력시킬 수 있다.
리눅스의 사용자
- User : 자신
- Group : 모든 유저는 하나 이상의 그룹에 속하게 됨.
임의로 그룹을 변경하지 않는 한 모든 유저는 자신의 유저 네임과 같은 이름의 그룹에 속하게 된다. - Other : 유저와 그룹을 제외한 모든 다른 사람
- root : 절대적인 권한을 가지고 있는 사용자.
어떤 권한에도 구애받지 않는 상태로 파일들을 제어할 수 있게 된다.
id 명령을 분석해보자
- uid : User ID의 약자 (컴퓨터는 사용자들에게 컴퓨터가 알아보기 쉬운 숫자를 부여하여 그 숫자로 누구인지 판단)
- gid : Group ID의 약자. 각 유저마다 gid를 가지고 있고, 다른 사람을 자신의 gid를 가진 그룹에 속하게 할 수 있다.
(특별한 일이 없는 한 gid는 항상 uid와 같다.) - groups : 현재 자신이 어떤 그룹에 속해 있는지를 알려줌. 임의로 변경하지 않으면 기본으로 자신의 uid와 같은 그룹에 속하게 된다.
파일의 권한 정보를 분석해보자
-rwxrwxrwx에서 rwx rwx rwx 가 권한에 관한 정보이다. 순서대로 '유저의 권한', '그룹의 권한', '아더의 권한'을 의미한다.
r, w, x는 순서대로 읽기권한(r), 쓰기권한(w), 실행권한(x)을 의미한다.
trainer9 trainer10 . 이 부분이 유저와 그룹, 아더인지 구분할 수 있다.
여기선 trainer9가 유저, trainer10이 그룹이다. 이 둘을 제외한 모든 아이디는 자동으로 아더가 된다.
예시로 test1 파일을 분석해보자.
- test 1이라는 파일은
- trainer9라는 uid를 가진 사용자에게
- 읽기(r), 쓰기(w), 실행(x) 권한이 있고
- trainer10이라는 gid를 가진 사용자에게도
- 읽기(r), 쓰기(w), 실행(x) 권한이 있고
- trainer9와 10을 제외한 모든 사람에게도
- 읽기(r), 쓰기(w), 실행(x) 권한이 있다.
즉, test1이라는 파일은 아이디를 가지고 있는 사람이라면 누구나 마음대로 변경할 수 있는 파일이다.
이어서 test2 파일도 분석해보자.
- test2 라는 파일은
- guest라는 uid를 가진 사용자에게
- 읽기(r), 쓰기(w), 실행(x) 권한이 있고
- trainer1이라는 gid를 가진 사용자에게는
- 읽기(r)와 실행(x) 권한이 있고
- 그리고 guest와 trainer1을 제외한 사용자들에게는
- 오직 실행(x) 권한만 있다.
Trainer 10
Local 해킹 시 핵심이 되는 SetUID에 대해 알아보자
Local 해킹에는
- Remote 해킹 : 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 때, 아이디를 얻고자 시도하는 것
- Local 해킹 : 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때, 관리자 권한(root)을 얻고자 시도하는 것
의 2가지가 있다.
여기서 우리에게 중요한 건 Remote 해킹이 아니라 Local 해킹이다.
관리자 권한을 얻지 않는 한 해당 서버는 그림의 떡이기 때문이다.
관리자 권한을 얻는 방법은 SetUID에 있다.
SetdUID는 일시적으로 자신의 아이디를 변경하는 것을 말한다.
- SetUID는 파일이 걸림
- SetUID가 걸린 파일을 실행하면 아이디가 변경됨
- 파일의 실행이 끝나면 다시 원래의 아이디로 돌아옴
-r-s--x--x 에 's'가 SetUID를 의미한다.
s는 x가 있어야 할 자리에 있는데, 이는 바로 s가 x를 포함하고 있기 때문이다.
위 파일을 분석하면,
"root에게 읽기와 실행이 있고, root라는 그룹에게는 실행 권한만 있고, 위를 제외한 사용자들에게도 실행 권한이 있다. 하지만 root에게 SetUID가 걸려있기 때문에 어느 사용자던 저 파일을 실행할 때는 root의 권한을 갖게 된다."
가 된다.
서버 전체에서 SetUID가 걸린 파일을 찾는 방법은 find / -perm -4000 명령을 입력하면 된다.
이는 "/에서부터 적어도 SetUID가 걸린 모든 파일을 찾아라" 라는 뜻이다.
4000 앞에 붙은 -가 "적어도"를 의미하며, -perm은 "권한을 찾겠다"라는 옵션이다. 그 뒤의 '4'가 SetUID를 의미하며, '000'은 rwx를 모두 의미한다.
find 명령 옵션
옵션 | 설명 |
-perm | 권한과 일치하는 파일을 찾는다 |
-name | 이름과 일치하는 파일을 찾는다 |
-user | 유저와 일치하는 파일을 찾는다 |
-group | 그룹과 일치하는 파일을 찾는다 |
이 옵션들은 서로 조합하여 동시에 사용할수도 있다.