Hackerschool FTZ: 트레이닝 1-10 풀이
아니 홈페이지가 싸이 감성 아니냐며...
어쨌든 트레이닝 존을 모두 클리어 해야 Level 1 풀이를 할 수 있다.
trainer1으로 접속해주고.. 총 10단계로 구성되어 있다고 함.
접속ID랑 현재위치 확인
가장 기초적인 명령어 ls부터 알려준다. 참고로 리눅스는 대소문자를 구분하기 때문에 이점 유의하기.
ls만으로는 디렉터리인지 파일인지 구분이 안되니 ls -l도 사용해보기.
맨 앞 부분을 확인하면 파일 타입을 알 수 있는데, -로 되어 있으면 파일, d로 되어 있으면 디렉터리이다.
아놔 몇가지 퀴즈 풀었는데 리눅서의 기질이 보인다고 해줌 ㅠ
리눅스 첨 공부할 때 해커스쿨로 시작할걸 그랬어....
training1에서는 ls 명령어와 -al 옵션을 공부했다.
바로 trainer2로 접속해보았다.
training2에서는 디렉터리, 디렉터리 간 이동, 새로운 디렉터리 형성, 삭제, 파일 복사, 이동, 삭제 등에 대해 배운다고 한다.
참고로 pwd는 현재 나의 경로를 의미함
굉장히 자주 쓰이는 cd 명령어.
/home/trainer2에서 한단게 위로 가려면 cd ..라고 입력해주면 된다.
다시 trainer2로 가려면 cd trainer2 해주면 됨.
최상위 디렉터리는 /
새로운 디렉터리 만드는 명령어는 mkdir
삭제하는 명령어는 rmdir
make directory, remove directory의 줄임말이라고 보면 된다.
복사: cp 원본 사본
이동: mv 원본 사본
trainer3이다.
터미널과 콘솔은 다른 의미.
텔넷을 통해 접속한 경우 터미널을 통했다. 컴퓨터에서 리눅스 설치 및 부팅하여 로그인한 것은 콘솔을 통해 접속했다고 한다.
w 명령어로 서버에 어떤 사람들이 접속해있는지 확인
2번 TTY가 바로 콘솔로 접속했는지, 터미널로 접속했는지를 보여주는 것이다. tty가 콘솔이고, pts는 터미널 접속이다. 뒤에 숫자는 몇번째 터미널로 접속했는지 보여줌.
finger -l 명령어
telnet... 에 대해서 잘 공부했다.
trainer4
bin: 필수적인 리눅스 실행 파일이 들어 있음(ls, rm)
boot: 리눅스 부팅 관련 파일, 커널
dev: 하드웨어에 관한 정보 파일 형태로 저장
etc: pw 파일, 쉐도우 파일, 리눅스 설정 파일
home: 일반 사용자 디렉터리
lib: 라이브러리 파일
mnt: mount 명령을 사용하여, 마운트 시킨 시디룸, 플로피 디스컷 등이 들어가는 디렉터리
proc: 프로세스들이 파일 형태로 저장되는 디렉터리
root: 루트의 홈 디렉터리가 저장되는 곳
sbin: 기본 명령을 제외한 시스템 관리용 실행 파일들이 들어있는 디렉터리
tmp: 임시로 파일 저장하는 디렉터리.. 권한 상관 없이 누구나 파일 생성 가능
usr: 다양한 응용 프로그램들이 설치
var: 시스템 운영 중에 생성되는 각종 임시 파일들이 들어가 있음. 외부 접속에 대한 로그 파일 모두 이곳에 저장
그렇다고 합니다..
문제도 풀어주고요..
trainer5
정보를 수집하는 방법에 대해 배운다고 합니다..
내가 누구인지 알고 싶을 때.. whoami
id는 uid, gid, groups 까지 모두 나온다.
커널 버전은 무엇일까? 커널은 리눅스의 심장부 역할을 하는 파일로, 이 커널의 버전에 따라 리눅으 성능도 차이가 난다. 해킹을 할 때 커널을 이용한 해킹도 많은데, 서버에 아이디가 있는 상태에서 정보를 캐낼 때 먼저 하는 것이 바로 이 커널 버전을 보는 것..
uname -a
여기서 커널 버전은 2.4.20이다. 2.2.18 이전 버전 커널들은 취약점이 있다고 함.
release 앞에 *는 왜 붙였을까
패키지 정보 얻는 방법: rpm -qa
마지막으로, 해당 서버의 cpu 정보를 수집하는 방법을 알아보자.
cat /proc/cpuinfo
trainer6: 패스워드 파일 분석 방법
총 7개의 필드가 있음.
-> 사용자 아이디, 패스워드 (x는 shadow 파일에 저장되어 있음을 의미), UID, GID(이때 root는 0), 사용자 이름(요즘은 이 필드 잘 안씀), 로그인에 성공했을 때 기본적으로 위치하는 디렉터리, 로그인 했을 때 실행되는 프로그램
trainer 7: 압축, 해제하는 방법
압축은 주로 tar, gzip 이렇게 두 가지를 사용함.
tar cvf 합칠 파일 합칠 파일들
tar xvf 해제할 파일..
c: create
x: extract
v: View (압축되거나 풀리는 과정을 출력하는 옵션)
f: File(파일로서 백업)
그런 tar 명령은 파일을 압축하는 프로그램이 아님. 그냥 합쳐버리는 애임. 백업용 프로그램으로는 최고. 또한 gzip은 한번에 한개의 파일만 압축할 수 있음. 즉, 3개의 파일이 있으면 gzip을 사용했을 때 3개의 파일이 1개로 압축되는것이 아니라, 3개의 파일이 각각 3개의 압축파일로 생성이 되는거임.
그래서 tar와 gzip을 같이쓴다고 한다... tar로 파일을 하나도 합치고, gzip으로 압축하기..
gzip 파일 이름 (압축)
gzip -d 파일 이름 (해제)
tar는 tar 압축, gz는 gzip 압축, tar.gz는 tar -> gz 압축. 또는 tgz라고도 사용
bandit overthewire 워게임에서 tar, gzip 압축, 해제 문제가 꽤 나와서 얘네가 뭔지는 대충 알고 있었지만 사용법이 귀찮고, 복잡해보였는데 이번 training에서 제대로 이해할 수 있었다.
trainer 8: 파일 만들고, 컴파일하고, 실행시키는 방법을 배워보장.
리다이렉션에 대해서 배운다... 입력 결과를 모니터가 아닌 파일로 보내기 위해!
cat > 파일이름.txt (내용 입력하고 ctrl+d 누르면 저장됨)
cat >> 파일이름.txt는 생성 아니고 추가~~
프로그램 소스 파일 만드는 법도 알아봅시다..
gcc -o 프로그램 이름 소스파일 이름
내가 만들려고 하는 프로그램 이름이 먼저 오고, 그 뒤에 소스 파일 이름이 와야 한다.
절대 경로를 아는 방법: pwd
trainer9 입니다..
Permission(권한)에 대해서 알아봅시다..
권한도 user, group, other 이렇게 3가지로 나뉨. + root
이걸 알기 위해서? id를 입력하면 된다..
권한 부분도 공부..
rwx는 읽기, 쓰기,, 실행 권한임다.
읽기 권한: 읽는 권한
쓰기 권한: 파일 수정 권한. cat, vi 등
실행 권한: exe, bat, com 같은거 실행.. 그런데 리눅스에서는 이 확장자만 보고 실행파일인지 아닌지 알 수 없다고 함. 예를 들어 linux.exe라는 파일은 이름만 보고 실행이 되는지 안되는지 알 수 없다고..! 오직 실행권한만 보고 판단한다고 한다. 문자 x가 있어야만.. 실행파일이라고 판단..
마지막 트레이닝.. Local 해킹시 핵심이 되는 SetUID에 대해 알아본다.
해킹은 Remote랑 Local 해킹이 있는데, remote는 해킹하려는 서버에 아이디가 없을 때, local은 서버에 일반 계정은 가지고 있고 root 권한을 알려고 해킹할 때...
SetUID를 알면 관리자 권한을 얻을 수 있다. 즉. ID를 변경한다라는 해석이 됨. (일시적으로!)
일시적인 아이디 변경.. 쉐도우 파일은 루트의 권한으로 변경이 가능해짐. 즉. SetUID 걸린 파일이 실행되면 내 아이디가 루트 권한을 얻었다가 다시 돌아오는 것.
1000자를 넘어 프로그램에 에러가 날 때 그 순간을 이용해 /bin/bash 파일을 실행하도록 조작함.. joe 파일이 실행되는 그 동안 루트의 아이디로 변경되고, 그 상태에서 /bin/bash를 실행하니 결과적으로 루트 권한 쉘을 획득한 것임.
SetUID가 걸려있는지 확인하는 방법
x가 있어야 할 자리에 s가 있다. (s가 x를 포함하기 때문)
root에게 SetUID가 걸려있기 때문에 어느 사용자건 저 파일을 실행할 때는 root 권한을 가진다.
SetUID가 걸린 파일을 찾는 방법은?
-> find / -perm -4000
/ 경로에서부터 적어도 SetUID가 걸린 모든 파일을 찾아라
왜 적어도라는 말이 붙었냐면, -4000에 -가 붙었기 때문. 그냥 4000이 붙으면 4000에만 해당되는 값만 찾아야 한다.
find 명령에는 -perm, -name, -user, -group 대표적으로 4가지 옵션을 사용할 수 있다. -perm은 권한, -name은 파일명, -user는 유저명, -group은 그룹명
마지막 트레이닝..
내 아이디가 level13이라고 가정하고, level 14로 넘어가기 위해선 level14의 권한으로 SetUID가 걸린 파일을 찾으면 된다.
-> find / -user level14 -perm -4000
그럼 한 개 이상의 파일이 발견될 것.
임의로 작성된 "멍청한 파일"이 있는데 이 파일을 이용해 level14의 쉘을 얻으면 성공이다.
my-pass라고 입력하면 level14의 패스워드가들어있을 것이다...
이거 지금 하는건가..?
어쨌든 트레이닝 1~10 끝
\