Hack the box의 Starting Point 중 Included 문제를 해결하는 과정을 기록
이번 문제도 동일하게 포트 스캔부터 시작했다.
80/TCP : HTTP(Apache httpd 2.4.29(ububtu)
69/udp : tftp
웹서비스 접근 시 "/?file=home.php"에 접근된다. (LFI!🔥)
유심히 봐야할 계정으로는 mike, tftp 계정이다.
tftp는 일반적으로 인증이 필요없는 ftp로 아무 인증 과정없이 접근할 수 있는것을 확인할 수 있다.
"/etc/passwd" 파일에서 본것처럼 tftp 계정의 홈디렉터리는 /var/lib/tftpboot
이다. tftp에 접근하여 reverse_shell.php를 업로드한다.
nc를 열고 12321포트를 리스닝하면서 LFI 취약점을 이용해 reverse_shell.php에 접근한다.
/?file=/var/lib/tftpboot/reverse_shell.php
웹루트 디렉터리의 '.htpasswd'에서 mike 계정의 패스워드를 획득😎
id명령어를 통해 mike 계정의 정보를 파악 중 lxd 그룹에 속해있는 것을 확인할 수 있다.
LXD는 리눅스 시스템에서 LXC 컨테이너를 처리하기위한 관리API이며, 로컬 lxd 그룹의 모든 멤버에 대해 작업을 수행할 수 있다. 또 로컬 lxd 그룹의 구성원은 sudo 권한이 부여됐는지 여부를 신경쓰지않고 패스워드 입력 없이도 root로 권한 상승할 수 있는 취약점이있다.
이 취약점은 busybox기반의 경량 리눅스 배포판인 Alpine 이미지를 사용하여 작동하며 빌드 후 HTTP 서버를 사용하여 원격 시스템에 업로드한다. 이후 이미지를 LXD로 가져와 root 권한의 호스트 파일 시스템을 마운트한다.
취약점 exploit을 위해 먼저 golang과 기타 패키지를 설치한다.
apt install -y golang-go debootstrap rsync gpg squashfs-tools
LXC Distrubution Builder를 다운로드하고 make한다.
git clone https://github.com/lxc/distrobuilder
cd distrobuilder
make
빌드가 완료되면 Alpine YAML 파일을 다운로드하고 빌드한다.
mkdir -p $HOME/ContainerImages/alpine/
cd $HOME/ContainerImages/alpine/
wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yaml
sudo $HOME/go/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.8
위 파일들을 python http 서버를 통해 공격대상 시스템으로 전송하기위해 python3 -m http.server
를 실행하고 다시 Reverse shell로 돌아가 Kali에서 구동한 웹 서버에서 파일을 다운받는다.
lxc cli 도구를 이용해 Kali에서 다운받은 이미지를 가져오고 이미지가 성공적으로 가져와졌는지 확인한다.
이제 security.privileged 플래그를 true로 설정하여 컨테이너가 루트 파일 시스템이 가지는 모든 권한을 갖도록하며, 루트 파일 시스템도 /mnt 디렉터리에 있는 컨테이너에 마운트한다.
이후 마지막으로 컨테이너를 시작하고 그 안의 root shell을 시작할 수 있다. (처음 접하는 부분이라 이해가 잘 안됐다😶)
실제로 /mnt 디렉터리에 루트 파일 시스템을 마운트했기 때문에 /root 디렉터리는 /mnt/root이다.