Hongfluenza

[FTZ] 해커스쿨 trainer1-10 본문

CHALLENGE/hackerschool

[FTZ] 해커스쿨 trainer1-10

Hongfluenza 2018. 3. 15. 11:41

[trainer 1]

login : trainer1

passwd : trainer1


ls : 디렉토리와 파일 리스트 출력

ls -l : 디렉토리와 파일을 구분하여 출력

ls -a : 숨겨진파일을 볼 수 있다.

파일명 앞에 "."을 붙이면 그 파일은 숨겨진 파일로 변하게 된다.






[trainer 2]

login : trainer2

passwd : linuxer



pwd : 현재 경로 출력


cd .. : 한 단계 위로 이동하는 것.

예를 들어 현재 경로가 /home/trainer2에서 cd ..명령어를 입력하면 /home으로 이동한다.

내려갈 때는 cd 명령어에 디렉토리 명만 입력하면 된다.


/ : 최상위 디렉토리

따라서 최상위 디렉토리로 이동하려면 cd / 를 입력하면 된다.


mkdir(MaKe DIRectory) : 새로운 디렉토리를 만드는 명령어

만드는 방법 : mkdir "만들고자 하는 이름"


rmdir(ReMove DIRectory) : 디렉토리를 지우는 명령어


cp : 파일을 복사하는 명령어

사용방법 cp 파일1 파일2 : 파일1이 파일2라는 이름으로 복사된다.


rm : 파일을 삭제하는 명령어


mv : 파일을 옮기는 명령어 

cp 명령어와는 달리, 파일이 복사된 후 원본 파일은 자동으로 삭제된다.

따라서 mv 명령어는 파일 이름을 변경할 때 많이 쓰인다.




[trainer 3]

login : trainer3

passwd : computer


텔넷을 통해 해커스쿨 서버에 접속 = " 터미널을 통해 접속 "

리눅스 설치 후, 부팅하여 로그인 한 것 = " 콘솔을 통해 접속 "


w : 서버에 어떤 사람들이 접속해 있는지 알 수 있음







finger -l : 사용자들의 많은 정보를 볼 수 있음




 tty : 자신의 터미널 확인




ifconfig : 현재 접속한 서버의 ip를 볼 수 있음



서버의 ip 주소 : 211.195.119.130







[trainer 4]


login : trainer4

passwd : mungguta






[trainer 5]


login : trainer5

passwd : goodluck



whoami - 자신이 누구인지 알 수 있는 명령어 (id를 입력하면 조금 더 많은 정보를 얻을 수 있다.)






/ect/passwd - 모든 사용자들의 정보를 알 수 있다. ( 이 서버에 어떤 사람들이 계정을 얻어서 사용하고 있는 지를 알고싶을 때 )



가장 왼쪽의 단어가 사용자들의 아이디이다.



커널 - 리눅스의 심장부 역할을 하는 파일

커널 버전에 따라서 리눅스의 성능과 속도가 차이가 난다.


같은 버전의 리눅스라도 커널 버전이 높다면

속도도 빨라지고, 안전성도 높아진다.



해킹중에도 커널을 이용한 해킹이 많기 때문에

서버에 아이디가 있는 상태에서 정보를 캐낼 때 가장 먼저

하는 것이 커널 버전을 보는 것이다.






root권한 - 리눅스나 유닉스에서 모든 파일을 관리하는 절대적인 관리자 권한

이 권한을 가진 사람은 어떤 권한에도 구속되지 않은 채 서버를 조정할 수 있게된다.




패키지 - 한 프로그램에 그 프로그램이 실행되기 위해 존재하는 부속 파일들



서버에 설치된 OS의 버전 확인하기



rpm -qa : 패키지의 정보를 얻을 때 사용하는 명령어


cat /proc/cpuinfo - CPU의 정보를 수집하기 위해 사용하는 명령어




[trainer 6]


login : trainer6

passwd : coffee


cat - 파일의 속내용을 화면으로 뿌려주는 역할을 함


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

(어떤 ID, 어떤 암호를 이용하여 로그인 하는지, 어떤 그룹에 속해있는지, 이름은 무엇인지 등등...)



여기서 :는 필드를 구분해주는 문자이다.



⑴ root

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

-> 현재 trainer6라는 아이디로 로그인 했기 때문에, 패스워드 파일 정보에서 우리의 정보를 찾아보면

trainer6 : : : : : : 이렇게 나올 것이다.



⑵ x

이 부분은 패스워드가 적혀 있었던 부분으로

리눅스 5.0 버전 이하에서는 암호화된 문자열이 들어있었다.


해커들이 암호화된 문자열을 손쉽게 풀어버리는 바람에

두 번째 필드의 패스워드를 없애버리고 x라는 문자만 보여주는 방법을  생각해냈다.


사용자들의 패스워드를 따로 모아 새로운 파일을 만들었고,

그것이 바로 /etc/shadow라는 파일이다.

이 쉐도우 파일은 관리자 권한을 가진 사람이 아니면 

펼쳐볼 수 없도록 만들었다.


이 방법은 크랙을 피하는 가장 완벽한 방법으로 채택되어

리눅스 6.0 이후 지금까지 계속 사용되어지고 있다.


만약 우리가 쉐도우 파일을 열어보려고 할 때에는, ( cat /etc/shadow )

허가 거부 됨 이라는 메시지가 뜰 것이다.


⑶ 

컴퓨터는 영어보다 숫자를 좋아하기 때문에

단어가 아닌 숫자를 사용하여 사용자를 판단한다.

root라고 입력했을 때 0이라는 간단한 숫자로 인식해버린다.



⑷ 

해당 사용자가 속해있는 그룹



즉 (3)번과 (4)번을 종합하자면,

"컴퓨터는 우리가 root라고 입력 하면, 지금 들어오는 컴퓨터는 0이라는 녀석이고, 

0이란 그룹에 속해있구나" 라고 간단하게 정리할 수 있다.




사용자의 이름을 말해주는 부분

Admin = 관리자


대학의 서버들은 모든 학생들에게 리눅스 계정을 주기 때문에

다섯번 째 필드에 그 학생의 실명이 들어가 있다.


해당 사용자(위의 사진에서는 root)가 로그인에 성공했을 때

기본으로 위치하게 되는 디렉토리를 말해준다.


root 라는 아이디로 로그인 성공 시, /root로 자동으로 들어가게 된다.

나는 trainer 6로 로그인 했으므로

/home/trainer6에 들어가게 된다.

(따라서 root라는 아이디로 로그인에 성공하면 /root로 자동으로 들어가게 된다.

현재 우리는 /root/trainer6 로 들어가게 된다. )



사용자가 처음 로그인 했을 때 실행되게 할 프로그램을 말한다.



[trainer 7]


login : trainer7

passwd : to the top



리눅스는 서버의 용도로 사용되기 때문에, 수시로 새로운 데이터들이 업데이트 된다.

따라서 데이터들이 손실되는 것을 방지하기 위해 "백업"을 하는 것은 필수이며, 이 백업을 할 때 압축 명령어들이 사용된다.



'백업한다'는 의미는 하드에 들어있는 데이터(디렉토리, 파일, 개인정보, 게시물,…)를 

똑같이 다른 곳으로 복사하여 안전하게 보관하는 것을 말한다.



[tar 명령어]




⑴ 합치기 


tar cvf 합칠파일 합칠파일들


⑵ 해제하기


tar xvf 해제할파일





여기서 간단히 옵션들을 정리하자면 


c - Create : 새로운 파일을 만드는 옵션


x - eXtract : 압축을 해체시키는 옵션


v - View : 압축이 되거나 풀리는 과정을 출력하는 옵션


f - File : 파일로서 백업을 하겠다는 옵션





3개의 파일이 존재함을 볼 수 있다.




현재 디렉토리에 있는 모든 파일(*)을 songs 라는 새로운 파일로 합치라는 뜻이다.





ls -al을 명령어를 사용하여

실제로 songs.tar이라는 파일이 생성되었음을 확인할 수 있다.



그 안에 아까 합친 3개의 파일이 존재할 것이라는 것도 알 수 있다.



그런데 이상한 점이 있다.



songs.tar파일이 세 개의 파일을 합쳤는데 오히려 용량이 증가함을 볼 수 있었다.




40960 > 12416 + 6964 + 9328




압축을 했다면 용량이 줄어들어야 할 법 한데

오히려 용량이 늘어났다.




tar 명령어를 사용하면 파일을 압축하지 않고 

그냥 합치기만 하기 때문에 다시 기존의 파일들을 복구할 때 속도가 매우 빠르다는 장점이 있다.

속도면에서 볼 때 백업용 프로그램으로는 따라올 자가 없겠다.




gzip 프로그램은 한번에 한 개의 파일만 압축할 수 있는데,

위 처럼 세 개의 파일이 있을 때 gzip을 사용하게 되면 

3개의 파일이 하나로 압축되는 것이 아니라, 3개의 파일이 각각 3개의 압축 파일로 생성된다는 뜻이다.



tar를 사용해 여러 파일을 1개로 뭉쳐버리고

gzip 프로그램을 사용해 압축해 버리면 금상첨화!



[gzip 명령어]


gzip 파일이름 : 선택된 파일을 압축한다.

gzip -d 파일이름 : 선택된 파일을 해제한다.



gzip songs.tar 명령어를 사용했다.

ls- al로 확인해 본 결과, songs.tar->songs.tar.gz로 변했음을 알 수 있고

용량이 40000에서 10000으로 확 줄은 것을 볼 수 있다.




tar : tar 프로그램을 사용하여 압축된 파일

사실은 압축이 아닌 여러 파일들이 하나로 뭉쳐져 있는 파일


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


tar.gz : tar 프로그램을 사용하여 파일을 합친 후 

또 다시 gzip을 사용하여 압축을 한 파일


tgz : 위의 tar.gz 을 합쳐서 tgz라는 확장자로 만들 때







이제 압축을 해제할것이다.


이전까지 압축이 된 과정을 떠올려 보자면

많은 파일 -> tar을 사용하여 1개로 뭉침(songs.tar) -> gzip을 이용하여 압축(songs.tar.gz)



반대로 gzip -d를 이용하여 tar로 만들고

그 tar를 tar xvf를 이용하여 해제하면 다시 처음의 파일들이 생성되겠다.




gzip -d songs.tar.gz 명령어를 통해서

tar.gz -> tar로 만들어 주었다.




ls -al 명령어를 통해서 확인해 본 결과

tar.gz -> tar로 변하면서

용량이 다시 증가함을 볼 수 있었다.





tar을 해제시킨다.




ls -al 명령어를 통해서 

파일들이 다시 생성됨을 볼 수 있었다.

압축 해제 끝!




[trainer 8]


login : trainer8

passwd : player



파일의 종류는 크게 두 가지가 있다.



1. 텍스트 파일



글자로만 이루어진 파일

cat 명령을 사용하여 내용을 출력한다.





생성법을 보다가 1번의 의미가 무엇인지 궁금해 할 수 있겠다.

'>' 문자는 "리다이렉션"이라고 읽으며, "방향을 전환한다"는 의미를 갖고있다.



그럼 방향을 전환한다는 것이 무슨 의미일까?



리눅스에서는 보통 실행 결과를 모니터로 출력한다.



리다이렉션을 사용하면, 그 입력 결과를 모니터가 아닌 파일로 보내버리는데

출력의 방향을 전환시킨다는 의미이다.



'>' 문자는 왼쪽 방향으로 입을 벌리고 있는데


이는 왼쪽에서 출력되는 것을 받아 오른쪽의 입력으로 보낸다는 의미가 된다.



그렇다면 1번의 명령어가 이해가 될 것이다.



cat > 파일이름.txt 는 cat 명령어를 사용하여 

입력하는 모든 글자들을 모아 파일이름.txt로 보내버리라는 의미가 된다.









만약 test.txt라는 파일이 이미 있고, 그 안에 내용이 있을 때


" cat >> test.txt " 를 입력해주면


test.txt 뒤에 새로운 내용을 추가시킬 수 있게 된다.








그렇지 않고 cat > test.txt 를 입력하게 되면


기존의 내용은 사라지고 새로운 내용으로 파일이 다시 만들어지기 때문에 


리다이렉션을 두번 써줌으로 기존의 내용을 보존시키면서 글자를 써 넣을 수 있게 된다.










2. 프로그램 소스 파일


프로그램 소스란 컴퓨터 언어로 입력한 파일을 말하며


텍스트 파일이지만 cat이 아니라 '컴파일' 이라는 과정을 거쳐서 실행이 가능하도록 만든 후 사용한다.




컴파일을 하는 방법은


" gcc -o 프로그램이름 소스파일이름 " 이다.


program.c 라는 파일을 program.exe로 만들려고 한다면


gcc -o program.exe program.c 라고 입력해주면 된다.




리눅스에서 파일을 실행시키려면 


그 파일이 있는 절대경로를 모두 입력시켜주어야만 실행이 된다.



여기서 절대경로란


최상위 디렉토리인 루트 (/) 에서 부터 시작되는 경로를 말한다.


( 반대로 상대경로는 


자신이 위치한 디렉토리를 기준으로


경로를 따지는 것을 말한다. )



리눅스에서는 '.'이 "현재 디렉토리"를 의미한다.

따라서 절대경로를 쓰지 않고도 이 '.'을 사용하면 아주 간단하게 프로그램을 실행시킬 수 있다.


[절대경로] /home/trainer8/program.exe


[상대경로] ./program.exe






[trainer 9]


login : trainer9

passwd : programming


리눅스는 각 사용자마다 특별한 권한을 부여하여 

그 권한의 범위를 넘어서지 않는 파일들만 제어할 수 있도록 설정되어 있다.


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





이제 id에 대한 정보를 분석해 볼 것이다.






uid


User ID의 약자


뒤의 2009는 컴퓨터가 영어<숫자를 좋아해 


사용자들에게 자기가 알아보기 쉬운 숫자를 부여하고


그 숫자로 누구인지 판단한다. 


id 라는 명령으로 trainer9 = 2009 임을 알 수 있다.





gid


Group ID 의 약자


각 유저마다 gid를 갖고있고, 다른 사람을 자신의 gid를


가진 그룹에 속하게 할 수 있다.


특별한 일이 없는 한, 항상 uid=gid 이다.




groups


현재 자신이 어떤 그룹에 속해있는 지를 말해준다.


임의로 변경하지 않는 한, 기본으로 자신의 uid와 같은 그룹에 속하게 된다.









파일에 관한 정보를 분석하기 위해 다음과 같은 명령어를 입력해준다.



rwx rwx rwx


권한에 관한 정보이며


차례대로 "유저의 권한" - "그룹의 권한" - "아더의 권한"을 뜻한다.


r - 읽기권한


w - 쓰기권한


x - 실행권한




그럼 유저, 그룹, 아더가 누구인지는 어떻게 아는가 ?


trainer 9 = 유저


trainer10 = 그룹


그리고 이 둘을 제외한 모든 아이디는 자동으로 아더가 된다.








여기서 실행권한에 대하여 하나씩 알아보자면



읽기 권한


읽기권한이 없다면 cat 명령으로


파일 내용을 보려고 할 때, Permission Denied가 나온다.




쓰기 권한


그 파일의 수정 권한을 말한다.


쓰기 권한이 있는 파일에는 cat >> 명령을 이용하여 내용을 덧붙일 수 있고


편집기를 이용하여 내용을 편집할 수도 있다.



실행권한


실행파일인지 아닌지를 구별하는 방법은


'x'라는 문자가 있는지 없는지를 확인해 보면 된다.





[trainer 10]

login : trainer10

passwd : best!





Remote 해킹


자신이 해킹하고자 하는 서버에


아이디를 갖고 있지 않을 때, 아이디를 얻고자 시도하는 것을 말한다.


Remote 해킹의 방법에는 여러가지가 있다.

(무작위로 아이디와 비밀번호를 입력하여 접속, 데몬의 취약점을 공략하여 접속하는 방법,

게시판이나 방명록을 이용하여 접속하는 방법 등)



Local 해킹


해킹하고자 하는 서버에


일반 계정을 가지고 있을 때, 관리자 권한(root)를 


얻고자 시도하는 것을 말한다.





SetUID

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



Set은 "변경하다"라는 뜻을 가지고 있고


UID는 말 그대로 User ID의 약자이다.


따라서 "ID를 변경한다." 라고 해석이 될 수 있는데


일시적으로 자신의 ID를 변경하는 것을 말한다.











SetUID가 걸려있는지 아닌지를 알아보기 위해서

 

passwd 파일에 걸린 SetUID를 확인해 보기 위해 다음과 같은 명령어를 입력해 준다.




r-s를 보면 x가 있어야 할 자리에 s가 있음을 알 수 있다.


s가 SetUID인데 s는 x를 포함하고 있다.



/usr/bin/passwd파일은 root에게 읽기와 실행 (s가 x를 포함)


root라는 그룹에게는 실행 권한만


위를 제외한 사용자들에게도 실행 권한만 있음을 알 수 있다.



하지만 root에게 SetUID가 걸려있기 때문에


어느 사용자이던간에 저 파일을 실행할 때 root의 권한을 갖게 된다.





서버 전체에서 SetUID가 걸린 파일을 찾기 위해 다음과 같은 명령어를 사용한다.




이 명령어를 해석하자면


"/ 에서부터, 적어도 SetUID가 걸린 모든 파일을 찾아라" 이다.



4000 앞에 붙은 '-'가 "적어도"를 의미하며


-perm은 "권한을 찾겠다" 라는 옵션이다.


그 뒤의 '4'가 바로 SetUID를 의미하며


'000'은 rwx 모두를 의미한다.




find 명령에 대해 조금 더 배워보자면



다음과 같은 것들이 있다.


위의 옵션들을 서로 조합해 동시에 사용할 수도 있다.


예) find / -user root -perm -4000


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






해커스쿨 끝 !

'CHALLENGE > hackerschool' 카테고리의 다른 글

[FTZ] 해커스쿨 Level 5 풀이  (0) 2019.08.11
[FTZ] 해커스쿨 Level 4 풀이  (0) 2019.02.23
[FTZ] 해커스쿨 Level 3 풀이  (0) 2019.02.14
[FTZ] 해커스쿨 Level 2 풀이  (0) 2019.02.13
[FTZ] 해커스쿨 Level 1 풀이  (0) 2019.02.13