Pentesting CTF/tryhackme GROOT

그루트 시큐리티 - CatchMeIfYouCan

Roronoa 2023. 4. 16. 19:42
반응형

[그림 1] Target ip

Target ip는 10.10.31.242이다.

 

[그림 2] Nmap port scanning

Port scanning 결과 21, 22, 80 port 가 열려져 있다.

 

[그림 3] ftp 접근

ftp에 anonymous아이디로 접근을 하였더니 접속이 되었다.

ftp id : anonymous

pw : anonymous

그 후 ls -a 옵션으로 list를 확인해보았다.

.ssh_creds.docx, hiya, temporary_pw.txt 파일을 확인 하였다.

 

[그림 4] get 명령어로 kali linux에 파일 다운

get 명령어로 3개의 파일을 다운 받았다.

 

[그림 5] temporary_pw.txt 파일 확인

cat 명령어로 temporary_pw.txt파일을 읽었다.

파일의 내용은 docx 파일을 찾아서 읽으라고 한다.

docx 파일은 아까 다운받은 .ssh_creds.docx 파일을 읽으면 될 것이다.

 

[그림 6] libreoffice 사용

먼저 libreoffice를 다운 받는다.

libreoffice 다운 명령어 : apt-get install libreoffice

libreoffice --cat [읽을 docx파일] 명령어를 이용하여 해당 docx 파일을 읽을 수 있다.

 

.ssh_creds.docx 파일 내용

Hey, I created this document for you so you know my name right? That’s my ssh id.
Encoded password just in case  Y2F0Y2htZSFAIw==

해석

안녕 나는 너를 위해 이 문서를 만들었어 그래서 너는 내 이름 알지? 내 이름은 나의 ssh 아이디야!!

혹시몰라서 패스워드 인코딩 해놨음 "Y2F0Y2htZSFAIw=="

 

[그림 7] exiftool 사용

exiftool을 이용하여 해당 파일의 메타데이터를 확인하였다.

마지막에 Creator가 harry라고 되어있다.

문서 만든 사람 이름이 harry라고 추측이 가능하다.

id : harry

 

[그림 8] base64 디코딩

base64로 디코딩을 하니 catchme!@#라는 문자열이 나왔다.

pw가 catchme!@#라고 알 수 있다.

pw : catchme!@#

 

[그림 9] ssh 접속

22번 포트가 열려있으므로 ssh로 harry 계정에 접속을 하였다.

 

[그림 10] find user.txt

find 명령어를 이용하여 / 경로부터 이름이 user.txt인 파일을 찾았는데 user.txt파일이 많았다.

grep 명령어를 이용하여 -r(하위디렉토리까지) GROOT{ 로 시작하는 파일을 찾았다.

GROOT{ 는 flag format이다.

user.txt : GROOT{C4TCHME_S3CRETS}

 

[그림 11] sudo -l

flag.txt는 find명령어로 안나온다. 권한이 높아서 못 읽는것 같다.

sudo -l 옵션을 이용하여 sudo 설정을 확인하였다.

harry는 find명령어를 패스워드 없이 root 권한으로 사용할 수 있도록 설정 되어있다.

sudo find 를 이용하여 flag.txt 파일의 위치를 알아냈다.

 

flag.txt location : /root/flag.txt

 

[그림 12] find 명령어 setuid 적용된 파일 찾기

find / -type f -perm -4000 -exec ls -h {} \; 2>/dev/null

위 명령어를 이용하여 setuid가 걸린 파일을 찾을 수 있다.

 

[그림 13] base64

base64가 setuid가 걸려있다.

이를 이용하여 flag.txt파일을 base64로 변환하여 출력한 후 그것을 base64로 디코딩하여 읽을 수 있을것이다.

 

[그림 14] base64 사용

base64를 이용하여 flag.txt를 base64로 인코딩하였다.

이를 디코딩 하였지만 base64형태로 나왔다.

애초에 flag.txt가 base64로 인코딩되어 있었던 것이다.

이를 또 base64로 디코딩하니 flag가 나왔다.

 

result of decoding flag.txt : GROOT{C4tCl+lME!fy0Uc4N}

[그림 15] 권한 상승

sudo find . -exec /bin/bash \; -quit

위 명령어를 이용하여 root 권한으로 권한 상승이 가능하다.

아까 find가 sudo가 nopassword로 걸려 있었기 때문에 권한 상승이 가능하다.

-exec /bin/bash \; 는 bash쉘 열으라는 뜻인데 sudo명령어로 인해 root권한의 bash 쉘을 연다.

 

find는 sudo나 setuid가 설정되어있으면 취약하다.

반응형