[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라는 확장자로 만들 때도 있다.
● 파일들을 압축하고 해제하기
|
trainer8의 비번은 player!!
[Trainer8]
우리가 만드는 파일은 크게 두가지 종류가 있다.
- 텍스트 파일 : cat 명령을 사용하여 명령을 출력할 수 있다,
- 프로그램 소스 파일 : 텍스트 파일이긴 하지만 cat 명령을 사용하지 않고 "컴파일"이라는 과정을 거쳐야한다.
● 텍스트파일 생성법
|
> : 리다이렉션, 방향을 전환한다.
나는 왼쪽에서 출력되는 것을 받아서 오른쪽의 입력으로 보내버리겠다.
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가지
- Remote 해킹 : 자신이 해킹하고자하는 서버에 아이디를 가지고 있지 않을 때,
아이디를 얻고자 시도하는 것 - Local 해킹 : 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때,
관리자 권한(root)을 얻고자 시도하는 것
관리자 권한 획득 = 해킹 성공
SetUID가 걸린 파일을 조작하여, 관리자 권한을 얻을 수 있게 된다.
SetUID : 일시적으로 자신의 ID를 변경하는 것
내 아이디, 비번은 쉐도우 파일에 있겠구나ㅋ 엥 근데 방금 passwd 명령으로 내 비번 바꿨는데...? 내 비번은 쉐도우 파일에 있는데 내가 방금 내 비번을 바꿨어. 그러면 쉐도우 파일에 있는 비번도 변경되었을 건데... 하지만 쉐도우 파일은 오직 루트에서만 수정 권한이 있는데... 어떻게 내가 그 내용을 변경한걸까? |
자신의 암호를 변경하는 passwd 파일에
루트 권한의 SetUID가 걸려있어서 일반 사용자들이 그 passwd 파일을 실행하는 동안에는
"루트로의 일시적인 아이디 변경"이 되는 것이다
결국 쉐도우 파일은 나의 권한이 아닌 루트의 권한으로 잠시 변경이 된 것 !
- SetUID는 파일에 걸리는 거구나
- SetUID가 걸린 파일을 실행하면 나의 아이디가 변경되는구나
- 파일의 실행이 끝나면 다시 원래의 아이디로 돌아오는구나
예시는 더보기...
예시) 버퍼오버플로우
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 |