Pwnable/Hackerschool

[F.T.Z] HackerSchool FTZ Training 6~10

와븨 2023. 9. 20. 23:50

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가지 방법이 있음

 

텍스트 파일

생성법

  1.  쉘 프롬프르 상태에서 cat > 파일이름.txt 입력
  2.  내용 작성
  3.  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 파일을 분석해보자.

  1. test 1이라는 파일은
  2. trainer9라는 uid를 가진 사용자에게
  3. 읽기(r), 쓰기(w), 실행(x) 권한이 있고
  4. trainer10이라는 gid를 가진 사용자에게도
  5. 읽기(r), 쓰기(w), 실행(x) 권한이 있고
  6. trainer9와 10을 제외한 모든 사람에게도
  7. 읽기(r), 쓰기(w), 실행(x) 권한이 있다.

즉, test1이라는 파일은 아이디를 가지고 있는 사람이라면 누구나 마음대로 변경할 수 있는 파일이다.

 

이어서 test2 파일도 분석해보자.

  1. test2 라는 파일은
  2. guest라는 uid를 가진 사용자에게
  3. 읽기(r), 쓰기(w), 실행(x) 권한이 있고
  4. trainer1이라는 gid를 가진 사용자에게는
  5. 읽기(r)와 실행(x) 권한이 있고
  6. 그리고 guest와 trainer1을 제외한 사용자들에게는
  7. 오직 실행(x) 권한만 있다.

 

Trainer 10

Local 해킹 시 핵심이 되는 SetUID에 대해 알아보자

Local 해킹에는 

  1. Remote 해킹 : 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 때, 아이디를 얻고자 시도하는 것
  2. 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 그룹과 일치하는 파일을 찾는다

이 옵션들은 서로 조합하여 동시에 사용할수도 있다.