서버를 구축하고, trainer1 ~ trainer10까지 코스를 완주했습니다. 생각보다 내용이 엄청나게 많지는 않았지만, 꾸준하게 복습하고 궁금한 것은 더 찾아보면서 공부해야 할 것 같습니다.
trainer1 (trainer1): 파일, 디렉토리 살펴보는 방법
리눅스 접속시 나타나는 프롬프트
[trainer1@ftz trainer1]$
=> trainer1: 접속 ID, ftz: 서버, trainer1: 현재 위치
- ls: 현재 위치를 기준으로 컴퓨터에 설치된 폴더들과 파일들을 보여줌.
- 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(터미널 접속)
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
: 을 구분자로 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의 의미간 담겨있네요..!)
- 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가 걸린 파일을 실행해서 나의 아이디가 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의 패스워드가 나온다.
공부하는 것보다... 정리하는 시간이 더 오래 걸린 것 같다...
앞으로는 더 깔끔하고 효율적으로 작성해야겠다.