환경설정
1. VMware 를 통한 가상환경 구축
2. PuTTy 를 통해 linux 환경 구축
Part. Training 1 ~ 10
● 리눅스의 단축어에 대해서 배운다.
pwd : 현재 나의 위치를 가르켜준다.
ls : 현재 내가 있는 위치의 파일, 디렉토리들을 보여준다.
ls -l : ls 에서 더 많은 정보들을 알려준다.
_rw_rwxrwx : 첫번째 글자는 파일의 특성을 알려준다.
0번째 value가 _ 일 경우, 파일을 의미한다.
1번째 value가 d 일 경우, 디렉토리(directory) 를 의미한다.
ls -a : 숨겨진 파일, 디렉토리들을 보여준다.
ls -al : ls -a 에서 더 많은 정보들을 알려준다.
cd .. : 경로를 올라간다.
ex) /home/sunja → /home
cd sunja : 경로를 내가 원하는 위치로 내려간다.
ex) /home → /home/sunja
cd / : root 경로로 올라간다.
ex) /home/sunja → /
mkdir : 디렉토리를 만든다.
rmdir : 디렉토리를 제거한다.
mv : 파일을 만든다.
rm : 파일을 제거한다.
cp ( cp operand1 operand2 ) : operand1 을 operand2 로 복사한다.
mv ( mv operand1 operand2 ) : operand1 을 operand2 로 복사한 뒤, operand1 은 삭제된다.
w → 현재 서버에 접속해있는 사람들의 목록을 볼 수 있다.

1) 어떤 ID 로 접속했는지 나타나진다.
2) 콘솔로 접속했을 시에는, tty 로 나타남.
터미널로 접속했을 시에는, pts 로 나타난다.
여러명이 터미널로 접속했을 경우에는 pts/? , 이렇게 ? 에 숫자가 나타나게된다.
3) 접속한 컴퓨터의 IP 가 나타난다.
root의 경우에는 콘솔접속이기 때문에, - 로 나타나진다.
4) 어느 시간에 접속했는지 시간대를 알려준다.
5) 사용자가 얼마나 아무것도 안하고 있는지 시간을 체크해준다.
6) 각 사용자가 CPU 를 사용한 지연 시간을 보여준다.
7) WHAT 필드에 있는 명령이 지연된 시간을 보여준다. ( what 필드는 위 사진의 8번째에 해당하는 필드이다. )
8) 접속된 사용자들이 어떤 명령을 사용하고 있는지를 보여준다.

● 직접 파악해보기
root 는 콘솔로 접속해서 IP 가 없음. 05:02pm 에 접속해서 44:09 동안 아무것도 안했다.
CPU를 0.04초동안 사용하였고, WHAT필드 있는 명령은 0.04s 지연됐다. root는 -bash 명령어를 사용중이다.
finger -l : 사용자(나 자신)의 정보를 조금 더 자세히 볼 수 있었다.
w : w 를 통해서 내가 원하는 사용자에게 메세지를 보낼 수 있었다.
상위 디렉토리에서 볼 수 있는 디렉토리들과 파일들

bin : 리눅스의 실행파일들이 담겨있는 장소이다. ls, rm 등의 명령어가 여기에 포함된다.
boot : 리눅스의 on/off 시의 명령어들이 담겨있는 장소이다. 리눅스의 심장과도 같은 곳이다.
etc : 리눅스의 중요한 파일들이 담겨있는 장소이다. 패스워드파일, 쉐도우파일, 대부분의 리눅스 설정파일이 담겨있는 곳이다.
home : 일반파일들이 담겨있는 장소이다. 우리가 wargame 시에 여는 파일들이 담기는 곳. 즉, Desktop 이라고 생각하면 편하다 😃
dev : 컴퓨터에 설치된 하드웨어에 관한 정보파일들이 담겨있는 장소이다.
lib : 라이브러리 파일들이 들어가는 장소.
mnt : mount 명령어를 사용하여, 마운트 시킨 시디롬, 플로피 디스켓 등이 들어가는 디렉토리이다.
proc : 프로세스들이 파일형태로 저장되는 장소
root : 일반사용자들의 파일들은 /home 에 저장되지만, 루트의 /home 은 이곳이다....
sbin : 시스템 기본명령들을 제외한 시스템 관리용 실행파일들은 이곳에 저장된다.
tmp : 일시적으로 사용한 파일들은 여기에 저장된다. 또한 권한에 상관없이 모든 사용자들은 이곳에 파일을 만들 수 있다.
usr : 다양한 응용 프로그램들이 설치돼있는 장소이다.
etc/passwd : 사용자들에 대한 정보가 담겨있다.
etc/shadow : 사용자들에 대해서 중요한 정보가 담겨있다. ( 사용자들의 패스워드가 들어있음. )
etc/services : 사용자가 어떤 서비스를 하는중인지 보여준다.
etc/Issue.net : 처음 접속할 때, 나오는 화면이다.
etc/motd : 로그인 후에 나오는 메세지들이 담겨 있다.
~/public_html : 각 사용자들의 홈페이지 파일이 담겨있음.
uname -a : 리눅스 버젼을 확인할 수 있다.
/etc/*release : 지금 사용하고있는 OS 의 버젼을 확인할 수 있다.
패키지 : 한 프로그램을 실행하기 위해서 필요한 파일들을 모아놓은 곳이다.
/proc/cpuinfo : cpu 의 정보가 담겨있다.
rpm -qa : 내가 설치한 프로그램(패키지)들의 정보가 담겨 있다.
cat : 파일 속 내용을 볼 수 있는 리눅스 명령어이다.
/etc/passwd 파일분석
root : x : 0 : 0 : Admin : /root : /bin/bash
1번째 필드 : 사용자의 ID
2번째 필드 : 사용자의 Password ( 리눅스 5.0 까지는 암호화되어서 표기가 됐지만, 해커들의 해독화때문에, shadow 파일로 비밀번호들을 다 옮기고, passwd 에는 x 만 표기하도록 돼있다. )
3번째 필드 : User 의 ID는 root 이지만, 컴퓨터는 숫자로 인식하는 것을 더 선호한다. 그래서 root 라는 ID 가 입력됐을 경우, 3번째 필드를 통해서 확인한다.
4번째 필드 : User의 group 을 칭한다. ( 그룹은 아래에 개념을 설명해놓겠다. )
5번째 필드 : 사용자의 이름이다.
6번째 필드 : 사용자가 로그인했을 시에, 로그인 정보가 담기는 디렉토리이다.
7번째 필드 : 사용자가 로그인했을 시에, 실행되는 프로그램이다.
tar : 파일 합치는 명령어 ( 압축이 아니라서 용량은 늘어난다. )
tar cvf 파일이름 합칠파일들 : cvf 는 파일을 합치는 옵션이다.
tar xvf 파일이름 : xvf 는 파일을 분해하는 옵션이다.
gzip : 파일 압축하는 명령어 ( 1개의 파일을 압축할 수 있다. )
gzip 파일이름 압축할파일들 : 파일을 압축하는 옵션이다.
gzip -d 파일이름 : 압축파일을 푸는 옵션이다.
tar ( tar 확장자 ) , gz ( gzip 확장자 ), tgz ( tar + gz 확장자 )
> : redirection 이라는 뜻을 가지며, cat > test.txt 를 하였을 때, test.txt 에 입력된 문자를 삽입한다.
>> : 원래 있던 txt 에 추가하는 명령어이다. cat >> test.txt 를 사용한다.
위처럼 txt 를 작업하다가 끝내고 싶을 때엔 Enter + [ Ctrl + D ] 를 누르면 된다.
절대경로 : root 부터 타고 내려오는 경로
ex) /root/home/~~~~
상대경로 : 나를 기준으로 하는 경로
ex) ./home
우리는 권한이 없을 경우, 파일을 읽거나 ( read ), 쓰거나 ( write ), 실행 ( execute ) 할 수 없다.
ls -al 파일명을 하였을 때, 우리는 아래처럼 정보들을 얻을 수 있다.

bin 디렉토리에 대해서 분석을 해보겠다.
bin 파일은 root 유저 는 r ( 읽기 권한 ), w ( 쓰기 권한 ), x ( 실행 권한 ) 을 가지고 있다.
root 유저가 속한 그룹인 root 그룹은 r ( 읽기 권한 ), _ ( 쓰기 권한 X ), x ( 실행 권한 ) 을 가지고 있다.
root 유저, root 유저가 속한 그룹도 아닌 other 들은 r( 읽기 권한 ), _ ( 쓰기 권한 X ), x ( 실행 권한 ) 을 가지고 있다.
● SetUID
"User ID 를 변경하다" 라는 뜻을 가지고 있다.
SetUID 는 파일에 걸리며, 이 파일을 실행하고 있는 동안에는 실행한 파일의 user 는 관리자 권한을 가진다.
그래서 우리는 이렇게 SetUID 이 걸려있는 파일에 공격을 실행해, 관리자 권한을 가지려고 하는 것이다!!

그렇다면 우리는 어떻게 SetUID 가 걸려있는 파일을 찾을까?
그것은 위 사진처럼 r_s 즉, s 라는 권한이 걸려있는 파일이 우리가 알고 있는 SetUID 파일인 것이다.
이렇게 하나하나 찾기보다는 간편한 명령어를 이용해 SetUID 가 걸려있는 파일을 알 수 있다.
find / -perm -4000
/ 에서부터, 적어도 SetUID 가 걸려있는 모든 파일들을 찾아라
여기서 / 은 경로를 의미하고, - 은 '적어도' 라는 것을 의미한다.
4000 에서 4는 SetUID를 의미하며, 000 은 rwx 모두를 의미한다.
-perm 은 권한을 찾겠다는 명령어로 이해하면 된다.
find 명령어 ( 옵션 )
-perm : 권한과 일치하는 파일을 찾는다.
-name : 이름과 일치하는 파일을 찾는다.
-user : 유저와 일치하는 파일을 찾는다.
-group : 그룹과 일치하는 파일을 찾는다.
FTZ Training 마침.
느낀점
20년도때, 대학교 선배의 가르침으로 FTZ trainng 을 했을 때가 있었다.
아무것도 모른채로 시작하니 많이 힘들었고, 그 힘듦을 합리화시켜 이 길은 내 길이 아니구나 싶었다.
그렇지만 Dreamhack 을 하면서 재밌는 워게임들을 풀어나가면서 보안에 관심을 가지게 됐고,
다시 한번 도전해보고 싶었던 FTZ 였다..
그렇게 다시 공부해보니, 그때보다 얻어가는게 훨씬 많은 것 같아 기분이 좋다.