모의 해킹/Linux

[모의 해킹] HackTheBox - Underpass Part 1

solo-infosec 2025. 4. 6. 07:03

Underpass

OS: Linux

취약점: SNMP 기본 커뮤니티 스트링과 daloradius 기본 계정 정보

 
SNMP 프로토콜을 통해 웹서버에 대한 정보를 수집할 수 있다. 수집한 정보를 사용해 Daloradius 웹 매니지먼트 어플리케이션을 발견하고 Daloradius 기본 계정 비밀번호를 사용해 관리자 계정으로 로그인 할 수 있다. 관리자 계정에 접속해 Daloradius 회원 정보를 수집할 수 있고 해당 정보를 사용해 SSH로 타겟 머신에 접속할 수 있다.
 

포트 스캐닝

nmap -Pn -sS -p- -oN ./SYN_SCAN 10.129.231.213
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
nmap -Pn -sU -p- -oN ./UDP_SCAN 10.129.231.213
PORT    STATE SERVICE
161/udp open  snmp
nmap -Pn -sC -sV -p 22,80 -oN SERVICE_SCAN 10.129.231.213
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 48:b0:d2:c7:29:26:ae:3d:fb:b7:6b:0f:f5:4d:2a:ea (ECDSA)
|_  256 cb:61:64:b8:1b:1b:b5:ba:b8:45:86:c5:16:bb:e2:a2 (ED25519)
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

 
HTTP, SSH, 그리고 SNMP 포트가 열려 있다. SNMP는 네트워크 관리에 사용되는 UDP 기반 프로토콜이다. SNMP를 사용하면 네트워크에 존재하는 디바이스나 호스트에 대한 정보를 관리하거나 제어할 수 있다. 사실상 네트워크 관리 분야의 표준적인 프로토콜이라고 봐도 무방하다.
 

HTTP

http://10.129.231.213

Apache2 기본 페이지를 반환한다. 웹 컨텐츠 탐색을 진행해 추가적인 정보를 탐색해 보자.
 

┌─[solo@parrot]─[~/Desktop/hack/web]
└──╼ $gobuster dir -u http://10.129.231.213 -w raft-large-directories.txt -o 80_dir_scan

wordlist의 10% 가량의 디렉토리를 탐색했지만 의미있는 정보는 반환되지 않았다. 이런 경우, 추가적인 디렉토리는 찾지 못할 가능성이 매우 높다.
 

SNMP

UDP 포트스캐닝을 통해 SNMP가 활성화 되있다는 점을 까먹지 말자. 은근히 UDP 포트가 활성화 되있다는 것을 까먹어 놓치는 경우가 매우 많다 nmap을 사용해서 SNMP 포트에 대한 추가적인 정보를 수집하자. nmap은 다양한 스크립트를 지원하고 이런 스크립트를 사용하면 패스워드 bruteforce 공격, 서비스/프로토콜에 대한 추가적인 정보 수집 등 포트 스캐닝 뿐만이 아닌 다양한 기능을 활용할 수 있다.
 

┌─[solo@parrot]─[~/Desktop/hack/snmp]
└──╼ $sudo nmap -sU --script "snmp* and not snmp-brute" -p 161 10.129.231.213
PORT    STATE SERVICE
161/udp open  snmp
| snmp-sysdescr: Linux underpass 5.15.0-126-generic #136-Ubuntu SMP Wed Nov 6 10:38:22 UTC 2024 x86_64
|_  System uptime: 9m15.49s (55549 timeticks)
| snmp-info: 
|   enterprise: net-snmp
|   engineIDFormat: unknown
|   engineIDData: c7ad5c4856d1cf6600000000
|   snmpEngineBoots: 32
|_  snmpEngineTime: 9m15s

커뮤니티 스트링 bruteforce 스크립을 제외한 모든 snmp 스크립트를 사용해 타겟 머신의 SNMP 포트를 조사했다. 타겟 머신의 운영체제가 Ubuntu라는 것과 리눅스 커널 버전이 5.15.0-126-generic인 것을 확인할 수 있다.
 
snmpwalk는 SNMP의 MIB를 탐색해서 네트워크 장치에 대한 정보를 수집하는 툴이다. 하지만 MIB에 접근하기 위해선 읽기 권한을 가진 커뮤니티 스트링이 필요하다. (커뮤니티 스트링은 간단하게 SNMP용 비밀번호라고 생각하면 된다) SNMP 버전 1과 버전 2는 기본 커뮤니티 스트링을 가지고 있다. public은 읽기 권한, private는 읽기/쓰기 권한을 가진 커뮤니티 스트링이다. (버전 3부터는 커뮤니티 스트링이 아니라 사용자 정보를 사용해 인증한다)
 

┌─[✗]─[solo@parrot]─[~/Desktop/hack/snmp]
└──╼ $snmpwalk -v1 -c public 10.129.231.213

public 커뮤니티 스트링을 사용해 MIB에 접근할 수 있었다. 도메인 정보가 underpass.htb라는 것과 steve라는 계정이 해당 도메인에 존재한다는 것을 확인할 수 있다. 조금 더 자세히 살펴보면 underpass.htb가 daloradius 서버라는 정보도 제공한다. daloradius가 어디에 써먹는 건지 모르는 것이 당연하다. 하지만 겁먹지 말자. google은 언제나 답을 알고 있다.
 
daloradius에 대한 조사를 시작하기 전, 커뮤니티 스트링 bruteforce 공격을 해보자. 운이 좋으면 쓰기 권한을 가진 커뮤니티 스트링을 발견할 수도 있고 특정한 조건 하에선 쓰기 권한을 가진 커뮤니티 스트링을 사용해 네트워크 디바이스의 정보를 조작해 Remote Code Execution 같은 공격을 할 수도 있다. 
 

nmap -sU --script snmp-brute --script-args snmp-brute.communitiesdb=snmp_community_v1.txt -oN SNMP_BRUTE -T5 10.129.231.213
PORT    STATE SERVICE
161/udp open  snmp
| snmp-brute: 
|_  public - Valid credentials

nmap의 snmp-brute를 사용해 snmp 커뮤니티 스트링 bruteforce 공격을 수행할 수 있다. 하지만 public 말고는 다른 커뮤니티 스트링은 발견할 수 없었다.
 

daloradius

https://github.com/lirantal/daloradius

GitHub - lirantal/daloradius: daloRADIUS is an advanced RADIUS web management application for managing hotspots and general-purp

daloRADIUS is an advanced RADIUS web management application for managing hotspots and general-purpose ISP deployments. It features user management, graphical reporting, accounting, a billing engine...

github.com

daloradius를 구글링 하면 해당 깃허브 repository를 쉽게 찾을 수 있다. 설명을 보면 daloradius는 Radius 프로토콜을 제어하는 웹 인터페이스 서버다.

 

http://underpass.htb/daloradius/

daloradius 디렉토리를 요청하면 HTTP 403 접근 제한을 반환한다. 웹서버의 응답을 통해 daloradius 디렉토리가 존재한다는 것을 확인할 수 있다. 
 

daloradius의 깃허브 repository에서 쓸만한 정보가 있는지 확인해 보자. 웹 어플리케이션 서버가 오픈소스라면 깃허브 repository를 조사하거나 해당 웹 어플리케이션을 직접 설치해 디렉토리와 파일 구성을 확인하는 방식으로 쓸만한 정보를 수집할 수 있다. 정확한 버전까지 지 알고 있다면 사실상 소스코드에 접근하는 것과 별반 다르지 않다.
 

http://underpass.htb/daloradius/LICENSE

LICENSE 파일에 접근할 수 있다. 이를 통해 daloradius의 깃허브 repository 파일/디렉토리 구조와 유사한 구조를 가지고 있다는 것을 확인할 수 있다. 

 

http://underpass.htb/daloradius/ChangeLog

changelog 파일을 통해 daloraidus 버전이 1.1-3이라는 것을 확인할 수 있다. 이런 정보가 나중에 쓸모 있을 수도 있기 때문에 까먹지 말고 기록하자.

 

http://underpass.htb/daloradius/docker-compose.yml 

docker-compose.yml은 간단하게 도커 설정 파일이라고 생각하면 편하다. docker-compose.yml은 도커 컨테이너에 대한 정보를 포함하고 있는데 해당 파일에 접근할 수 있다면 실행중인 어플리케이션 정보를 수집할 수 있다. 가끔식 이렇게 실행중인 어플리케이션 인증 정보 역시 포함되있는 경우도 있다. 타겟 머신의 docker-compose.yml 파일을 확인해 보면 DBMS인 MYSQL, radius 데이터베이스에 접근할 수 있는 사용자정보 radius:radiusdbpw/radiusrootdbpw를 수집할 수 있다.

 

http://underpass.htb/daloradius/app/users/login.php

깃허브 repository를 조사해 /app/users/login.php를 통해 사용자 로그인 페이지에 접근할 수 있다는 것을 확인했다. 이전에 수집한 계정 정보를 사용해서 로그인에 시도해 봤지만 성공하지 못했다. 구글링은 통해 daloradius의 기본 계정인 administrator:radius를 사용해 봤지만 로그인에 실패했다. 마지막 방법으로 사전 공격 툴인 Hydra를 사용했지만 당연히 실패했다. 깃허브 repository를 더욱 자세하게 조사해 보자.
 

http://underpass.htb/daloradius/app/operators/login.php

깃허브 repository를 조사하다보면 /app/operators/login.php를 찾을 수 있다. /app/users/login.php와 유사하지만 추가적으로 daloradius 버전을 제공한다. changelog에서 수집한 버전 정보는 의미가 없게 됐다 /app/users/login.php에서 수행한 작업을 동일하게 수행해 보자. 운이 좋게도 기본 계정 정보인 administrator:radius를 사용해 로그인에 성공했다.

 

http://underpass.htb/daloradius/app/operators/home-main.php

관리자 페이지에 성공적으로 접근할 수 있으면 선택의 수가 기하급수적으로 늘어난다. 당장 Radius Log, System Log 같은 로그 파일이나 Server Status, Services Status 같은 서버/서비스 정보를 수집할 수 있는 선택지가 보인다. 운이 좋으면 Arbitrary File Upload나 Remote Code Execution 같은 공격 루트를 찾을 가능성도 있다. 무엇보다 보고만 있어도 너무 흥분된다...;;;; 
 

http://underpass.htb/daloradius/app/operators/mng-list-all.php

Users 탭은 클릭하면 사용자 정보가 포함된 페이지로 갈 수 있다. 이 페이지에서 svcMosh라는 계정명과 해당 계정의 패스워드 해시를 발견할 수 있다. 패스워드 해시를 크랙할 수 있는 방식은 다양하다. 무슨 해시 알고리즘을 사용했는지 알 수 있으면 johntheripper나 hashcat 같은 패스워드 크래킹 툴을 사용해 오프라인에서 크랙할 수 있다. 하지만 이렇게 해시 알고리즘에 대한 정보가 없다면 레인보우 테이블을 사용해 크랙할 수 있다.
 
https://crackstation.net/

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

crackstation.net

crackstation.net은 레인보우 테이블을 제공하는 웹사이트다. 만약 패스워드 해시를 가지고 있지만 무슨 알고리즘으로 해시화 됐는지 모른다면 레인보우 테이블을 사용해 보는 것도 한가지 방법이다. 하지만 개인이 레인보우 테이블을 생성하는건 매우 비효율적이다. 그렇기 때문에 이미 만들어진 레인보우 테이블을 사용하던가 이렇게 레인보우 테이블을 제공하는 웹사이트를 이용해 보는 것도 나쁘지 않다.
 

svcMosh 계정의 패스워드 해시를 성공적으로 크랙했다. 패스워드가 underwaterfriends라는 것을 확인했다. 이 계정 정보를 사용해서 SSH로 로그인 해보자
 

SSH

(venv) ┌─[solo@parrot]─[~/Desktop/hack/web]
└──╼ $ssh svcMosh@10.129.231.213

 

결론

SNMP가 무엇인지 모른다면 공격 루트를 파악조차 할 수 없는 머신이다. SNMP는 사실상 네트워크 관리에 사용되는 프로토콜의 전세계적인 표준이라고 생각해도 무방하다. 그만큼 많이 사용되고 중요한 UDP 프로토콜이기 때문에 네트워크나 해킹에 관심이 있다면 무조건 알아야 되는 프로토콜이다. 또한, 공격하려는 어플리케이션이 오픈소스 어플리케이션이라면 깃허브 repository를 조사하거나 직접 어플리케이션은 다운로드하고 설치해 보는 방식으로 정말 많은 정보를 수집할 수 있다. 사실상 소스코드에 접근하는 것과 다름이 없기 때문에 이런 조사 방식에 익숙해지도록 하자.
 

다음편 바로가기

https://solo-infosec.tistory.com/17

[모의 해킹] HackTheBox - Underpass Part 2

UnderpassOS: Linux취약점: 취약한 Sudo 설정과 Mosh 서버 Mosh는 SSH 같이 원격 접속 기능을 제공하는 서버다. Sudo 권한으로 Mosh 서버를 실행하고 Sudo 권한을 가진 Mosh 서버에 접속해 루트쉘을 획득할 수

solo-infosec.tistory.com