728x90

서버를 구축하고, trainer1 ~ trainer10까지 코스를 완주했습니다. 생각보다 내용이 엄청나게 많지는 않았지만, 꾸준하게 복습하고 궁금한 것은 더 찾아보면서 공부해야 할 것 같습니다.

 

trainer1 (trainer1): 파일, 디렉토리 살펴보는 방법

리눅스 접속시 나타나는 프롬프트

[trainer1@ftz trainer1]$   

=> trainer1: 접속 ID, ftz: 서버, trainer1: 현재 위치

 

ls: 현재 위치를  기준으로 컴퓨터에 설치된 폴더들과 파일들을 보여줌.

ls -l: 디렉토리와 파일을 구분해줌. 

 

ls -l 예시

 

이 난이도에서는 우선, -rw-rw-r--, drwxr-xr-x에서 맨 앞에 d가 오면 디렉토리, -가 오면 파일로 받아들일 수 있습니다.

779, 1024는 사이즈, 옆에는 날짜와 시간 정도로만 알고 나중에 높은 트레이닝 단계에서 배웁니다.

 

ls -a: 숨겨진 파일 리스트를 보여줌.

ls -al: 숨겨진 파일과 디렉토리 리스트를 보여줌.

 

trainer2 (linuxer): 디렉토리간의 이동, 디렉토리 형성, 삭제, 복사, 이동 등..

pwd: 현재 경로를 알려줌.

cd .. : 폴더 내부에서 한 단계 위로 이동   (ex. /home/training  -----> /home)

cd 폴더명: 해당 폴더로 이동

cd / : 최상위 폴더로 이동                     (ex. /home/training/example   -------> / )

mkdir 폴더명: 폴더 생성

rmdir 폴더명: 해당 폴더 삭제

cp 복사원본 복사사본: 원본을 복사하여 사본을 만듦

rm 파일이름: 해당 파일을 삭제

mv 복사원본 복사사본: 원본을 복사하여 사본을 만들지만, 원본은 삭제함.  (이름 바꿀 때 자주 사용함.)

 

trainer3 (computer): 콘솔(터미널)과 네트워크 

w: 서버에 접속한 사람들 정보를 볼 수 있음 / TTY(콘솔 접속), pts(터미널 접속)

 

w 입력 예시

 

1) 어떤 ID로 로그인 했는지

2) 콘솔로 접속했는지 혹은 터미널로 접속했는지  tty: 콘솔, pts: 터미널  터미널은 접속한 순서대로 pts/0, pts/1, pts/2...

3) 접속한 사람의 IP

4) 로그인한 시간

5) IDLE: 지연시간, 사용자가 얼마나 오랫동안 아무것도 입력하지 않고 쉬고 있는지를 알 수 있음.

6) JCPU: 각 사용자가 CPU를 사용한 지연 시간을 보여줌.

7) PCPU: WHAT 필드에 있는 명령이 지연된 시간

8) 접속한 사용자들이 현재 어떤 명령어를 사용하고 있는지 보여줌.

 

finger -l: 사용자 정보를 더 자세히 볼 수 있음.

tty: 자신의 터미널 정보를 확인할 수 있음.

ifconfig: 현재 접속한 서버의 IP 주소를 볼 수 있음.

- write ID /dev/pts/번호 : 해당 ID를 가진 사람에게 쪽지를 보낼 수 있음.

- wall 전달하고 싶은 말: 전체에게 쪽지 보내기

 

trainer4 (mungguta): 리눅스의 디렉토리에 대한 설명

최상위 디렉토리

bin: 가장 필수적인 리눅스 실행 파일이 들어가 있음. (ex. ls, rm 등..)

- boot: 리눅스 부팅 관련 파일들과, 리눅스의 심장인 커널이 들어있음.

- dev: 컴퓨터에 설치된 하드웨어에 관한 정보들이 파일 형태로 저장되어 있음.

- etc: 많은 중요한 파일들이 들어 있음. 패스워드 파일, 쉐도우 파일, 그 외 대부분의 리눅스의 설정 파일

- home: 일반 사용자들의 디렉토리가 들어가는 곳

- lib: 많은 라이브러리 파일들이 들어가 있음.  (ex. c언어 라이브러리 파일)

- mnt: mount 명령어를 통해 마운트시킨 시디룸 등이 들어가는 디렉토리

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

- root: 루트의 home 디렉토리

- sbin: 기본 명령어를 제외한 시스템 관리용 실행 파일들이 들어있는 디렉토리입니다.

- tmp: 임시로 파일을 저장하는 디렉토리, 권한에 상관없이 누구나 이 디렉토리 파일 생성 가능

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

- var: 시스템 운영 중에 생성되는 각종 임시 파일들이 들어가 있으며, 외부 접속에 대한 로그 파일들이 저장됨.

 

특별히 중요한 역할을 하는 파일

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

- /etc/shadow: 사용자들의 패스워드가 들어있으며, 아무나 볼 수 없게 설정되어 있음.

- /etc/services: 서버가 어떤 어떤 서비스를 하는 중인지 보여줌.

- /etc/issue.net: 처음 접속할 때 나오는 화면

- /etc/motd: 로그인 후에 나오는 메세지가 들어가 있음.

- ~/public_html: 각 사용자들의 홈페이지 파일이 들어가 있음. 보통 해킹에 성공하면 이 파일을 수정해서 hacked by xxx 와 같은 문구를 남김.

 

trainer5 (goodluck): 서버의 정보 수집

- whoami: 내가 누구인지, 자신의 정보 수집

- id: whoami보다 좀 더 자세한 정보 수집 

- uname -a: 서버의 커널 버전을 알 수 있음. 서버에 아이디가 있는 상태에서 정보를 캐낼 때 가장 먼저 함.

- cat /etc/*release: 서버에 설치된 OS 버전 알아낼 수 있음.

- rpm -qa: 패키지 정보(버전), 해킹 가능 여부 판단 가능 (예전 버전인 경우 알려진 취약점으로 공략 가능)

- cat /proc/cpuinfo: 해당 서버의 CPU 정보 수집

 

trainer6 (coffee): 패스워드 파일 분석 ( cat /etc/passwd)

패스워드 파일은 한 서버를 사용하는 사용자들의 모든 정보를 기록해 놓은 파일을 의미함.

예시) root : x : 0 : 0 : Admin : /root : /bin/bash

 

cat /etc/passwd 결과의 예시

 

: 을 구분자로 7개의 필드로 나누어져 있다.

 

- 첫 번째 필드에 있는 root: 서버에 로그인할 때 사용되는 ID

- 두 번째 필드에 있는 x : 패스워드 부분, 원래는 암호화된 문자열이 있지만 보안 문제로 x로 표기

( /etc/shadow 파일에 패스워드가 담겨있고 root 권한만 열어볼 수 있음)

 

- 세 번째 필드에 있는 0: root를 0으로 본 것임. (ID가 컴퓨터 상에서 숫자로 받아들여짐.)

- 네 번째 필드에 있는 0: 사용자가 속해있는 그룹을 말해줌.

- 다섯 번째 필드에 있는 Admin: 사용자의 이름

- 여섯 번째 필드에 있는 /root: 사용자가 로그인에 성공하게 되었을 때 기본적으로 위치하게 되는 디렉토리

- 일곱 번째 필드에 있는  /bin/bash: 사용자가 처음 로그인했을 때 실행되게 할 프로그램.

 

trainer7 (to the top): 리눅스 환경에서의 압축, 압축 해제

tar 사용법

"합치기  : # tar cvf 합칠 파일 합칠 파일들"

"해제하기  : # tar xvf 해제할 파일"

  • Create  : 새로운 파일을 만드는 옵션
  • eXtract  : 압축을 해제시키는 옵션
  • View  : 압축이 되거나 풀리는 과정을 출력하는 옵션
  • File  : 파일로서 백업을 하겠다는 옵션

ex. tar cvf songs.tar *   

==> songs.tar이란 파일을 만드는데 *옵션으로 현재 디렉토리에 있는 모든 파일들을 합쳐서 만든다는 의미이다.

 

※ tar은 압축하는 프로그램이 아니라 그저 파일들을 합치는 프로그램임. tar을 사용하면 용량이 더 커짐.

그래서, 복구 측면에서 파일을 그냥 합치기만 했기 때문에 매우 빠름.

 

gzip과 함께 많이 쓰이는데, gzip은 한 번에 한 개의 파일만 압축할 수 있어서 보통 tar로 합치고 gzip으로 압축함. 

gzip 사용법

"gzip 파일이름   - 선택된 파일을 압축한다."

"gzip -d 파일이름   -선택된 파일을 압축해제한다."

 

압축 파일의 확장자

- .tar : tar 프로그램을 사용하여 압축된 파일로, 실은 압축된 것이 아니라 여러 파일이 하나로 뭉쳐져 있음.

- .gz : gzip 프로그램을 사용하여 압축된 파일임.

- .tar.gz : tar 프로그램을 사용하여 파일을 합친 후, 또 다시 gzip 프로그램으로 압축한 파일

- tgz : .tar.gz 를 합쳐서 tgz 확장자로 만든 경우

 

.tar.gz의 경우 gzip -d를 먼저 하고, tar xvf를 해주어야 함.

 

trainer8 (player): 파일을 만들고, 컴파일하는 방법

텍스트 파일 생성 방법

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

2. 원하는 내용을 주욱 써내려간다.

3. 컨트롤키와 D키를 동시에 누른다.

 

'>'은 리다이렉션으로 방향을 전환한다는 의미를 가진다. 

입력 결과를 모니터가 아닌 파일에 보냄. 즉, 출력의 방향을 전환함

왼쪽에서 출력되는 것을 받아서 오른쪽의 입력으로 보내겠다는 의미

 

만약 내용을 추가할 경우 리다이렉션을 두번 입력해야 함. 

    ex.    cat >> 내용 추가할 파일.txt

컴파일 방법

"gcc -o 파일 이름 소스파일 이름"

소스파일을 컴파일하여 정해준 파일 이름으로 실행 파일이 만들어집니다.

 

trainer9 (programming): 리눅스 권한

4가지 종류의 사용자

- 유저: 자신을 의미함. 만약 player1이라는 ID로 로그인하면 player1이라는 유저가 된다.

- 그룹: 모든 유저는 하나 이상의 그룹에 속한다.

(임의로 그룹을 변경하지 않는 한 모든 유저는 자신의 유저네임과 같은 이름의 그룹에 속하게 된다.)

 

- 아더: 이것은 유저와 그룹을 제외한 모든 다른 사람을 의미한다.

- 루트: 절대적인 권한을 가지고 있는 사용자. 이 절대적인 루트 권한을 획득하는 것이 해킹을 의미한다.

(영어 뜻 그대로 user, group, other의 의미간 담겨있네요..!)

 

id 입력 예시

 

- uid: User ID의 약자로 ID를 의미한다. 해당 리눅스에서 2009는 trainer9과 같은 의미로 사용되고 있다.

- gid: Group ID의 약자를 의미함. 특별한 일이 없다면 gid와 uid는 항상 같다.

- group: 현재 자신이 속한 그룹을 알려줌. 기본적으로 uid와 같은 그룹에 속한다.

 

파일 권한

 

파일 권한 예시

 

- rwx rwx rwx 부분

- 부분: 파일임을 알려줌.

순서대로 rwx rwx rwx는 권한을 나타내는데, 순서대로 유저의 권한, 그룹의 권한, 아더의 권한을 나타냄.

  • r: 읽기 권한

  • w: 쓰기 권한

  • x: 실행 권한

  • s: SetUID가 걸려있다는 의미, x권한도 가짐.

trainer9 trainer10 부분

순서대로 유저, 그룹을 나타낸다.

 

해석해보면, trainer9이라는 uid를 가진 사용자에게 읽고, 쓰고, 실행할 수 있는 권한이 있으며,

trainer10이라는 gid를 가진 사용자에게도 똑같은 권한이 있음.

그 외의 아더 즉, 다른 사용자들도 rwx 권한을 가짐.

 

x가 존재하는지 여부에 따라서 실행파일임을 알 수 있다.

 

trainer10 (best!): Local 해킹시 핵심이 되는 SetUID

Remote 해킹: 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 때, 아이디를 얻고자 시도하는 것을 의미함.

 

Local 해킹: 해킹하고자 하는 서버에 일반 계정을 가지고 있는 경우, 관리자 권한(root)을 얻고자 시도하는 것을 의미함.

=> SetUID를 이용함!

(SetUID가 걸린 파일의 취약점을 찾아 공략해서 루트 권한의 쉘을 획득한다.)

 

- SetUID: 일시적으로 자신의 ID를 변경하는 것을 의미함.

 

 

SetUID가 사용되는 배경

 

정말 완벽한 예시인 것 같다.. 저도 이거 읽자마자 확 와닿았으니, 혹시라도 보시는 분은 위의 사진 내용을 꼭 참고하시길 바랍니다.

 

즉, SetUID가 걸린 파일을 실행해서 나의 아이디가 root로 변경되는 것을 이용하는 것입니다.

 

지금까지 발견된 기법

- 레이스컨디션

- IFS 버그

- 링크 버그

- 버퍼 오버플로우

- 포맷 스트링 버그

등....

 

이러한 버그로 루트 권한을 넘겨준 파일들

- userhelper

- imwheel-solo

- restore

- screen 

등....

 

SetUID가 걸려있는 파일 찾기

find / -perm -4000

=> / 에서부터 적어도 SetUID가 걸린 모든 파일을 찾아라라는 의미

-는 적어도라는 의미, -perm은 권한을 찾겠다라는 옵션, '4'는 SetUID, '000'은 rwx 모두를 의미함.

 

find 명령어의 옵션

-perm: 권한과 일치하는 파일을 찾는다. 

-name: 이름과 일치하는 파일을 찾는다.

-user: 유저와 일치하는 파일을 찾는다.

-group: 그룹과 일치하는 파일을 찾는다.

 

ex. find / -user root -perm -4000 :루트의 권한으로 SetUID가 걸린 파일을 찾아라.

 

해커스쿨 레벨별 통과하는 방법

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

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

-----> find / -user level4 -perm -4000

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

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

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

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

 

끝~~

 

더보기

공부하는 것보다... 정리하는 시간이 더 오래 걸린 것 같다...

앞으로는 더 깔끔하고 효율적으로 작성해야겠다.

728x90