WAR GAME/FTZ

[FTZ] Trainer 6~10 요약

jir4vvit 2019. 9. 7. 17:06

 

[Trainer6]


cat [파일 이름] : 파일의 속 내용을 화면으로 뿌려주는 역할

패스워드 파일 : 한 서버를 사용하는 사용자들의 모든 정보를 기록해 놓은 파일 
그 사용자는 어떤 아이디, 어떤 암호를 이용하여 로그인 하는지, 어떤 그룹에 속해있는지, 이름은 무엇인지 등등....

cat /etc/passwd

root : x : 0 : 0 : Admin : /root : /bin/bash


-첫번째 필드: 서버에 로그인할때 사용되는 아이디(계정)

난 지금 trainer6이라는 아이디로 로그인했다
trainer6:ㅋ:ㅋ:ㅋ:ㅋ:ㅋ:ㅋ

-두번째 필드: 패스워드가 적혀있는 부분

리눅스 버전 5.0까지는 암호화된 문자열이 들어가 있어서 위험하지않았지만
"크래커"들이 암호화된 문자열을 해독하는 프로그램을 만들어버렸다.
그래서 사람들이 더 어렵게 만들어버렸음 
하지만 또 해독해버리고 막히고 해독해버리고 막히고... 반복

그래서 사람들은 그냥 x라고 놓고 사용자들의 패스워드만 모아서 새로운 파일을 만들었음
그것이 바로 /etc/shadow라는 이름의 파일!

관리자권한을 가진 사람이 아니면 볼 수 없다.
그래서 리눅스 6.0 이후로는 계속 저렇게 생김

우리가 만약 쉐도우 파일을 열어보려고하면 에러메세지 뜸

-세,네번째 필드 : root라는 사용자가 로그인을 했다. root=0(세번째) 그룹=0(네번째)
즉 지금 들어오는 녀석은 0이란 녀석이고, 0이란 그룹에 속해있다라고 판단할 수 있다.

-다섯번재 필드 : 사용자의 이름을 말해주는 부분이다. 

-여섯번째 필드 : 해당사용자(위에선 root)가 로그인에 성공했을 때 기본으로 위치하게 되는 디렉토리를 말해준다
따라서 root라는 아이디로 로그인에 성공하면 /root로 자동으로 들어가게 된다.
trainer6의 경우는 /home/trainer6으로 들어가게 되겠지?!

-일곱번째 필드 : 사용자가 처음 로그인 했을 때 실행되게 할 프로그램을 말한다.


trainer7의 비번은 to the top

 


[Trainer7]

 

백업한다: 하드에 들어있는 데이터(디렉토리, 파일, 개인정보, 게시물 ..)를 
똑같이 다른 곳으로 복사하여 안전하게 보관하는 것

tar cvf [합친파일이름] [합칠파일들] : 압축하지 않고 파일들을 하나로 뭉쳐버림
tar xvf [해제할파일]

 옵션

  • c : 새로운 파일을 만드는 옵션 create
  • x : 압축을 해제시키는 옵션 extract
  • v : 압축이 되거나 풀리는 과정을 출력하는 옵션 view
  • f : 파일로서 백업을 하겠다는 옵션 file 

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

 

● 확장자 

  • tar : tar 프로그램을 사용하여 압축된 파일로서. 
  • 사실 압축이 아닌 여러 파일들이 하나로 뭉쳐져 있는 파일이다 
  • gz : gzip 프로그램을 사용하여 압축된 파일 
  • tar.gz : tar 프로그램을 사용하여 파일을 합친 후,  
  • 또 다시 gzip을 사용하여 압축을 한 파일 
  • tgz : tar.gz를 합쳐서 tgz라는 확장자로 만들 때도 있다. 
● 파일들을 압축하고 해제하기 
  1. tar cvf 명령을 이용하여 이 파일들을 하나로 합쳐버린다. 
  2. gzip 명령을 이요하여 용량을 줄여버린다 
  3. 이 압축된 파일을 잘 보관한다. 
  4. 후에 리눅스를 재 설치하거나, 크래킹을 당하여 자료가 손실되었을때 ... 
  5. gzip -d 명령을 이용하여 다시 tar로 만든다 
  6. tar xvf 명령을 이용하여 파일들을 복구한다. 
  7. 손실된 파일들이 고스란히 되살아난다.



trainer8의 비번은 player!!

 

 


[Trainer8]

 

우리가 만드는 파일은 크게 두가지 종류가 있다.

  1. 텍스트 파일 : cat 명령을 사용하여 명령을 출력할 수 있다,
  2. 프로그램 소스 파일 : 텍스트 파일이긴 하지만 cat 명령을 사용하지 않고 "컴파일"이라는 과정을 거쳐야한다. 

 

● 텍스트파일 생성법 

  1. 쉘 프롬프트 상태에서, cat > [파일이름].txt 라고 입력한다. 
  2. 원하는 내용을 써내려간다 
  3. Ctrl+D 


> : 리다이렉션, 방향을 전환한다.
나는 왼쪽에서 출력되는 것을 받아서 오른쪽의 입력으로 보내버리겠다.

cat > test.txt 
hello 


만약 서버에 test.txt라는 파일이 있을 때,
cat > test.txt라고 입력을 하게 되면 기존의 내용은 몽땅 사라지고,
새로운 내용으로 파일이 다시 만들어 진다.

그럼 기존의 내용은 보존시키면서 글자를 써 넣으려면 어떻게 해야할까?
→ 리다이렉션을 두번 사용하면 된다!

cat >> test.txt 
world! 

cat test.txt 
hello 
world! 

기존의 내용 뒤에 써내려진다. 



 

● 프로그램 소스 파일을 만들고, 컴파일, 실행하는 방법

소스를 만드는 방법은 일단 텍스트 파일을 만드는 방법과 똑같다.
다만 c로 작성

cat > program.c 
int main() { 
int a=10,b=20; 
printf("10+20=%d,a+b);} 

컴파일 방법: 쉘 프롬프트에 gcc -o [프로그램이름] [소스파일 이름]

gcc -o program.exe program.c 


에러 없으면 성공적으로 컴파일 성공!

리눅스에서 파일을 실행시키는 방법: 그 파일이 있는 절대경로를 모두 입력
절대경로 보는 방법: pwd 명령

[절대경로] [프로그램이름] : 파일 실행

home/trainer8/ program.exe

home/trainer8/ program.exe 


꿀팁
. : 현재 디렉토리
./ program.exe
이렇게 해도 된다


trianer9 비번은 programming

 

 


[Trainer9]

 

리눅스의 권한

리눅스는 윈도우와는 달리 한 서버에 여러 사용자가 접속하여 사용하게 된다.

만약 이 F.T.Z 서버에 개인 아이디를 가지고 있다.
그 개인 계정에 이것저것 필요한 문서들을 올리고, 홈페이지도 만들고... 중요한 파일도 생성하게 될 것이다.
그러다 보면 남이 봐서는 안되는 나만의 파일이나 프로그램을 올리게 되는 경우도 있지 않을까?

그럼 리눅스는 어떠한 방법으로 다른 사람이 나의 파일에 접근하지 못하도록 막는 것일까?
→ 권한(Permissiont)

Permission Denied(접근거부) : 에러메세지, 당신의 권한 밖에 있는 파일을 건드렸군!

이처럼 리눅스는 각 사용자마자 특별한 권한을 부여하여, 그 권한의 범위를 넘어서지 않는 파일들만 제어할 수 있도록 설정되어 있다.
다른사람(루트 제외)는 그것을 볼 수 없다.

 

리눅스에는 4가지 종류의 사용자가 있다.

  • 유저 : 자기 자신
  • 그룹 : 모든 유저는 하나 이상의 그룹에 속하게 도니다
    임의로 이 그룹을 변경하지 않는 한  유저는 자신의 유저네임과 같은 이름의 그룹에 속하게 된다
  • 아더 : 유저와 그룹을 제외한 모든 다른 사람
  • 루트 : 절대적인 권한을 가지고 있는 사용자. 
    루트 권한을 가지고 있는 자는 어떤 권한에도 구애받지 않는 상태로 파일들을 제어할 수 있게 된다.
    이 절대적인 루트 권한을 얻기 위해 이것저것 가리지 않고 하는 일이 "해킹" 

 

● id 명령어쳐서 나온 결과 분석하기

id
uid=2009(trainer9) gid=2009(trainer9) groups=2009(trainer9) 

uid : User ID의 약자
컴퓨터는 숫자를 좋아해서 컴퓨터가 알아보기 쉬운 숫자를 부여하고
그 숫자로 누구인지 판단을 한다고 했다.
trainer = 2009

gid : Group ID의 약자
각 유저마자 gid를 가지고 있고, 다른 사람을 자신의 gid를 가진 그룹에 속하게 할 수 있다.
특별한 일이 없는 한 gid는 항상 uid와 같다.

groups : 현재 자신이 어떤 그룹에 속해 있는지를 말해준다.
임의로 변경을 하지 않으면 기본으로 자신의 uid와 같은 구릅에 속하게 된다.

 

ls -al
-rwxrwxrwx 1 trainer9 trainer10 5 10월 20 21:35 test1 

trainer9=유저

trainer10=그룹
*유저와 그룹을 제외한 모든 아이디는 아더 

 

rwx rwx rwx 
유저의 권한 그룹의 권한 아더의 권한 


r 읽기권한
w 쓰기권한
x 실행권한

test1이라는 파일은

trainer9라는 uid를 가진 사용자에게 r읽기, w쓰기, x실행 권한이 있고
trainer10이라는 gid를 가진 사용자에게도 r읽기, w쓰기, x실행 권한이 있고
trainer9와 10을 제외한 사용자에게도 r읽기, w쓰기, x실행 권한이 있다.

즉 test1이라는 파일은 아이디를 가지고 있는 사람이라면 누구나 마음대로 변경할 수 있는 파일이다.

읽기권한 : 읽기권한이 없으면 cat명령으로 파일 내용을 볼 수가 없음 
쓰기권한 : 쓰기권한이 있으면 cat >> 명령을 이요하여 내용을 덧붙일 수도 있고 편집기를 사용하여 내용을 편집할 수도 있다. 
실행권한 : x라는 문자가 있는지 없는 지 보고 실행파일인지 아닌지를 판단한다. 



trainer10의 비번은 best!

 


[Trainer10]

 

해킹의 종류 2가지

  1. Remote 해킹 : 자신이 해킹하고자하는 서버에 아이디를 가지고 있지 않을 때,
    아이디를 얻고자 시도하는 것
  2. Local 해킹 : 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때,
    관리자 권한(root)을 얻고자 시도하는 것

관리자 권한 획득 = 해킹 성공

SetUID가 걸린 파일을 조작하여, 관리자 권한을 얻을 수 있게 된다.

SetUID : 일시적으로 자신의 ID를 변경하는 것

내 아이디, 비번은 쉐도우 파일에 있겠구나ㅋ 
엥 근데 방금 passwd 명령으로 내 비번 바꿨는데...? 
내 비번은 쉐도우 파일에 있는데 내가 방금 내 비번을 바꿨어. 
그러면 쉐도우 파일에 있는 비번도 변경되었을 건데... 
하지만 쉐도우 파일은 오직 루트에서만 수정 권한이 있는데... 
어떻게 내가 그 내용을 변경한걸까? 


자신의 암호를 변경하는 passwd 파일에
루트 권한의 SetUID가 걸려있어서 일반 사용자들이 그 passwd 파일을 실행하는 동안에는
"루트로의 일시적인 아이디 변경"이 되는 것이다

결국 쉐도우 파일은 나의 권한이 아닌 루트의 권한으로 잠시 변경이 된 것 !

 

  1. SetUID는 파일에 걸리는 거구나
  2. SetUID가 걸린 파일을 실행하면 나의 아이디가 변경되는구나
  3. 파일의 실행이 끝나면 다시 원래의 아이디로 돌아오는구나

 

예시는 더보기...

...더보기

예시) 버퍼오버플로우
joe라는 파일이 있다. 이 파일은 루트의 권한으로 SetUID가 걸려있다
joe는 문서 편집을 할 때 사용하는 파일로 "joe filename"이라고 입력하면 해당 파일의 편집 화면이 출력된다
근데 이 파일은 좀 멍청하다
왜냐면 filename이 1000자가 넘어버리면 프로그램이 제대로 실행되지 않기 때문
해커들은 이것을 이용하여 joe에 대한 버퍼 오버플로우 기법을 개발
1000자를 넣어 프로그램에 에러가 날 때의 그 순간을 이용하여 /bin/bash 파일을 실행하도록 조작한다.
따라서 joe파일이 실행되는 동안에 루트의 아이디로 변경되고, 그 상태에서 /bin/bash를 실행하니
결과적으로 루트 권한의 쉘이 획득되었다!

 

ls -al /usr/bin/passwd 
-r-s--x--x (생략)


x가 있어야 할 자리에 s가 있다. 이 s는 바로 SetUID를 뜻한다.

 


● SetUID가 걸린 파일을 찾는 방법

find / -perm -4000

 /에서부터 적어도 SetUID가 걸린 모든 파일을 찾아라!
- : 적어도
-perm : 권한을 찾겠다
4 : SetUID
000 : rwx 모두


● -perm말고 다른 옵션들


-name : 이름과 일치하는 파일을 찾는다

find / -name cat


-user : 유저와 일치하는 파일을 찾는다

find / -user mmung2 


-group : 그룹과 일치하는 파일을 찾는다

find / -group guta 



옵션들을 조합하여 동시에 사용할 수도 있다 .

find / -user root -perm -4000 


해석 : 루트의 권한으로 SetUID가 걸린 파일을 찾아라




해커스쿨의 레벨별 해킹을 통과하는 방법 (더보기로 확인)

...더보기

자신의 아이디가 level3이다
level4로 넘어가기 위해서 level4의 권한으로 SetUID가 걸린 파일을 찾는다
find / -user level4 -perm -4000
그럼 한개 이상의 파일이 발견될거임
그 파일들은 멍청한 거 ㅋ
그 파일들 이용하여 level4의 쉘을 얻으면 됨
my-pass라고 입력하면 level4의 패스워드가 뜸

 

level1의 비번은 level1

'WAR GAME > FTZ' 카테고리의 다른 글

[FTZ] level3 풀이  (0) 2019.12.01
[FTZ] level2 풀이  (0) 2019.09.08
[FTZ] level1 풀이  (0) 2019.09.07
[FTZ] Trainer 1~5 요약  (0) 2019.09.01
[FTZ] 로컬서버 구축하기  (0) 2019.08.30