Lesson 8
우리가 만들 수 있는 파일에는 크게 두가지 종류가 있다.
일반 텍스트 파일은 글자로만 이루어진 파일이다. 이러한 텍스트 파일은 cat 명령어로 출력한다.
프로그램 소스 파일은 컴퓨터 언어로 입력한 파일이며 컴파일 이라는 과정을 거쳐 실행 가능하도록 만든 후 사용한다.
텍스트 파일은 다음과 같이 생성할 수 있다.
1. 쉘 프롬프트에서 cat > 파일이름.txt 라고 입력
2. 원하는 내용 작성
3. control + D키 입력
1번 과정에서 > 문자는 리다이렉션 이라고 부르며 cat의 결과를 모니터가 아닌 파일로 보내는 것이다.
리다이렉션을 한 번 사용하면 새로운 파일이 만들어지지만, 기존의 내용을 보존시키면서 글자를 추가하려면 다음과 같이 리다이렉션을 두 번 사용하면 된다.
cat >> 파일이름.txt
소스 파일을 만드는 방법도 텍스트 파일과 동일하지만 언어를 컴퓨터 언어인 C언어로 작성한다는 차이가 있다.
C언어로 소스 작성이 끝났으면 컴파일을 해야 프로그램을 실행할 수 있다.
컴파일은 다음과 같이 진행한다.
gcc -o 프로그램이름 소스파일이름
프로그램을 실행할때는 만들어진 프로그램이 있는 경로에서 실행해야 한다. 내가 만든 프로그램의 이름은 program.exe 이기 때문에 /home/trainer8/program.exe 를 입력하면 프로그램이 실행된다. 또한 현재 디렉토리를 의미하는 . 을 이용하여 ./program.exe처럼 상대경로로 현재 디렉토리에 있다면 바로 실행할 수 있다.
Lesson 9
리눅스는 각 사용자마다 특별한 권한을 부여하여 그 권의 범위를 넘어서지 않는 파일들만 제어할 수 있도록 설정되어 있다. ls -al 명령으로 파일들의 권한에 대한 정보를 출력할 수 있다.
리눅스의 권한에는 4가지 종류의 사용자가 있다.
- user(유저) : 아이디로 로그인 한 자기 자신을 의미한다.
- group(그룹) : 모든 유저는 하나 이상의 그룹에 속하게 된다. 그 그룹을 따로 변경하지 않는 한 자신의 유저네임과 같은 이름의 그룹에 속하게 된다.
- other(아더) : 유저와 그룹을 제외한 모든 다른 사람을 의미한다.
- root(루트) : 절대적인 권한을 가진 사용자이다. 어떤 권한에도 구애받지 않고 파일들을 제어할 수 있다.
id 라는 명령을 사용하면 다음과 같이 출력된다.
uid는 User ID의 약자이다. id라는 명령을 통해 현재 로그인한 계정의 uid는 2009라는 것을 알 수 있다.
gid는 group ID의 약자이다. 다른 사람을 자신의 gid를 가진 그룹에 속하게 할 수 있고, 특별한일이 없는 한 gid는 항상 uid와 같다.
groups는 현재 자신이 어떤 그룹에 속해있는지 말해준다. 임의의 변경이 없으면 기본으로 uid와 같은 그룹에 속하게 된다.
위는 ls -al 로 test1 이라는 파일을 확인한 것이다. rwxrwxrwx를 보면 rwx rwx rwx 로 3문자씩 끊었을 때 각각 유저, 그룹, 아더의 권한을 의미한다. 영문자 r, w, x는 순서대로 읽기(r), 쓰기(w), 실행(x) 권한을 의미한다. 위 예시에서 trainer9 자리가 유저, trainer10 자리가 그룹을 의미한다. 이 둘을 제외한 모든 아이디는 아더이다.
따라서 위의 test1 파일은 trainer9 라는 uid를 가진사람과 tranier10이라는 gid를 가진 사용자, 이 둘을 제외한 다른 모든 사람들에게 읽기, 쓰기, 실행 권한이있다. 즉 아이디가 있는 모든 사용자는 이 파일을 마음대로 접근하고 변경할 수 있다.
위 test2 파일의 경우 guest라는 uid를 가진 사용자는 읽기, 쓰기, 실행 권한이 있고, trainer1 이라는 gid를 가진 사용자는 읽기 실행 권한이 있고, 이 둘을 제외한 다른 모든 사용자는 실행 권한만 갖는다.
읽기 권한은 cat 명령으로 파일을 볼 수 있는 권한이고, 쓰기 권한은 그 파일의 수정 권한이다. 실행권한은 윈도우에서 exe 파일처럼 실행할 수 있는 파일로 리눅스에서는 확장자로는 실행파일인지 확인할 수 없고, 권한에서 x라는 문자가 있는지 확인하고 판단해야 한다.
루트 권한만 접근할 수 있는 shadow 파일의 권한은 다음과 같다.
Lesson 10
해킹방식에는 Local 해킹과 Remote 해킹 두가지 종류의 방식이 있다.
Remote 해킹은 자신의 해킹하고자 하는 서버에 아이디가 없을 때 아이디를 얻고자 시도하는 것이다.
Local 해킹은 해킹 하고자 하는 서버에 일반 계정이 있을 때 관리자 권한을 얻고자 시도하는 것이다.
SetUID는 일시적으로 자신의 ID를 변경하는 것을 말한다. passwd 명령어를 사용하여 패스워드를 바꾸는 경우 shadow파일은 루트만 수정권한이 있는데 일반 사용자도 패스워드를 변경할 수 있다. 이러한 경우 passwd에 SetUID가 걸려 있어 passwd 파일을 실행하는 동안 루트로 일시적인 아이디 변경이 되는 것이다.
SetUID는 필요한 만큼만 관리자 권한을 제공하고 그 일이 끝나면 다시 가져가는 것이 일반적이지만 SetUID가 걸린 파일들을 통해서 관리자 권한을 완전히 가져오게 될수도 있다.
버퍼 오버플로우의 경우 루트 권한으로 SetUID가 걸려 있는 파일에 프로그램의 에러를 발생시키고 에러가 나는 순간 /bin/bash 파일을 실행하게 조작하여 프로그램이 실행되는 동안 루트 아이디로 변경되고, 그 상태에서 /bin/bash를 실행해 루트 권한의 쉘을 획득하는 공격이다.
다음과 같이 x권한이 올 자리에 s가 있으면 SetUID가 설정된 것이다. s는 x(실행권한)도 포함한다.
이 파일은 모든 사용자에게 실행권한이 있지만 root에 SetUID가 걸려있기 때문에 어느 사용자가 저 파일을 실행해도 루트의 권한을 갖는다.
find / -perm -4000 의 명령을 사용하면 서버 전체에서 SetUID가 걸린 모든 파일을 찾을 수 있다. 위 명령을 해석하면 / 에서부터 적어도 SetUID가 걸린 모든 파일을 찾으라는 명령이다. 4는 SetUID를 의미하며 000은 rwx모두를 의미한다.
find 명령의 옵션은 다음과 같다.
- -perm : 권한과 일치하는 파일을 찾음
- -name : 이름과 일치하는 파일을 찾음
- -user : 유저와 일치하는 파일을 찾음
- -group : 그룹과 일치하는 파일을 찾음
위 옵션들을 조합하여 사용할 수 도 있다. find / -user root -perm 4000은 루트 권한으로 SetUID가 걸린 파일을 찾는 것이다.
FTZ의 이후 레벨별 문제들은 다음 레벨로 SetUID가 걸린 파일을 찾아서 그 파일을 이용하여 그 레벨의 쉘을 얻으면 된다. 쉘을 얻고 my-pass를 입력하면 해당 계정의 패스워드를 확인할 수 있다.
'Project H4C Study Group' 카테고리의 다른 글
[Project H4C] 우리집에 GDB 있는데… 메모리 보고갈래? (2) Write-up (0) | 2021.03.09 |
---|---|
[Project H4C] 우리집에 GDB 있는데… 메모리 보고갈래? (1) Write-up (0) | 2021.03.08 |
[Project H4C] FTZ Trainer (4 ~ 7) (0) | 2021.03.08 |
[Project H4C] FTZ Trainer(1~3) (0) | 2021.03.07 |
[Project H4C][백준][C언어] 2577 : 숫자의 개수 (0) | 2021.03.06 |