FTZ 로컬 환경을 구축하고 putty를 사용해서 접속을 시도했지만 잘 되지 않았다. 여러가지를 시도해보다가 vm network 설정을 nat에서 bridge로 바꾸니 잘 접속이 됐다.
참고로 한글이 깨지는 경우는 putty -> category -> Translation -> remote character set을 UTF-8로 바꿔주면 된다.
Write Up은 하나하나 따라가며 적기보다는 해당 level의 목적, 배우는 것에 초점을 둬서 정리하겠다.
-trainer1-
위는 리눅스를 사용하거나 telnet으로 리눅스 서버로 접속을하면 볼 수 있는 프롬프트다. 프롬프트의 맨 앞 trainer1 부분은 접속 ID, 두 번째 부인 ftz는 서버, 마지막 trainer1은 현재 위치를 뜻한다.
이 프롬프트라는 것은 항상 대기 상태에서 사용자가 어떤 명령을 내리기를 기다린다. 마치 windows의 cmd와 같은 것이다.
-ls
ls 명령어는 리눅스에서 현재 위치를 기준으로 폴더, 파일들을 보여주는 역할을 한다.
ls 명령어를 입력하니 위 사진처럼 현재 위치하고 있는 디렉터리의 폴더, 파일들을 보여주는 것을 볼 수 있다.
윈도우 cmd에서도 명령어의 옵션이 있듯이 ls 명령어에도 옵션이 있다.
-ls -l
ls 명령어에 -l 옵션을 주면 ls보다 더 자세히 파일 정보를(디렉토리와 파일을 구분하여) 출력하게 된다.
-l 옵션을 주고 ls 명령어를 사용하니 ls 명령어만 사용했을 때와 달리 좀 더 복잡하게 출력됐다.
-rwxr-x--- 1 trainer1 trainer1 14698 Oct 23 2000 addhtml
drwxrwx--x 2 trainer1 trainer1 4096 Feb 27 2002 public_html
출력의 첫 번째 세 번째를 기준으로 정리해보자면 -rwxr-x---, drwxrwx--x 부분은 파일의 mode, 파일의 성격을 나타낸다. 자세한건 trainer4에서 배우게 되니 간단하게 정리하면 가장 왼쪽의 문자가 -로 돼 있으면 파일, d로 돼 있다면 디렉토리다.
trainer1 trainer1 이 부분은 Permission에 관한 정보를 보여준다.(자세한건 trainer9에서 다룸)
14698, 4096 부분은 해당 파일의 용량을 나타낸다.
마지막으로 Oct 23 2000은 파일의 생성 날짜를 나타낸다. 해당 파일의 경우 2000년 10월 23일에 만들어진 것이다.
위는 ls -l 명령어를 사용했을 때 출력되는 파일 정보를 바탕으로 한 퀴즈다.
1, 2, 4번 : 맨 앞에 d가 있으므로 디렉토리다.
답 : 2
3번 : 맨 앞에 -가 있으므로 파일이다.
답 : 1
5번 : 파일의 용량은 날짜 바로 전에 나온다.
답 : 3861
-ls -a
-a 옵션은 숨겨진 파일들을 포함해서 현재 위치하고 있는 디렉토리의 파일들을 모두 보여주는 역할을 한다.
위처럼 ls -al을 프롬프트에 입력하니 ls만 쳤을 때는 안 나오던 파일들이 출력되는 것을 볼 수 있다.
숨겨진 파일은 파일명의 맨 첫 부분에 .이 들어가 있다는 특징이 있다. 또한 일반 파일의 파일명 앞에 .을 붙이면 그 파일은 숨김 파일이 된다.
-ls -al
마지막으로 ls -al은 -l 옵션과 -a 옵션을 합친 것이다. -l의 기능인 파일을 자세히(디렉터리와 파일을 구분할 수 있게끔) 출력 + -a의 기능인 숨김 파일 출력을 합쳐서, 숨김 파일 포함 현재 디렉터리의 모든 파일을 자세히 출력해주는 것이다.
ls -al을 사용해보면 숨김 파일을 포함해서 모든 파일이 위처럼 자세하게 출력되는 것을 볼 수 있다.
-trainer2-
trainer1에서 받은 암호를 바탕으로 trainer2로 로그인하면 위와 같은 문장들이 출력된다.
trainer2에서는 디렉토리와 디렉토리간의 이동, 새 디렉토리 생성, 삭제, 파일의 복사, 이동, 삭제 등에 대해 다룬다.
-pwd
pwd 명령어는 print working directory의 약자로 현재 어떤 디렉토리에 있는지 경로를 표시해주는 역할을 한다.
pwd 명령어를 사용해보면 현재 디렉토리가 home 디렉터리의 trainer2인 것을 알 수 있다.
-cd
cd는 디렉터리를 이동할 때 사용하는 명령어다. 기본적으로 cd <이동할 디렉터리 명>으로 사용하지만 cd ..을 사용하면 이전 디렉터리로 이동할 수 있고, cd /를 사용하면 최상위 디렉터리로 이동할 수 있다.
cd ..을 입력하니 프롬프트의 끝 부분이 trainer2에서 home으로 변한 것을 볼 수 있다. pwd 명령어로 현재 경로를 확인해 보면 /home/trainer2에서 /home으로 변한 것을 볼 수 있다. 즉 /home/trainer2 디렉토리에서 /home 디렉토리로 이동한 것이다.
cd /를 입력하니 프롬프트의 끝 부분이 /로 바뀐 것을 볼 수 있다. pwd로 현재 경로를 확인하니 /만 출력됐다. 최상위 디렉토리로 이동한 것이다.
-mkdir, rmdir
mkdir은 디렉토리를 생성하는 역할을 해주는 명령어다. mkdir <생성할 디렉토리 명(혹은 경로)>을 해주면 지정한 이름으로 디렉토리가 생성된다.
rmdir은 디렉토리를 삭제하는 역할을 해주는 명령어다. rmdir <삭제할 디렉토리 명(혹은 경로>을 해주면 지정한 이름의 디렉토리가 삭제된다.
mkdir linuxer를 사용하고 ls -al을 해보니 linuxer라는 이름의 디렉토리가 생성된 것을 볼 수 있다.
rmdir linuxer를 사용하고 ls -al을 해보니 위에서 존재했었던 linuxer 디렉토리가 삭제된 것을 볼 수 있다.
-cp, rm, mv
cp는 파일을 복사해주는 명령어다. cp <복사할 파일 명> <복사 후 사용할 파일 명>으로 사용하면 지정한 파일이 원하는 파일 명으로 복사가 된다.
rm은 파일을 삭제해주는 명령어다. rm <파일 명(혹은 경로)>를 입력하면 지정 파일이 삭제된다.
mv는 파일을 이동해주는 명령어다. mv <파일 명(혹은 경로)> <변경 파일 명(혹은 경로)>를 입력하면 변경 파일 명으로 변경한 상태로 파일이 이동이된다.
cp 복사원본 복사사본을 입력하니 없었던 복사 사본 파일이 새로 생긴 것을 볼 수 있다. 날짜, permission, 용량등이 복사원본과 일치하는 것을 보아 복사가 성공적으로 됐다는 것을 알 수 있다.
cp로 복사한 복사사본 파일을 rm 복사사본으로 삭제해봤다. ls -al로 확인해보면 복사사본 파일이 삭제된 것을 볼 수 있다.
원래는 mv 복사원본 복사사본을 입력해야하지만 실수로 잘 못 입력했는데 pass가 되서 어쩔 수 없이 이대로 캡처를 했다. (제대로 입력했다고 가정한다.)ls -al로 확인해보면 복사원본 파일이 복사사본 이름만 바뀐 것을 볼 수 있다. 참고로 trainer2에는 나오지 않았지만 mv 파일명 경로를 입력한다면 그 위치로 파일이 이동되기도 한다.
-trainer3-
trainer2에서 받은 암호로 trainer3로 로그인하면 위와 같은 화면이 나온다. 이번에는 터미널과 네트워크에 관한 명령들을 다룬다고 한다.
-터미널 vs 콘솔
원래는 터미널과 콘솔이 같은 건줄 알았지만 trainer3를 수료하니 차이를 깨닫게 됐다.
터미널은 텔넷, ssh 등을 통해 서버에 접속한 것을 터미널을 통해 접속했다라고 하고, 로컬로 리눅스를 설치하고 부팅하여 로그인 한 것을 콘솔을 통해 접속했다 라고 한다.
-w
w 명령어는 서버에 어떤 사람들이 접속해 있는지 확인 역할을 하는 명령어다. 주로 일반 사용자보다는 서버 관리자가 많이 사용한다고 한다.(참고 : w 명령어)
위는 w를 입력했을 때 나오는 사용자 명단이다. 원래는 root(로컬)와 trainer3만 나오겠지만 나는 writeup을 위해 추가로 trainer2 계정으로 접속해 있는 상태라 trainer2가 나온 것 같다.
USER : 어떤 id로 로그인 했는지
TTY : 콘솔로 접속했는지, 터미널로 접속했는지. tty는 콘솔 접속, pts로 나타나면 터미널 접속을 의미.
FROM : 접속한 사람의 컴퓨터 ip. root의 경우 콘솔 접속을 했기 때문에 ip가 나타나지 않는다.
LOGIN@ : 어느 시간에 로그인 했는지
IDLE : 지연시간. 사용자가 얼마나 오랫동안 아무것도 입력을 하지 않고 쉬고 있는지를 알 수 있다.
JCPU : 각 사용자가 CPU를 사용한 지연 시간.
PCPU : WHAT 필드에 있는 명령이 지연된 시간.
WHAT : 접속된 사용자들이 현재 어떤 명령을 사용하고 있는지.
-finger -l
finger -l 명령어를 사용하면 더 자세하게 사용자들의 정보를 볼 수 있다.
원래는 특정 사용자를 지정해줘야하는 것 같지만 ftz에서는 finger -l을 치면 임의의 사용자를 보여주는 것 같다. 위를 보면 w 명령어로 확인한 것 보다 더 자세한 내용들이 출력된 것을 볼 수 있다.
-tty
tty는 자신의 터미널을 확인해주는 명령어다.
위 w 명령어에서 확인했듯이 내 tty는 /dev/pts/0인 것을 볼 수 있다.
-ifconfig
ifconfig는 서버나 리눅스의 ip를 출력해주는 명령어다. 이 ftz 로컬 환경을 구축할 때도 root 계정으로 접속해 ifconfig로 ip를 확인했었다.
위처럼 ifconfig를 입력하니 ftz 서버(로컬)의 ip가 출력되는 것을 볼 수 있다.
-write, wall
write는 접속한 사용자에게 쪽지를 보내는 명령어인 것 같다. write <해당 사용자의 pts>
wall은 접속한 모든 사용자에게 쪽지를 보내는 명령어다. wall <문구>로 전체 사용자에게 문구의 내용을 보내는 것 같다. 아마 서버관리자가 주로 사용하는 명령어가 아닐까 싶다.
-trainer4-
trainer3에서 알아낸 암호를 입력해 trainer4로 로그인하면 위와 같은 화면이 뜬다.
리눅스를 사용해봤다면 여러 미지의 디렉토리가 존재하는 것을 볼 수 있는데, 그런 디렉토리 중 중요한 것들을 trainer4에서 다루는 것 같다.
cd /로 최상단 디렉토리로 이동한 후 ls -al을 쳐보면 여러 디렉토리들이 보인다. 이 디렉토리와 디렉토리 내부 파일 중 중요한 것들에 대해 설명을 하겠다.
bin : 기본적인 실행 파일들이 들어 있음.
etc : 리눅스의 설정 파일들이 들어 있음.
tmp : 누구나 이곳에 파일을 올릴 수 있는 작업 공간.
home : 일반 사용자들의 아이디와 그들의 작업 공간.
dev : 컴퓨터에 설치된 하드웨어에 관한 정보.
boot : 리눅스 부팅 관련 파일들과, 리눅스의 심장인 커널이 들어있음.
lib : 라이브러리 파일들이 들어가 있음
root : 최고 관리자의 디렉토리
usr : 다양한 응용 프로그램들이 설치되어 있는 곳
var : 시스템 운영중에 생성되는 각종 임시 파일과 외부 접속에 대한 로그 파일들이 저장됨.
/etc/passwd : 사용자들에 대한 간단한 정보가 들어 있음.
/etc/shadow : 사용자들의 패스워드가 들어 있음.
/etc/services : 서버가 어떤 서비스를 하는 중인지 보여줌.
/etc/issue.net : 처음 접속할 때 나오는 화면.
/etc/motd : 로그인 후에 나오는 메세지가 들어가 있음.
알아보면 위에 적은 파일들이 모두 중요한 건 아니다. issue.net, motd 같은 경우 다른 리눅스에서는 안보이는 것을 보아 ftz을 위해 작성된 것인거 같다.
1. bin에는 리눅스 실행 파일들이 들어가 있다. ls, rm 등도 이 곳에 있다.
답 : 3
2. 프롬프트를 보면 /home/trainer4인 것을 알 수 있다.
답 : 4
3. 설정 파일은 /etc에 위치한다.
답 : 2
4. 처음 서버에 접속할 때의 메세지 내용은 issue.net을 수정하면 된다.
답 : 3
5. /etc/shadow에는 비밀번호 정보들이 나와있어서 누구나 열어보면 큰일난다;;
답 : 2
-trainer5-
trainer4에서 얻은 비밀번호로 trainer5에 로그인하면 위와 같은 화면이 뜬다. trainer5에서는 정보수집에 관한 내용을 다루는 것 같다.
-whoami
whoami는 현재 계정의 이름을 출력하는 명령어다.
whoami라 입력하니 현재 접속한 계정의 이름인 trainer5가 출력된 것을 볼 수 있다.
-id
id는 whoami보다 더 자세한 정보를 출력해준다. 권한, 그룹 등이 나온다.
id를 입력하니 whoami보다 더 자세한 정보가 출력된 것을 볼 수 있다. 출력된 내용은 trainer9에서 다룬다고 한다.
-/etc/passwd
앞서 trainer4에서 배웠듯이 /etc/passwd에는 모든 사용자의 계정 정보가 나와 있다.
cat /etc/passwd을 입력하면 사용자의 계정 정보들이 쭉 출력되는 것을 볼 수 있다. 여기서 cat는 파일의 내용을 출력해주는 역할을 한다. 위 정보에서 가장 왼족의 단어가 사용자들 아이디다. 자세한 분석방법 역시 trainer6에서 다룬다고 한다.
-uname -a
uname -a를 입력하면 현재 서버의 커널 버전을 알아낼 수 있다. 커널 버전 말고도 여러 정보들이 출력된 것을 볼 수 있다. 별거 아닌 것처럼 보이지만 커널 버전을 알아낸다면 해당 버전의 커널에 해당하는 취약점을 찾아낼 수도, 또한 그 취약점을 바탕으로 exploit해 root 권한 탈취도 가능해지기 때문에 이런 정보 수집은 중요하다.
-/etc/*release
/etc/*release에는 os 정보가 저장돼 있다.
cat 명령어를 이용해 /etc/*release의 내용을 출력해보면 ftz 서버의 os가 Red Hat Linux 9 OS라는 것을 알 수 있다.
-rpm -qa
rpm -qa는 패키지의 정보를 얻는 명령어다. 이 패키지들의 버전 정보로도 해킹 가능 여부를 알 수 있기 때문에, 패키지 정보 수집도 중요하다.(알아낸 패키지의 버전이 취약점이 존재하는 버전이라면 해킹할 수 있는 것이다.)
rpm -qa를 입력해보면 패키지와 패키지의 버전들이 출력되는 것을 볼 수 있다.
-/proc/cpuinfo
/proc/cpuinfo에는 서버의 사양에 관련된 정보들이 저장돼 있는 것 같다.
cat으로 /proc/cpuinfo의 내용들을 출력하면, 서버의 사양들을 알 수 있다.
-trainer6-
trainer5에서 얻은 암호로 trainer6로 접속하면 위와 같은 화면이 뜬다.
trainer5에서 예고했듯이 trainer6에서는 패스워드 파일 분석 방법을 배우는 것 같다.
위는 trainer5에서 봤던 패스워드 파일중 일부다. 이 일부로 패스워드 파일 분석을 해보겠다.
먼저 첫 번째 필드는 서버에 로그인할 때 사용되는 아이디다.
두 번째 필드는 x만 있는데, 사실 이 부분은 예전 버전의 리눅스에서 해당 계정의 비밀번호가 암호화 되어 적혀있던 부분이다. 이 암호화를 크래커들이 해독해서 비밀번호가 모두 노출되는 일이 생기자 관리자만 접근 가능한 /etc/shadow에 비밀번호들을 두고 /etc/passwd에는 x로 표기한 것이다.
세 번째 필드는 사용자를 식별하는 번호다. 컴퓨터는 해당 사용자를 이름으로 받아들이지 않고 숫자로 받아들이는데, 이 숫자가 사용자를 구분하는 것이다.
네 번째 필드는 사용자의 그룹 번호다. 이 역시 컴퓨터가 그룹을 식별하는 번호라 생각하면 된다.
다섯 번째 필드는 사용자의 이름이다.
여섯 번째 필드는 해당 사용자가 로그인에 성공 했을 때 기본으로 위치하게 되는 디렉토리다.
일곱 번째 필드는 사용자가 처음 로그인했을 때 실행되게 할 프로그램이다.
-trainer7-
trainer7은 파일 압축, 해제에 대해서 다룬다.
-tar
tar는 여러 개의 파일을 하나로 만들어주는 명령어다. tar로 파일을 합쳐보면 압축이 아닌 오히려 용량이 더 증가되는 것을 볼 수 있는데, 이 tar 명령은 파일의 용량은 크지만, 압축을 한게 아니기 때문에 파일 복구 속도가 빨라 파일 백업에 적합하다. tar로 파일들을 합치면 .tar 확장자가 붙는다.
합치기 : tar cvf <합칠 파일> <합칠 파일들...>
해제 : tar xvf <해제할 파일>
-gzip
gzip은 압축을 해주는 명령어다. 다만 tar와 다르게 여러 개의 파일을 하나로 압축할 수는 없고, 한 파일당 하나의 압축 파일이 생성된다. gzip으로 압축을 하면 .gz 확장자가 붙는다.
압축 : gzip <압축할 파일>
해제 : gzip -d <해제할 파일>
-trainer8-
trainer8에서는 텍스트 파일 생성, 추가와 간단한 c언어 파일을 만들고 컴파일 과정을 거쳐 직접 실행해 본다.
-cat >, >>
cat은 앞서 배웠던 명령어로 파일 내용을 출력해주는 역할을 한다. 출력 뿐 아니라 이 cat 명령어를 cat > <파일 이름>으로 작성하면 새 파일을 생성할 수 있다.
cat > <파일 이름> -> 파일 내용 입력 -> ctrl + d
위 과정을 거치면 파일 하나를 원하는 내용으로 생성할 수 있다.
또한 추가할 때는
cat >> <파일 이름> -> 추가할 내용 입력 -> ctrl + d
로 해주면 이미 있는 파일에 원하는 내용을 추가할 수 있다.
c언어 소스 파일의 경우 cat으로 파일을 생성할 때 확장자를 .c로 설정하고 안에 c언어 코드를 작성하면, c언어 소스 파일을 생성할 수 있다.
위는 cat으로 program.c를 만들고 그 안에
int main()
{
int a = 10, b = 20;
printf("10 + 20 = %d",a+b);
}
를 입력한 것이다.
코드는 그냥 a, b 변수를 선언하고 두 변수를 더한 값을 출력해주는 기능을 한다.
-gcc -o <실행 파일 이름> <소스 이름>
위에서 만든 파일을 gcc -o를 사용한다면 exe 실행 파일로 컴파일 할 수 있다.
위는 gcc -o 명령어로 위에서 만든 program.c를 program.exe로 컴파일한 모습이다.
만들어진 program.exe는 /home/trainer8/program.exe 이렇게 절대 경로를 지정해줘서 실행할 수도 있지만, 같은 디렉터리에 속해 있다면 상대 경로인 ./program.exe로 실행할 수 있다. "."는 현재 디렉터리를 의미한다.
-trainer9-
trainer9에서는 권한에 대해서 다룬다. 리눅스 서버에 들어가본 경험이 있다면 가끔가다 어떤 파일에 접근하려할 때 permission denied가 뜨는 경우가 있을 것이다. 이 오류가 바로 권한 밖에 있는 파일을 건들었을 때 나오는 에러 문구다.
리눅스에는 4가지 종류의 사용자가 있다.
유저 : 자기 자신을 의미
그룹 : 자신이 속한 그룹(보통 자기 자신의 이름과 같은 그룹에 속함)
아더 : 유저, 그룹을 제외한 다른 사람
루트 : 절대적 권한을 가진 사용자(관리자)
ls -al 명령을 사용한다면 각 파일들의 권한을 확인할 수 있다.
위는 ls -al test1을 쳤을 때 출력되는 정보로 권한에 대한 정보들이 담겨 있다. 위 정보를 예시로 분석해 보겠다.
-rwxrwxrwx 1 trainer9 trainer10 5 10월20 21:35 test1
3 5 7 2 4 1
1 : 파일 명
2, 3 : trainer9 uid를 가진 사용자에게 rwx(읽기, 쓰기, 실행) 권한이 있음
4, 5 : trainer10 gid를 가진 사용자에게 rwx 권한이 있음
7 : trainer9, 10을 제외한 사용자들에게도 rwx 권한이 있음
이런식으로 정보를 얻을 수 있다. 이 파일은 즉 모든 사용자에게 rwx 권한이 있는 것과 마찬가지인 것이다.
예시로 password 정보가 저장돼 있는 /etc/shadow를 ls -al로 확인해보면 오직 root 사용자에게만 r(읽기) 권한이 있는 것을 볼 수 있다. 즉 root를 제외한 사용자들은 아에 접근이 불가능한 것이다.
-id
위는 id 명령어를 쳤을 때 출력되는 정보들인데, 각 항목의 내용을 정리하겠다.
uid : user id의 약자로 사용자 id를 컴퓨터가 식별하는 숫자 정보다.
gid : Group id의 약자로 그룹 id를 컴퓨터가 식별하는 숫자 정보다.
groups : 현재 자신이 어느 그룹에 속해 있는지. 임의로 변경을 하지 않는한 자신의 uid와 같은 그룹에 속하게 된다.
-trainer10-
드디어 마지막 레벨이다. trainer10에서는 local 해킹시 핵심이 되는 setuid에 대하여 다룬다.
Local 해킹 : 해킹하고자 하는 서버에 id가 있을 때 권한 상승(root 권한 획득)을 시도하는 것.
Remote 해킹 : 해킹하고자 하는 서버에 id가 없을 때 브루트 포스, 데몬 취약점 공격 등을 통해 접속을 시도하는 것을 뜻한다.
우리에게 중요한건 역시 local 해킹이다. remote 해킹을 통해 서버에 접속했다 하더라도 권한상승을 하지 못한다면 할 수 있는게 거의 없기 때문에, remote 해킹을 성공했더라도 local 해킹을 통해 root 권한을 얻어야 한다.(예전에는 몰랐는데 wargame이나 ctf에서 취약점을 찾고 exploit을 하는 이유가, 관리자 권한 setuid가 결려 있는 프로그램을 공격해 그 취약점으로 관리자 권한을 얻기 위해서 였다.)
-SetUID
SetUID는 ID를 일시적으로 변경한다는 뜻이다.
setuid는 파일에 걸리는 것으로 일반 사용자가 해당 파일을 실행하면 실행 될 때만 일시적으로 id가 변경되고, 실행이 끝난 후에는 다시 원래 id로 돌아온다. 즉 setuid가 root인 파일을 공격해 해당 파일에서 /bin/bash가 열도록 하면 root 권한으로 bash 셸이 열리기 때문에 결국 root 권한으로 명령을 실행할 수 있는 것이다.
ls -al 명령어로 계정 정보가 들어있는 /usr/bin/passwd의 정보를 보면 다음과 같다. 보면 화살표가 가리키는 위치에 r, w, x가 아닌 s가 존재하는데, 이는 우리가 배우지 않았던 것이다. 이 s는 setuid를 나타낸다. 즉 해석해보면 저 파일을 여는 사용자는 setuid 덕분에 root 권한을 잠시동안 갖게 되는 것이다.
-find / -perm 4000
find / -perm 4000을 입력하면 setuid가 걸린 모든 파일들을 찾을 수 있다. find는 파일을 찾는 명령어로 '/'는 최상위 디렉토리부터 찾는 다는 것을 뜻하고, -perm은 권한과 일치하는 파일을 찾아주는 옵션이다. 4000에서 4는 setuid를 의미하고 000은 각각 r, w, x를 모두를 의미해서 이대로 검색한다면 setuid가 걸린 모든 파일들을 찾아주는 것이다.
find / -perm 4000 명령어를 치니 setuid가 걸린 모든 파일이 출력된 것을 볼 수 있다.
그 밖에도 find 명령어에는 여러 옵션이 있다.
-perm : 권한과 일치하는 파일 찾기
-name : 이름과 일치하는 파일 찾기
-user : 유저와 일치하는 파일 찾기
-group : 그룹과 일치하는 파일 찾기
위 옵션들을 조합해서 find / -user root -perm -4000 이렇게 작성한다면, 단순 setuid가 걸려있는 파일이 아닌, root 권한으로 setuid가 걸려있는 파일들을 찾아낼 수 있다.
'Wargame > FTZ' 카테고리의 다른 글
[FTZ] Level 11 (0) | 2021.05.28 |
---|---|
[FTZ] Level 10 (0) | 2021.05.28 |
[FTZ] Level 9 (0) | 2021.05.10 |
[FTZ] Level 6 ~ Level 8 (0) | 2021.03.28 |
[FTZ] Level 1 ~ Level 5 (0) | 2021.03.27 |