개요

일단 따라하는 모의해킹 세번째 시간!  이미 두번이나 해킹 당한 HoneyVoice 일당은 보안을 강화하는데... 과연 이번에도 HoneyVoice 서버를 해킹 할 수 있을까?

모의해킹을 진행하며 FTP exploit, privilege escalation, misconfiguration, SUID, GTFOBins를 이용해 Permission의 중요성에 대해서 배웁니다.

 

문제

1.박스의 어떤 포트들이 열려있나요?
2.FTP Service는 몇번 포트를 사용하고 있나요?
3.FTP Server에 있는 DOCX파일의 이름은 무엇일까요?
4.DOCX파일을 현 호스트 머신에 다운로드 받고 싶습니다. 파일을 가져오는 FTP의 명령어는 무엇일까요?
5.DOCX 파일의 저자(Creator)의 이름은 무엇일까요?
6.첫번째 플래그 user.txt를 찾은 디렉토리는 어디일까요?
7.첫번째 플래그 user.txt는 무엇일까?
8.두번째 플래그 flag.txt를 찾고 싶습니다. flag.txt가 저장된 Full Directory는 어디일까요?
9.두번째 flag.txt는 무엇일까요?
10.두번째 플래그를 읽기 위해서 SUID권한을 이용해야 합니다. 어떤 Binary/Command를 통해 두번째 플래그르 읽을 수 있을까요?
(보너스!!) 두번째 플래그를 읽기 위해 gtfobins을 이용해 루트 쉘을 얻어 봅시다. 어떤 Binary/command를 통해 루트쉘을 얻을수 있을까요?

 

실습

1.박스의 어떤 포트들이 열려있나요?

21, 22, 80

2.FTP Service는 몇번 포트를 사용하고 있나요?

21

파일의 이름을 알기 위해서 먼저 FTP에 접속해본다. 

FTP에서는 익명 FTP(Anonymous FTP)가 존재한는데, 로그인시 PW없이 로그인할 수 있게 하는 기능이다.

이는 주요정보통신기반시설 가이드에 언급되는 사항이니 확인해 볼 수 있도록 한다.

FTP에 Anonymous로 로그인하게 되면 temporary_pw.txt라는 파일을 발견할 수 있었고, 아래와 같이 get 명령어를 통해 local로 복사한다.

4.DOCX파일을 현 호스트 머신에 다운로드 받고 싶습니다. 파일을 가져오는 FTP의 명령어는 무엇일까요?

get

 

가져온 txt 파일을 읽어보니, "docx 파일이 보이는지 여부와, docx파일을 읽어 보라"는 내용이 작성되어 있다.

 

FTP에 접속했을때, docx 파일이 안보였으니, ls -al을 통한 숨긴파일을 확인해주고, get 명령어를 통해 local로 해당 docx 파일을 가져온다.

가져온 후 일반적으로 linux에서 docx파일을 읽을 수 없기 때문에 아래와 같은 명령어(libreoffice)로 파일을 읽어준다.

파일안에는 "너를 위해 내가 이 파일을 만들었다. 내 이름을 알고있을것이며, 그것은 내 SSH ID이다. password는 인코딩(catchme!@#) 되어 있다"

3.FTP Server에 있는 DOCX파일의 이름은 무엇일까요?

.ssh_creds.docx

 

exiftool을 활용하여 docx파일의 정보에 대해 출력한 결과 만든이는 harry임을 알 수 있다.

 

5.DOCX 파일의 저자(Creator)의 이름은 무엇일까요?

harry

 

 

그럼 SSH ID(harry), PW(catchme!@#)를 알았으니 접속해보자.

 

접속 후 아래와 같이 여러 디렉토리가 있는 것을 확인 할 수 있었다.

 

하나씩 다들어가 보기에는 너무 많은 시간이 소요되니 find 명령어와 grep을 조합해서 플래그를 찾아보자.

플래그의 경우 GROOT가 들어간다는 것을 사전에 알 수 있었기에 사용했다.

6.첫번째 플래그 user.txt를 찾은 디렉토리는 어디일까요?

/home/harry/backup/user7

7.첫번째 플래그 user.txt는 무엇일까?

GROOT{C4TCHME_S3CRETS}

 

이후 다음 문제를 풀기 위해 flag.txt를 찾지만, 권한이 없어 못 읽어오는 것 같았다.

sudo -l 명령어를 통해 권한을 확인하니 find의 명령의 경우 패스워드 사용없이 root의 권한으로 사용할 수 있어보인다.

sudo를 삽입 후 명령어를 치니 아래와 같이 경로를 찾을 수 있었다.

8.두번째 플래그 flag.txt를 찾고 싶습니다. flag.txt가 저장된 Full Directory는 어디일까요?

/root/flag.txt

 

그럼 flag.txt를 읽어봐야하는데, 권한이 없어 읽을 수 없었다.

여기서 사용된 방법은 SUID가 설정된 파일을 통해 root 권한을 대행하는 방법을 사용한다.

4000(SUID) 가 설정된 파일을 찾아보는데, 위에 패스워드가 base64로 인코딩되어 있던것을 보아 base64가 의심스럽다.

base64를 통해 flag.txt 내용을 인코딩하고, 다시 디코딩하면 아래와 같이 플래그 값을 확인할 수 있다.

 

9.두번째 flag.txt는 무엇일까요?

GROOT{C4tCl+lME!fy0Uc4N}
10.두번째 플래그를 읽기 위해서 SUID권한을 이용해야 합니다. 어떤 Binary/Command를 통해 두번째 플래그르 읽을 수 있을까요?

base64

 

(보너스!!) 두번째 플래그를 읽기 위해 gtfobins을 이용해 루트 쉘을 얻어 봅시다. 어떤 Binary/command를 통해 루트쉘을 얻을수 있을까요?

find

gtfobins 웹사이트를 통해 확인 결과 아래와 같은 명령어를 통해 루트쉘을 얻을 수 있었다.

아래와 같은 명령어로 루트 쉘을 확인해 볼 수 있었던것은 find의 명령의 경우 패스워드 사용없이 root의 권한으로 사용할 수 있었기 때문이다.(사진은 캡처못했다..)


https://www.youtube.com/watch?v=zt54kZqAzeo 

https://security.grootboan.com/

 

그루트 시큐리티 소개 - 그루트 시큐리티

그루트 시큐리티는 사이버 보안 커뮤니티로서 여러가지 사이버보안 해킹 기술강의 뿐만 아니라 여러 재밌는 사이버 보안 주제/팁/노하우등을 같이 공유하고 더 나아가서 사이버보안에 관심이

security.grootboan.com

 

복사했습니다!