본문 바로가기

시스템 해킹 (Pwnable)/해커스쿨 FTZ

[해커스쿨 FTZ] 해커스쿨 FTZ 트레이닝 레벨 1~10 정리

728x90
반응형

명령어

 

ls : 현재 위치를 기준으로 설치된 파일과 디렉토리 출력

ls -l : -l 옵션은 파일과 디렉토리를 구분하여 출력

ls -a : -a 옵션은 숨겨진 파일까지 출력

 

pwd : 현재 경로 출력

cd .. : 상위 디렉토리로 이동

cd s0ng : s0ng 디렉토리로 이동

cd / : 최상위 디렉토리(루트 디렉토리)로 이동

mkdir s0ng : s0ng이라는 디렉토리 생성

rmdir s0ng : s0ng이라는 디렉토리 삭제

cp s0ng hack : s0ng 파일을 hack 파일로 복사

rm s0ng : s0ng 파일을 삭제

mv s0ng hack : s0ng 파일을 hack 파일로 복사하고 s0ng 파일 삭제

 

w : 서버에 접속중인 사람 확인

finger -l : 사용자들의 자세한 정보 출력

tty : 자신의 터미널을 확인

ifconfig : 현재 접속한 서버의 ip 주소를 출력

write s0ng /dev/pts/pts번호 : s0ng 사용자에게 쪽지 보내기

wall s0ng : 모든 사용자에게 s0ng이라는 내용의 쪽지 보내기

 

whoami : 자신이 누구인지를 출력

id : whoami보다 자세한 자신의 정보 출력

uname -a : 서버의 커널 버전을 출력

cat /etc/*release : 서버에 설치된 OS의 버전 출력

rpm -qa : 패키지에 관한 정보 출력

cat /proc/cpuinfo : 서버의 cpu 정보를 출력

 

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

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

tar -c : 새로운 파일을 만드는 옵션 (Create)

tar -x : 압축을 해제하는 옵션 (eXtract)

tar -v : 압축이 되거나 풀리는 과정을 출력하는 옵션 (View)

tar -f : 파일로서 백업 하겠다는 옵션 (File)

gzip 파일이름 : 선택된 파일을 압축

gzip -d 파일이름 : 선택된 파일을 압축해제

 

cat > s0ng.txt : s0ng.txt 파일에 원하는 내용을 입력하여 생성

cat >> s0ng.txt : s0nt.txt 파일에 내용이 있고 뒤에 새로운 내용을 추가

gcc -o s0ng s0ng.c : s0ng.c 소스코드를 컴파일. (gcc -o 프로그램이름 소스파일이름)

find / -perm -4000 : 서버 전체에서 SetUID가 걸린 파일 검색 ( / 에서부터 적어도 SetUID가 걸린 모든 파일을 찾아라)

find -perm : -perm 옵션은 권한과 일치하는 파일을 검색

find -name : -name 옵션은 이름과 일치하는 파일을 검색

find -user : -user 옵션은 유저와 일치하는 파일을 검색

find -group : -group 옵션은 그룹과 일치하는 파일을 검색

 

 

  • "프롬프트"는 항상 대기상태에서 어떤 명령이 들어오기를 기다림
  • 리눅스에서는 "폴더"라는 단어보다 "디렉토리"라는 단어를 더 많이 사용하고, 둘의 의미는 동일
  • 숨겨진 파일은 파일명 가장 앞에 "."이 위치
  • drwxrwxrwx (파일 권한)에서 가장 왼쪽의 문자가 "-"면 파일, "d"라면 디렉토리

 

  • tty로 나타나면 콘솔로 접속한 사용자
  • pts로 나타나면 터미널로 접속한 사용자
  • tty, pts 뒤의 숫자는 접속한 순서 (ex. 3명이 동시에 터미널로 접속하면 각각 pts/0, pts/1, pts/2)
  • 콘솔로 접속한 사용자는 ip 주소가 나타나지 않음 (ex. root 사용자)
  • 지연시간은 사용자가 얼마나 오랫동안 아무 입력도 하지 않고 쉬고 있는지를 출력

 

  • bin 디렉토리는 필수적인 리눅스 실행 파일들이 존재. ls, rm 모두 bin 디렉토리에 존재
  • boot 디렉토리는 리눅스 부팅 관련 파일들과 커널이 존재
  • dev 디렉토리는 설치된 하드웨어에 관한 정보들이 파일 형태로 존재
  • etc 디렉토리는 패스워드 파일, 쉐도우 파일, 리눅스 설정 파일 등 중요한 파일들이 존재
  • /etc/passwd 파일은 서버를 사용하는 모든 사용자들에 대한 간단한 정보가 적힘
  • /etc/shadow 파일은 사용자들의 패스워드가 적힘. 아무나 조회 불가능
  • /etc/services 파일은 서버가 어떠한 서비스를 하는 중인지 보여줌
  • /etc/issue.net 파일은 처음 접속될 때 출력되는 파일
  • /etc/motd 파일은 로그인 후에 나오는 메세지가 적힘
  • ~/public_html 파일은 각 사용자들의 홈페이지 파일이 적힘
  • home 디렉토리는 사용자들의 디렉토리가 존재
  • lib 디렉토리는 라이브러리 파일들이 존재
  • mnt 디렉토리는 mount 명령을 사용하여 마운트시킨 시디롬, 플로피 디스크 등이 존재
  • proc 디렉토리는 프로세스들이 파일 형태로 존재
  • root 디렉토리는 루트의 홈 디렉토리가 존재 (일반 사용자들은 home 디렉토리에 저장됨)
  • sbin 디렉토리는 기본 명령을 제외한 시스템 관리용 실행 파일들이 존재
  • tmp 디렉토리는 임시로 파일을 저장하는 디렉토리. 권한에 상관없이 파일 생성 가능
  • usr 디렉토리는 다양한 응용 프로그램들이 존재
  • var 디렉토리는 시스템 운영 중에 생성되는 임시 파일들이 존재. 외부 접속에 대한 로그 파일들이 저장됨

 

  • 2.2.18 이전 버전의 모든 커널에는 취약점이 존재
  • root 권한이란 리눅스나 유닉스에서 모든 파일을 관리하는 절대적인 관리자 권한을 의미

 

  • /etc/passwd 파일의 사용자 정보는 root : x : 0 : 0 : Admin: /root : /bin/bash 형태로 저장
  • 첫 번째 필드 root는 서버에 로그인할 때 사용되는 아이디
  • 두 번째 필드 x는 사용자들의 패스워드를 x로 표현
  • 세 번째 필드 0은 사용자를 표시. root라는 이름을 컴퓨터는 0으로 해석
  • 네 번째 필드 0은 사용자의 그룹을 표시. 그룹 또한 root로 컴퓨터는 0으로 해석
  • 다섯 번째 필드 Admin은 사용자의 이름을 표시
  • 여섯 번쨰 필드 /root는 사용자가 로그인에 성공했을 때 기본 디렉토리를 의미
  • 일곱 번째 필드 /bin/bash는 사용자가 로그인에 성공했을 때 실행되는 프로그램을 의미

 

  • gzip 명령은 윈도우의 winzip의 원조 프로그램
  • tar 명령으로 뭉친 프로그램들은 용량이 더 커짐. 백업 프로그램에 비해 속도 빠름 (압축 프로그램이 아님)
  • gzip 명령어는 한 번에 한 개의 파일만 압축 가능
  • tar 확장자는 tar 명령어를 사용하여 여러 파일들이 하나로 뭉쳐진 파일 (압축 X)
  • gz 확장자는 gzip 명령어를 사용하여 압축된 파일
  • tar.gz 확장자는 tar 명령어로 파일을 합친 후, gzip 명령어로 압축한 파일
  • tgz 확장자는 tar.gz 확장자를 합쳐서 tgz라는 확장자로 만드는 경우도 존재

 

  • 절대경로란 최상위 디렉토리인 루트(/)부터 시작되는 경로. (ex. cd /home/s0ng)
  • 상대경로란 현재 디렉토리를 기준으로 설정하는 경로 (ex. cd home/s0ng)

 

  • "Permission Denied" 오류는 권한 밖의 파일에 접근하였다는 오류
  • 리눅스의 4가지 종류의 사용자 user, group, other, root
  • user : 자신을 의미 (ex. 만약 s0ng이라는 아이디로 로그인했으면 s0ng이라는 user가 됨)
  • group : 모든 User는 하나 이상의 그룹에 속함. 임의로 변경하지 않는 한 모든 유저는 자신의 user 이름과 같은 그룹에 속함
  • other : user와 group을 제외한 모든 다른 사람들을 의미
  • root : 절대적인 권한을 가진 사용자. 어떠한 권한에도 구애받지 않고 파일 제어 가능
  • id 명령어를 입력하면 uid, gid, groups 항목이 출력
  • uid : user id의 약자. uid에는 root=0 처럼 컴퓨터가 해석한 숫자가 입력되어 있음
  • gid : group id의 약자. 각 user마다 gid를 가지고 있고 다른 사람을 자신의 gid를 가진 그룹에 속하게 할 수 있음
  • groups : 현재 자신이 어떤 group에 속해 있는지 출력
  • rwx는 순서대로 읽기 권한(read), 쓰기 권한(write), 실행 권한(execute)를 의미
  • drwxrwxrwx의 rwx는 순서대로 "user의 권한", "group의 권한", "other의 권한"을 의미
  • ls 명령어를 사용시 -rwxrwxxrwx  1  s0ng  s0ng2  5  9월  25  1:10 file 과 같이 표시
  • -rwxrwxrwx에서 "-"는 파일을 의미, "rwx"는 user에게 rwx의 권한, 다음 "rwx"는 group에게 rwx의 권한, 마지막 "rwx"는 other에게 rwx의 권한이 존재함을 의미
  • s0ng은 user, s0ng2는 group을 의미. 이 user와 group을 제외한 모든 id는 자동으로 other으로 간주
  • 5는 파일 용량, 9월 25 1:10은 파일 생성 날짜와 시간, file은 해당 파일명을 의미

 

  • remote 해킹은 해킹하고자 하는 서버에 id를 가지고 있지 않을 때 id를 얻고자 시도하는 방법
  • local 해킹은 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때 관리자 권한(root)을 얻고자 시도하는 방법
  • SetUID는 "일시적으로 자신의 ID를 변경하는 것"을 의미
  • -r-s--x--x 일 때, s가 SetUID를 의미. s가 x를 포함하고 있음. user에게 r,x의 권한이 존재. 하지만 SetUID가 존재하기 때문에 모든 사용자가 저 파일을 실행할 때 user의 권한을 가지게 됨
  • find / -perm -4000에서 -는 "적어도"를 의미. -perm은 "권한을 갖겠다"를 의미. 4가 SetUID를 의미. 000은 "rwx 모두"를 의미

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

 

  1. 자신의 아이디가 level13이라고 해보자.
  2. level4로 넘어가기 위해서, level4의 권한으로 SetUID가 걸린 파일을 찾는다.
    -> find / -user level4 -perm -4000
  3. 그럼 한 개 이상의 파일이 발견될 것이다.
  4. 그 파일은 임의로 작성된 "멍청한 파일"이다.
  5. 그 파일을 이용하여 level4의 쉘을 얻으면 성공!.
  6. my-pass라고 입력하면 level4의 패스워드가..
728x90
반응형