명령어
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 모두"를 의미
해커스쿨의 레벨별 해킹을 통과하는 방법
- 자신의 아이디가 level13이라고 해보자.
- level4로 넘어가기 위해서, level4의 권한으로 SetUID가 걸린 파일을 찾는다.
-> find / -user level4 -perm -4000 - 그럼 한 개 이상의 파일이 발견될 것이다.
- 그 파일은 임의로 작성된 "멍청한 파일"이다.
- 그 파일을 이용하여 level4의 쉘을 얻으면 성공!.
- my-pass라고 입력하면 level4의 패스워드가..
'시스템 해킹 (Pwnable) > 해커스쿨 FTZ' 카테고리의 다른 글
[해커스쿨 FTZ] 해커스쿨 FTZ Level 5 풀이 (0) | 2020.09.25 |
---|---|
[해커스쿨 FTZ] 해커스쿨 FTZ Level 4 풀이 (0) | 2020.09.25 |
[해커스쿨 FTZ] 해커스쿨 FTZ Level 3 풀이 (0) | 2020.09.25 |
[해커스쿨 FTZ] 해커스쿨 FTZ Level 2 풀이 (0) | 2020.09.25 |
[해커스쿨 FTZ] 해커스쿨 FTZ Level 1 풀이 (0) | 2020.09.25 |