YeoPEVA

해커스쿨 ftz - 트레이닝 공략 본문

#Pwn, Crypto/해커스쿨

해커스쿨 ftz - 트레이닝 공략

YeoPEVA 2016. 11. 8. 00:09

trainer1 -trainer1


[trainer1@ftz trainer1]$

  접속ID  서버  현재위치


# -> 루트


ls -> 디렉토리,파일 리스트 

-l -> 디렉토리 파일 구분 출력

-a -> 숨겨진 파일들 출력

-al 같이 사용 


drwxr-xr-x    2 trainer1 trainer1     1024  9월 24 11:52 tmp

퍼미션 정보 -9(트)      용량     생성 날짜 


-rw-rw-r-- -> 파일의 mode 및 파일의 성격 

-rw-rw-r-- (가장 왼쪽 - 파일)

  (단 d 라면 디렉토리)



trainer2 - linuxer


pwd - 경로 출력


cd - .. (한단계 위로 올라감.)

cd 디렉토리명 (내려감)

cd / 최상위로 이동

 

한번에? cd /home/trainer2 이런식으로. 


mkdir -> 디렉토리 만들기 

mkdir "이름"


rmdir -> 디렉토리 삭제

사용 방법은 같음 

 

cp 복사원본 복사사본 (파일 복사 


cp "복사대상" "복사될이름"


mv -> 파일이동


mv (파일이름 변경시 사용 or 파일 옮기기)

mv lcy606 6704lee 요런식 


trainer3 - computer


w -> 유저 접속 확인 


12:51pm  up 2 days,  5:23,  1 user,  load average: 0.00, 0.00, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT

root     tty1     -                12:51pm  1.21s  0.20s  0.03s  w  

guest pts/0    210.95.24.129    03:21am  3.10m  0.12s  0.01s  -bash


1 2   3     4        5      6       7     8


1 현재 - trainer3란 이름으로 로그인 되어있다.


2 위에서 tty -> 콘솔 접속, pts -> 터미널 접속, 뒷 숫자(몇번째 터미널로 접속했는지 확인) 0,1,2 (요러콤)


3 또한 접속한 컴퓨터의 ip를 보여줌 (root의 경우 콘솔 접속 -> ip X) 


4 언제 로그인했는지 확인 가능


5 지연시간 (얼마나 오랫동안 아무것도 입력하지 않고 있는지 확인 -> 일하는지 안하는지 확ㅇ..은 아니겠죠 

게스트 -> 3시간 10분       root -> 1분 21초


6. CPU 사용한 지연 시간


7. WHAT 필드에 있는 명령어 지연된 시간


8. 접속자들이 현재 어떤 명령을 사용하고 있는지 보여줌.



finger -l (사용자 정보 확인)


tty -> 자신의 터미널 확인


ifconfig -> ip 확인 (접속 서버)



w 정보 확인 (게스트의 pts) 번호 확인 


write  명령 -> write ID /dev/pts/pts 번호 (이런식으로 사용)   [쪽지 보내기]

write guest /dev/pts/1 


wall test (전체 사용자에게 test라고 보냄)

wall -> 사용자 모두에게 쪽지 (브로드캐스트)


trainer4 - mungguta


디렉토리,파일 


bin -> (필수) 리눅스 실행 파일들이 들어가 있음 (ls , rm 명령어 또한)

boot -> 리눅스 부팅 관련 파일 및 리눅스 심장, 커널이 있음

dev -> 컴퓨터에 설치된 하드웨어에 관한 정보들이 파일 형태로 저장

etc -> 많은 중요한 파일이 있음, 패스워드 파일 쉐도우 파일 , 대부분의 리눅스 설정 파일

home -> 일반 사용자들의 디렉토리가 들어가는 곳 (게스트 및 여기서 쓰이는 계정 모두 이 디렉토리 안에 존재) 

lib -> 많은 라이브러리 파일들이 들어가 있음

mnt -> 마운트 명령을 사용하여 마운트 시킨 시디룸, 플로피 디스켓 등이 들어가는 디렉토리

proc -> 프로세스들이 파일 형태로 저장되는 디렉토리

root -> root의 홈 디렉토리

sbin -> 기본 명령 제외, 시스템 관리용 실행 파일들이 들어있는 디렉토리

tmp -> 임시로 파일을 저장하는 디렉토리, 권한에 상관없이 누구나 이 디렉토리에 파일 생성 가능

usr -> 다양한 응용 프로그램들이 설치되어 있는 곳


bin (기본적 실행 파일) etc (리눅스 설정 파일) tmp (누구나 파일을 올릴수 있는 작업 공간) home (일반 사용자 아이디, 작업공간)


/etc/passwd    : 사용자들에 대한 간단한 정보가 들어있습니다.


- /etc/shadow    : 사용자들의 패스워드가 들어있습니다.

  아무나 보지 못하도록 설정되어있지요.


- /etc/services  : 서버가 어떤 어떤 서비스를 하는중인지 보여줍니다.


- /etc/issue.net : 처음 접속될 때 나오는 화면 입니다.

  해커스쿨의 F.T.Z에 오신걸 환영합니다! 

                   라는 문구도 이 곳에 들어가 있습니다.


- /etc/motd      : 로그인 후에 나오는 메세지가 들어가 있습니다.


- ~/public_html  : 각 사용자들의 홈페이지 파일이 들어가 있습니다.

  보통 해킹에 성공하면 이 파일을 수정하여,

  hacked by xxx 라는 문구를 남깁니다.


trainer5 - goodluck


서버의 정보 수집


whoami -> 자신이 누구인지 확인


id -> 자신의 id 확인 (트레이너 9 참고)


cat /etc/passwd (이때 나오는 목록 중 가장 왼쪽 -> 사용자 아이디)

[다음 강좌]


커널 버전 확인 -> uname -a (커널 취약점 확인)


해킹? root 권한을 취득 (절대적인 관리자) 


레드햇 리눅스, cent os, 페도라 리눅스, 우분투 리눅스 등 (많은 OS 존재)


os 버전 확인 -> cat /etc/*release (레드헷 리눅스 9.0 사용중이랍니다.)


rpm -qa (패키지 정보들 확인) (버전 확인 -> 취약점 존재하는 버전인지 숙지,해킹)


cat /proc/cpuinfo (cpu 정보 수집하는것)


trainer6 - coffee

(패스워드 파일 분석)


패스워드 파일은 -> 한 서버를 사용하는 사용자들의 모든 정보를 기록해 놓은 파일을 말하는것입니다.



cat -> 파일의 속내용 화면으로 뿌림 

cat 파일이름


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


: 문자 -> 필드를 구분해주는 문자열


1번째 -> 로그인할 때 사용되는 아이디 (계정)


2번째 -> 패스워드가 적혀있는 부분..이였으나! |  [5.0 까지] 크래커들이 암호화된 문자열들을 해독하는 프로그램을 만들어서 해독, -> 더 복잡한 방법으로 패스워드 암호화!는 다시 뚫립니다. 다시 암호화 기법 나오고 다시 뚫리고 반복, -> 아 안해 2번째 필드 패스워드 없애고 x만 보여줘

    이로인해.. x만 보여주게 되었고 패스워드는 /etc/shadow 라는 파일에 가게 되었습니다. 그리고 관리자가 아니면 보지도 못하게 됬지요. [그후 6.0 이후 지금까지 사용중]


(잠깐 /etc/shadow 열려고 하면? <- 허가 거부 뜹니다..)


3번째, 4번째 -> 0이 있네요.  컴퓨터는 영어나 문자 보단 숫자를 애호하는건 아시고 있죠..? [2진수라던지..2진수라던지..2진수라던지..] 그런식으로 root로 접속하게 되면 컴퓨터는 패스워드 파일을 확인, 0이라는 놈이라는걸 확인하게 되고, 0이라는 그룹에 속한다는것을 숙지하죠

[9에서 자세히 배웁니다~~] 


5번째 -> 사용자의 이름...[ㅇㅁㅇ] Admin -> 관리자라는 뜻이죠


6번째 -> 로그인 성공시 위치하게 되는 디렉토리


7번째 -> 사용자가 처음 로그인했을때 실행되게 할 프로그램 (/bin/bash이네요) -> 쉘입니다.


trainer7 - to the top


압축,해제 하는법


tar , gzip 


tar 사용법 [사실은 압축 프로그램 아닙니다 ^^]


합치는 법 -> tar cvf 합칠 파일 합칠파일들

해제 -> tar xvf 해제할 파일


-c 새로운 파일을 만드는 옵션| -x 압축해제 옵션 | -v 압축이 되거나 풀리는 과정 출력 | -f 파일로서 백업하겠다라는 옵션


c - Create  x - eXtract v - View    f - File    


ex -> tar cvf songs.tar * (이런식) *<- 전체 (모든 파일)


근데.. 문제가.. 압축이면 용량이 줄어야하는데 더 커집니다. [...]


tar -> 압축하지 않고 그냥 합쳐버립니다. [ 푸는 속도가 빨라집니다.]


그러므로 백업용으로 풀때 엄청 빠른속도로 풀수 있겠죠

또한 gzip은 한번에 한개의 파일만 압축할수 있습니다.

그러므로.. tar랑 같이 사용하지 않으면 엄청 힘들겠죠?


그럼 이걸 어떻게 할까요?


tar로 다 붙이고, gzip으로 압축하면 되겠네요.


바로 gzip을 알아봅시다! 


gzip 파일이름 (압축)


gzip -d 파일이름 (압축해제)


위에서 ex로 한 tar를 gzip을 통해 압축해보죠


ex -> gzip songs.tar  


[압축 성공]


압축 파일 확장자


tar -> 여러 파일들이 하나로 뭉쳐져 있는 파일 (tar 프로그램)


gz -> gzip 프로그램을 사용하여 압축된 파일


tar.gz ->  tar 후 gz로 압축한것이죠?


tgz -> tar.gz 를 합쳐서 tgz 확장자로 만들때도 있답니다. 


자 그럼 위에서 나온걸 풀어볼까요?


gzip -d songs.tar.gz -> gz 압축 해제


tar xvf songs.tar -> tar 압축 해제


이러면 끝나네요 ^^ 


백업 해두고 나중에 피해 입었을때 쓰면 되겠네요 ^^ tar -> gz -> 백업 -> 공격 -> gz -> tar -> 복구 완료


-z : tar파일로 묶는 동시에 gzip로 압축을 진행합니다.

-j : tar파일로 묶는 동시에 bzip2로 압축을 진행합니다.

(tar 옵션을 더 알아봤습니다.)


그리고 압축하는게 더 있더군요.


bzip2 -> CPU 사용률은 높으나 최고의 압축률을 제공합니다. 

bzip2 [옵션] [파일명]


-z (압축) -d (압축 해제) -k (원본 파일 자동 삭제x) -v (압축 과정 또는 해제 과정 보여줌) -s (메모리 적게 사용, 작업 시간 상승) -f (같은 파일, 덮어쓰기)


zip -> 압축력이 낮으나 모든 OS에서 호환되며 여러개를 묶어 압축이 가능합니다. 

[압축 해제시에는 unzip [파일명]으로 푼다고 하네요]


-r (하위 디렉토리까지 모두 포함 압축) -p (압축 암호 설정)


그외에도 압축 방식이 있긴 있으나 이정도만 다루도록 하죠 ^^


또한 cat 말고도 more,less,head,tail,grep 이 있으니 시간이 나시면 구글링 하면서 익혀보시는것도 괜찮을것 같네요 ^^

-------------------------------------------------------

trainer8 - player


새로운 파일 만들고 , 컴파일러, 및 실행 -> 이거 쉘코드 만들때 필요한 기술 아닌가요?? 필수 아닙니까? 


파일 -> 1. 텍스트 파일   2. 소스 파일 (cat x) -> 컴파일 이후 실행 가능 -> 사용


텍스트 파일 생성 방법?


cat > 파일이름.txt


원하는 내용을 씁니다!


컨트럴키와 D를 동시에 누립시다.


or vi 파일이름.txt 하는 방법도 있습니다


근데 여기서 > 이 문자는 리다이렉션이라고 읽으며 방향을 전환한다는 뜻이 있다고 합니다.


방향 전환 -> 보통 실행 결과를 모니터로 출력합니다 (리눅스)  그냥 cat이라고 입력하고 아무 글자나 마구 입력 -> 그대로 모니터에 나옵니다. 


이 리다이렉션을 사용, 입력 결과를 모니터가 아닌 파일로 보내버리는겁니다~  > (왼쪽으로 입을 벌리고 있다) -> 왼쪽에서 출력되는것을 받아서 오른쪽의 입력으로 보내버린다"


그런데 여기서 cat > test.txt를 다시하면? 기존의 내용은 다 날라가고 파일이 다시 만들어 집니다.


기존 내용 보존하면서 글자를 써 넣을려면? -> 리다이렉션을 두번 사용합시다. >>



프로그램 소스 파일 


cat > program.c (확장자에 c가 붙었네요)


일단 c를 예를 들어서


int main(void){

int a = 10, b = 20;

printf("10 + 20 = %d", a+b);

}


이렇게 소스를 작성 한후 실행 결과를 보기 위해서는 어떡해야할까요? 


먼저 컴파일을 해야할것입니다.


컴파일은 gcc -o 프로그램이름 소스파일이름 으로 하시면 됩니다.

[아무 일 x -> 문제 x]


그런 후 파일을 실행하면 끝나는데


도스는 디렉토리로 이동한후 파일이름만 실행시키면 됬으나 

리눅스는 그 파일이 있는 절대경로를 모두 입력해야만 실행이 됩니다. (...)


절대 경로란 최상위 디렉토리인 루트 에서 부터 시작되는 경로를 말하는 말입니다.

예를 들자면... /home/who/바탕화면/ 이런식으로 말이죠!


상대 경로는 자신이 위치한 디렉토리를 기준으로 경로를 따지는 겁니다.

(현재 바탕화면에 있을시)

cd 프로그래밍 (이런식으로 말이죠) 


아 그리고 이러는 방법도 있습니다.


/home/who/바탕화면/프로그래밍/plus.exe 이렇게 있다 하죠


cd /home/who/바탕화면/프로그래밍

./plus.exe 하면 실행됩니다 


. <- 현재 디렉토리를 의미함.


./plus.exe 이런식으로 가능합니다. [절대 경로 x]


trainer9 - programming


리눅스 권한을 다루었습니다.


남이 봐서는 안되는 비밀 문서, 프로그램 -> 권한이라는 개념이 나오게 됩니다.


Permission Denied 라는 것이죠.  -> 권한 밖의 프로그램,파일을 건들었다.


그 말 즉슨 root(최고 관리자)가 아닌 이상 다른 계정들은 그것을 볼수 없습니다. [자기가 작성한 파일]


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


유저 -> 자신을 의미, level1으로 로그인시 level1이라는 유저가 됨. 이와 같이 trainer10에 로그인하면 trainer10이라는 유저가 되겠지요.

그룹 -> 모든 유저는 하나 이상의 그룹에 속하게 됩니다, 임의로 그룹 변경 x -> 모든 유저는 자신의 유저네임과 같은 이름의 그룹에 속하게 됩니다.

아더 -> 유저와 그룹을 제외한 모든 사람

루트 -> ... 아시죠? 절대적인 권한을 가지고 있는 사용자입니다. 어떤 권한도 무시하고 파일을 제어하죠.  이 권한을 얻기 위해서 하는 것이 해킹입니다.


그럼 id를 통해 정보를 가져옵시다.


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


uid (user ID) -> 컴퓨터는 숫자를 좋아하기 때문에..(2진수라던지..2진수라던지..) 사용자들에게 자신이 알아보기 쉬운 숫자를 부여, 누구인지 파악하는것입니다. trainer9 = 2009 라고 할수 있겠죠.

gid (Group ID) -> 각 유저마다 gid를 가지고 있으며 다른 사람을 자신의 gid를 가진 그룹에 속하게 할수 있습니다. 사실상 별일 없는 이상 uid,gid는 변화가 없습니다.

groups ->  현재 자신이 어떤 그룹에 속해 있는지를 말해줍니다. 임의 변경을 하지 않는다면야 기본으로 자신의 uid 와 같은 그룹에 속합니다.


파일 권한 


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


먼저 - 부분을 통해 우리는 디렉토리인지 파일인지 구분했었습니다.

그런데 이제 우리가 봐야하는 곳은 rwxrwxrwx 이 곳 이지요.


rwx rwx rwx 

이것이 바로 권한에 관한 정보이며, 순서대로 유저의 권한 , 그룹의 권한, 아더의 권한을 의미합니다.


rwx 순서대로 r은 읽기권한 w는 쓰기 권한 x는 실행권한입니다.


유저와 그룹, 아더가 누군지 어떻게 알 수 있을까요?


 1 trainer9 trainer10  

     유저     그룹    


이런식으로 확인 할수 있으며 이 둘을 제외한 모든 아이디는 자동으로 아더가 됩니다.


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

 3  5  7            2        4                              1

차례대로 보자면.. 


1 -> test1 파일은

2 -> trainer9 라는 uid를 가진 사용자에게

3 -> 읽기,쓰기,실행 권한이 있으며

4 -> trainer10 이라는 gid를 가진 사용자들 또한

5 -> 읽기, 쓰기 ,실행 권한이 있으며 (r,w,x 이거죠)

6 -> trainer9와 10을 제외한 모든 사람에게도 

7 -> r,w,x 권한이 있다.


이런식으로 볼수 있는데 , test1은 아이디를 가지고 있다면 누구나 마음대로 할 수 있는 파일이군요.


하나 더 하면.


-rwxr-x--x    1 guest trainer1       104 10월 20 21:08 test2


test2라는 파일은 guest라는 uid를 가진 사용자에게 r,w,x 권한이 있으며 (읽기,쓰기,실행)

trainer1 이라는 gid를 가진 사용자들은 r-x 즉 r,x 권한만 있으며 (읽기,실행)

guset와 trainer1을 제외한 사용자들에게는 x권한만 있다는것을 알수 있겠네요. (실행)


읽기 권한 -> 파일 내용을 보려할때 Permission Denied 등장 (cat 같은 명령어)


쓰기 권한 -> 파일의 수정 권한입니다. ex) cat >> 내용 덧 붙이기 및 vi로 편집 등등..


실행 권한 -> 파일의 실행 권한 이지요. 권한에 따라 이 프로그램을 실행할수 있는지 없는지를 확인할수 있을껍니다. (또한 실행 파일인지 아닌지를 구분하는데 쓰입니다. (리눅스에서는 윈도우 처럼 확장자만 보고 맞는지 아닌지 알수 없습니다.) )


이러한 권한을 실제로 보자면..


예를 들자면. shadow 파일이겠지요. 루트만 볼수있는 파일입니다.

실제로 ls -al 을 통해 확인해보면 


-r--------    1 root     root         3170 Sep 10  2011 /etc/shadow


root에게만 읽기 권한이 있습니다.


trainer10 - best!


SetUID에 대해 알려주는 트레이닝 이였습니다 (마지막)

제 글에서도 비밀번호 해킹? 이라는 글에서 다룰 예정입니다.


Local 해킹 시 핵심이 되는 setUID인데요.


해킹에는 로컬 해킹, Remote 해킹으로 두가지로 나뉩니다.


Remote 해킹은 -> 자신이 해킹하고자 하는 서버에 아이디가 없을때, 아이디를 얻고자 시도하는 것입니다.


그럼 로컬 해킹은

? (Local) -> 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때 관리자 권한을 얻고자 시도하는 것이죠.


Remote 해킹 방법에는 무작위 대입 공격이나.. 데몬 취약점 이용, 게시판이나 방명록을 이용하는 방법등.. 무궁무진 합니다.


그런데 본 게임은 사실상 로컬 해킹입니다. 일반 사용자 계정을 얻는다고 해도 서버에 영향을 주긴 힘들테니까요. 

그러므로 root 권한을 얻어야 합니다. root 권한을 얻어서 그 서버를 사실상 지배하는것이죠. 


그러면 .. ^^ [서버를 날려버리거나, 홈페이지를 바꾸거나, 사실상 모든 활동이 가능합니다.]


자  그럼 평범한 계정을 -> root로 바꾸기 위한 해답은? 바로 SetUID에 있습니다. 


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


Set -> 변경한다란 뜻이며, UID는 아시죠? User ID의 약자입니다. 한마디로. ID로 변경한다라고 해석이 되겠지요.


더 자세히 보자면. SetUID는 일시적으로 자신의 ID를 변경하는 것을 말합니다.


일시적으로 자신의 ID를 변경한다.. 왜 필요할까요?


그 답은 이것입니다.


패스워드를 바꾸고 싶다 -> passwd 명령을 통해 바꾸었다 -> 바뀌었다. 

여기서 우리의 패스워드는 쉐도우 파일에 있다는것을 아실껍니다. 그런데 이 파일은 root에게만 수정 권한이 있는데, 어떻게 우리가 패스워드를 바꿀수 있었을까요?


이 답이 바로 SetUID입니다.  Passwd 파일에 루트 권한의 SetUID가 걸려있어서, 일반 사용자들이 그 passwd 파일을 실행하는 동안에는 루트로의 일시적인 아이디 변경이 되는것입니다.


정리 -> SetUID는 파일에 걸린다, SetUID가 걸린 파일을 실행하면 나의 아이디가 변경되고, 실행이 끝나면 원래의 아이디로 돌아오는구나. 

라고 이해하시면 됩니다.


그런데 SetUID가 걸린 파일은 Passwd 하나뿐만 아닌 수십개나 되는 파일들이 걸려있습니다.


이유는.. root가 할 일이 너무 많기 때문에 passwd, sendmail 등등.. 파일들에게 자신의 권한을 나누어 주어 이 점을 해결합니다.

물론 그 파일들은 딱 필요한 만큼만 권한을 제공한뒤 다시 권한을 가져갑니다. 


이때 그 파일 중 멍청한 파일들 중 하나를 속여, 관리자 권한을 흭득 하는것입니다.

이런식으로 새로운 방법을 연구하여 그것에 성공하면, 그것은 새로운 해킹 기법이 되어 세상에 나타나는것이죠.


"레이스컨디션", "IFS버그", 

"링크버그", "버퍼 오버플로우", "포맷 스트링 어택" 등이 바로 이것이며


이러한 버그를 통해 SetUID를 넘겨준 파일은 userhelper, restore,screen 등 수많이 있습니다.  


그 중 버퍼오버플로우를 이 트레이닝에서 다뤘는데요.


joe 라는 파일이 있습니다. (SetUID가 걸려있습니다.) 

joe는 문서 편집을 할때 사용하는 파일이며 joe filename 이라고 입력하면 해당 파일의 편집 화면이 출력됩니다만..


이 joe라는 문서는 문제가 있습니다.  joe filename 에 filename이 1000자가 넘어버리면 프로그램이 제대로 실행되지 않습니다.


이 점을 이용한 해커는 버퍼 오버 플로우 기법을 개발, 1000자를 넣은 뒤 에러가 나는 순간 /bin/bash를 실행하도록 조작하였으며. 


joe 라는 파일이 실행되는 동안 루트의 아이디로 변경, 그 상태에서 /bin/bash를 실행하니 루트 권한의 쉘을 얻게 되었습니다.

(그 뒤 일은...)


물론. 위는 수작업은 불가능합니다. 그리고 C언어를 숙지하고 있어야합니다.


이처럼 SetUID가 걸려있는 파일들이 대상이 되어 해킹이 이루어지고 있습니다.


...그런데 SetUID가 걸려있는지 안 걸려있는지 어떻게 확인할까요?


[trainer10@ftz trainer10]$ ls -al /usr/bin/passwd

-r-s--x--x   1 root     root        22312 Sep 26  1999 /usr/bin/passwd*

[trainer10@ftz trainer10]$ 

-r-s--x--x   1 root     root        22312 Sep 26  1999 /usr/bin/passwd*


여기서 보면 좀 이상한게 있습니다.


분명 우리는 w,r,x (읽고,쓰고,실행), d(디렉토리)는 배웠지만

보지도 못한 S가 보이네요?

이 s가 바로 SetUID를 의미합니다. x가 들어가야하는 부분인데 s가  들어가 있지요. (s는 x를 포함하고 있습니다.)


위 파일을 분석하면 이렇다고 합니다.


/usr/bin/passwd 파일은 root에게 읽기와 실행이 있고 (s->x 포함)

root라는 그룹에게는 실행 권한만 있고, 위를 제외한 사용자들에게도 실행 권한만 있습니다.

다만 root에게 setUID가 걸려있기 때문에 어느 사용자든지 이 파일을 실행할 때는 root의 권한을 갖게됩니다.


SetUID를 찾아봅시다.


find / -perm -4000


-> / 에서 부터 , 적어도 SetUID가 걸린 모든 파일을 찾아라


위에서 4000 앞에 붙은 -은 적어도를 의미하며 -perm은 권한을 찾겠다라는 옵션이며, 그 뒤의 4자가 SetUID를 의미하며 000은 rwx 모두를 의미합니다.


옵션 -perm 권한과 일치하는 파일을 찾는다.  find / -perm 4755

     -name 이름과 일치하는 파일을 찾는다.  find / -name cat

     -user 유저와 일치하는 파일을 찾는다.  find / -user mmung2

     -group 그룹과 일치하는 파일을 찾는다. find / -group guta 


위 옵션들은 조합하여 사용이 가능합니다.

ex ) -> find / -user root -perm -4000

-> 루트의 권한으로 SetUID가 걸린 파일을 찾아라. 


------------------------------------------------------------------------

이제 해커스쿨의 레벨별 해킹을 통과하는 방법을

알려드리며, 마지막 트레이닝을 마칩니다..


1. 자신의 아이디가 level3이라고 해보자.


2. level4로 넘어가기 위해서, level4의 권한으로

   SetUID가 걸린 파일을 찾는다.

   -> find / -user level4 -perm -4000


4. 그럼 한개 이상의 파일이 발견될 것이다.


5. 그 파일은 임의로 작성된 "멍청한 파일" 이다.


6. 그 파일을 이용하여 level4의 쉘을 얻으면 성공!.


7. my-pass 라고 입력하면 level4의 패스워드가..


레벨 시리즈는 추후에 하나씩 차례대로 공략하겠습니다. 


'#Pwn, Crypto > 해커스쿨' 카테고리의 다른 글

해커스쿨 FTZ level3  (0) 2018.02.04
해커스쿨 FTZ level2  (0) 2018.02.04
해커스쿨 FTZ level1  (0) 2018.01.29
해커스쿨 공략 전 계획  (0) 2017.07.23
해커스쿨 ftz - level1 공략  (0) 2016.12.03