*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다.
FTZ training 계정/비번
1. trainer1/trainer1
2. trainer2/linuxer
3. trainer3/computer
4. trainer4/mungguta
5. trainer5/goodluck
6. trainer6/coffee
7. trainer7/to the top
8. trainer8/player
9. trainer9/programming
10. trainer10/best!
ls : 'list segments'의 약자로 디렉토리들과 파일들을 보여주는 기본적인 명령어
ls -l : 파일 형태, 퍼미션, 크기등을 출력.
ls -a : 숨긴 파일도 출력.(리눅스에선 파일 앞에 .을 숨긴 파일로 인식함.)
파일 성격: -은 특수파일, d는 디렉토리, l은 링크
파일 성격 퍼미션 유저 그룹 용량 생성 시간 이름
-rw-rw-r-- 1 trainer1 trainer1 779 9월 24 18:37 start.txt
drwxr-xr-x 2 trainer2 trainer2 1024 9월 24 11:52 tmp
pwd : 현재 경로 출력.
cd 절대경로 or 상대경로 : 경로로 이동.
*참고
- 절대경로 VS 상대경로 : 절대경로는 고유한 경로. 위치, 주소같은 느낌, 상대경로는 현재 위치한 곳의 경로를 기준으로한 경로.
- 절대경로 예) /dev/null , /home 등
- 상대경로 예) ./ , ../ 등
mkdir 디렉토리 : 디렉토리 생성.
rmdir 디렉토리 : 디렉토리 삭제.
cp 원본파일 파일1: 원본파일을 파일1이라는 이름으로 복사.
rm 파일 : 파일 삭제.
mv 파일 : 파일 이동, 이름 수정.
터미널 VS 콘솔 : 텔넷을 통해 접속하면 터미널, 직접 리눅스를 설치하고 로그인하면 콘솔
터미널 : 텍스트 입출력 환경
콘솔 : 컴퓨터 조작에 쓰이는 입출력 장치, 물리적 터미널
w : 서버 접속자 보기
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 12:51pm 0.00s 0.20s 0.03s w
guest pts/0 210.95.24.129 03:21am 3.10m 0.12s 0.01s -bash
USER : 로그인한 ID
TTY : 콘솔/터미널 (tty는 콘솔, pts는 터미널)
FROM : 접속한 컴퓨터 IP (root는 콘솔 접속이라 ip가 나타나지 않음.)
LOGIN@ : 로그인 시간
IDLE : 최종 명령 수행 후 대기시간(아무것도 안한 시간)
JCPU : TTY 필드에서 사용되는 장치가 사용하는 모든 프로세스의 CPU 사용시간을 나타냄.
PCPU : WHAT 필드에 나와있는 프로세스의 CPU총 사용시간(명령 지연시간)
WHAT : 현재 어떤 명령 사용하는 지를 보여줌.
finger -l : 원격, 로컬 유저 정보 보기. /etc/passwd에서 불러와서 보여줌. w보다 조금 더 자세하게 정보를 볼 수 있음.
tty : 자신의 터미널 정보 확인
ifconfig : 현재 활성화된 네트워크 인터페이스의 정보 출력. 현재 접속한 서버의 ip볼 수 있음.
write ID /dev/pts/pts번호 : 쪽지 보내기.
wall 내용 : 모두에게 쪽지 보내기.
*디렉토리
- /bin : 중요하고 필수적인 리눅스 실행 파일들이 위치한 곳, ls같은 것들도 이곳에 위치함.
- /boot : 리눅스 부팅 관련 파일
- /dev : 하드웨어 관련된 정보
- /etc : passwd파일, shadow파일, 리눅스 설정 파일 등이 위치한 곳
- /home : 일반 사용자들의 홈 디렉토리, guest,trainer1-10, level1-10도 이 디렉토리에 속해있다.
- /lib : 라이브러리 파일들이 위치한 곳
- /mnt : 마운트 시킨 시디롬 등이 들어가는 곳
- /proc : 프로세스들이 파일 형태로 저장되는 곳
- /root : 루트의 홈 디렉토리
- /sbin : 기본명령 제외한 시스템 관리용 실행파일 위치한 곳.
- /tmp : 임시로 파일 저장하는 디렉토리(누구나 이 디렉토리에 엑세스 가능)
- /usr : 다양한 프로그램들 설치된 곳
- /var : 시스템 운영중 생성되는 임시파일, 외부 접속에 대한 로그 파일들이 저장된 곳
*파일
/etc/passwd : 사용자들에 대한 정보가 저장되어 있는 파일. 보안상의 문제로 비밀번호는 더 이상 저장되지 않는다.
/etc/shadow : 실질적으로 비밀번호가 저장되어있는 파일. root만 접근가능.
/etc/services : 서버가 무슨 서비스 활성화중인지 보여줌.
/etc/issue.net : 처음 접속할 때 나오는 화면.
/etc/motd : 로그인 후 나오는 메세지
~/public_html : 각 사용자들의 홈페이지 파일. 해킹에 성공하면 수정해서 hacked by xxx같은 문구를 남기기도 함.
*참고: ~ 는 홈 디렉토리를 의미함.
whoami : 자신에 대한 정보
id : 자세한 자신에 대한 정보
cat /etc/passwd : 서버에 활동중인 사람들의 간단한 계정 정보
uname -a : 커널 버전 확인, 모든 정보 출력.
cat /etc/*release : 설치된 OS 버전 출력.
*참고: * 는 정규 표현식으로 뒤에 release가 포함된 파일을 의미함. 이를 쓰는 이유는 배포판마다 앞에 붙는 이름이 다르기 때문.
rpm -qa : 패키지 정보 출력.
cat /proc/cpuinfo : cpu 정보 출력.
*/etc/passwd 파일 분석
ex)
root : x : 0 : 0 : Admin : /root : /bin/bash
1 2 3 4 5 6 7
1 : 로그인 할 때 사용되는 ID (여기선 root)
2 : 패스워드(보안상의 이유로 현재는 /etc/shadow에 저장됨)
3 : 컴퓨터에 입력되는 사용자 - 컴퓨터 입장에선 숫자로 받아들임. (여기서 0은 root를 의미함)
4 : 해당 사용자가 속한 그룹
5 : 사용자의 이름
6 : 사용자의 홈 디렉토리
7 : 처음 로그인 했을 때 실행되는 프로그램
tar cvf 합쳐질파일 합칠파일들 : 파일들을 합침. 백업용으로 많이 사용.
tar xvf 해제할파일 : 합쳐진 파일 해제.
*참고: c는 create, x는 extract, v는 view,f는 file을 의미함.
- c : 새 파일을 생성시킨다는 옵션
- x : 합쳐진 파일들을 다시 해제시킨다는 옵션
- v : 과정을 출력하는 옵션
- f : 파일로서 백업을 하겠다는 옵션
gzip 파일 : 압축
gzip -d 파일 : 압축 해제
*압축 확장자
- .tar : tar로 합쳐진 파일
- .gz : gzip으로 압축된 파일
- .tar.gz : tar로 합쳐진 뒤 압축된 파일
- .tgz : tar로 합쳐진 뒤 압축된 파일(위와 동일)
cat > 파일 : 파일 생성, 입력되는 내용을 파일안에 적음.
*참고 : >는 리다이렉션을 의미함. 리다이렉션은 입출력의 방향을 바꿀 수 있음.
기본적인 문법 형태는 아래의 형태임.
명령어 > 파일
위의 줄은 명령어의 표준 출력이 파일에 기록되는 것을 의미함.
기본적으로 >는 1>이 생략된 것으로, 1은 표준 출력, 2는 표준 오류, 0은 표준 입력을 의미함.
만약 파일에 덧붙여서 추가하고 싶다면 >>를 사용해 내용을 추가할 수 있다.
명령어 2>/dev/null 같이 사용하여 오류 메세지를 /dev/null이라는 일종의 쓰레기통?에 버려서 오류메세지를 안볼 수 있다.
gcc -o c파일1 파일2 : c파일1을 파일2로 컴파일.
*id 명령어 결과 분석
uid=2009(trainer9) gid=2009(trainer9) groups=2009(trainer9)
- uid : User ID약자로 컴퓨터가 알아보기 쉽게 숫자를 부여한 것
- gid : Group ID의 약자로 특별히 변경하지 않는 한 gid와 uid는 같음.
- groups : 현재 자신이 어떤 그룹에 속해 있는지를 보여줌.
*퍼미션 분석
Read : 읽기
Write : 쓰기
eXecute : 실행
*참고 : 쉘 스크립트같은 파일들은 실행시키기 위해선, execute뿐만 아니라 read 퍼미션도 필요하다. 읽고 해석하는 과정이 추가되기 때문.
-rwxrwxrwx 1 trainer9 trainer10 5 10월 20 21:35 test1
1 2 3 4 5 6
1 : 유저의 권한
2 : 그룹의 권한
3 : 아더의 권한
4 : 유저 이름
5 : 그룹 이름
6 : 파일 이름
*SetUID
Local 해킹 : 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때, 관리자 권한을 얻고자 시도하는 것
Remote 해킹 : 해킹하고자 하는 서버에 ID를 얻고자 시도하는 것
*참고 : Remote 해킹에는 여러가지 방법이 쓰일 수 있음. 예를 들어 아이디와 비밀번호를 무작위로 대입하는 방법부터, 데몬의 취약점을 공략하거나 계시판이나 방명록을 이용해 접속하는 방법까지 다양한 방법이 있음.
SetUID : Local 해킹에서 관리자 권한을 탈취하는 데 중요한 역할을 함. SetUID가 걸린 파일은 일시적으로 UserID가 변경되게 됨.
*참고
- 기법: 레이스 컨디션, IFS버그, 링크 버그, 버퍼 오버플로우, 포맷 스트링 어택 ...
- 이러한 버그에 의해 루트 권한을 넘겨준 파일 : userhelper, imwheel-solo,restore,screen ...
*SetUID가 걸린 파일을 찾는 방법
find / -perm -4000 : / 부터 SetUID가 걸려있고 000 이상의 권한을 가진 파일을 찾는다.
*참고
-perm : 권한과 일치하는 파일을 찾는 옵션
-name : 이름이 일치하는 파일을 찾는 옵션
-user : 유저와 일치하는 파일을 찾는 옵션
-group : 그룹과 일치하는 파일을 찾는 옵션
*알면 좋은 것
- 일반 퍼미션
파일의 퍼미션 각 자리는 8진수로 읽는다. 퍼미션 rwx는 2진수 111로 나타내고 8진수 7로 읽는다. 즉 각자리에 r, w, x가 표시되면 1로 -가 표시되면 0으로 대체하는 것이다. 때문에 rwx는 111로, r--는 100가 된다. 어떤 파일의 퍼미션이 751이라면 rwxr-x--x로 읽을 수 있다.
- 특수 퍼미션
SetUID,SetGID,Sticky bit 까지 세가지 특수 퍼미션을 8진수로 표시해 일반 퍼미션의 앞에 써준다. SetUID,SetGID가 설정되고 Sticky bit가 설정되지 않았다고 가정하면 2진수로 110으로 표현되고 이는 8진수로 6을 나타낸다.
- 예) 파일 퍼미션이 751이고 SetUID가 붙어있으면, 4751이 되고, rws-wx--x로 표시됨. SetUID와 SetGID는 실행퍼미션 자리에 s로 표시됨. (실행권한이 없다면 대문자 S로 표시됨. Sticky bit도 t로 표시되지만 실행권한이 없다면 T로 표시함.)
*참고
- SetUID : 일시적으로 UID변경
- SetGID : 일시적으로 GID변경
- Sticky bit : 퍼미션이 777이더라도 root를 제외하고 소유자만 파일이나 디렉토리를 삭제할 수 있다.
- umask : 파일이나 디렉토리를 초기에 생성할 때 기본적으로 퍼미션을 설정할 때 사용됨. 기본 파일의 퍼미션은 666, 디렉토리는 777로 이값들에 umask값을 빼서 초기에 설정될 퍼미션을 알 수 있음. umask의 기본값은 0002임.
'WARGAME > FTZ' 카테고리의 다른 글
FTZ level5 풀이 (0) | 2022.02.24 |
---|---|
FTZ level4 풀이 (0) | 2022.02.17 |
FTZ level3 풀이 (0) | 2022.02.15 |
FTZ level2 풀이 (0) | 2022.02.12 |
FTZ level1 풀이 (0) | 2022.02.12 |