환경설정

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) 접속된 사용자들이 어떤 명령을 사용하고 있는지를 보여준다.

 

IP 상의 문제로, w 명령어를 작성하였을 때, 본인의 정보는 뺐다.

● 직접 파악해보기

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 였다..

그렇게 다시 공부해보니, 그때보다 얻어가는게 훨씬 많은 것 같아 기분이 좋다.

 

+ Recent posts