DevArea
문제: DevArea
난이도: Medium
OS: Linux
목차
- 01 — Reconnaissance
- 02 — FTP Anonymous Login & JAR Analysis
- 03 — XOP/MTOM SSRF via CVE-2022-46364
- 04 — Hoverfly Authentication
- 05 — Hoverfly Middleware RCE (CVE-2025-54123)
- 06 — User Flag
- 07 — Privilege Escalation Enumeration
- 08 — Bash Binary Swap to Root
01 — Reconnaissance
모든 포트에 대하여 스캔

서비스 버전 탐지

Recon 결과
- Port 21 — vsftpd 3.0.5 (anonymous login allowed, pub/ directory exposed)
- Port 22 — OpenSSH 9.6p1
- Port 80 — Apache 2.4.58 (redirects to devarea.htb)
- Port 8080 — Jetty 9.4.27 (likely Apache CXF)
- Port 8500 — Go HTTP proxy (“This is a proxy server”)
- Port 8888 — Hoverfly Dashboard
02 — FTP Anonymous Login & JAR Analysis
FTP 서버의 employee-service.jar 파일 다운로드


employee-service.jar 압축해제

.class -> .java 파일로 디컴파일을 위한 CFR 디컴파일러 설치

디컴파일

.java 파일 확인 (ServerStarter, EmployeeService, EmployeeServiceImpl, Report)




소스코드로 알 수 있는 것들
- 엔드포인트: http://0.0.0.0:8080/employeeservice
- 동작: submitReport(Report) 함수 호출
- 문제점: 서버 구현에서 report.getContent() 값을 그대로 응답에 다시 포함시킴
- Report 객체: content 필드를 가지고 있으며, 이 부분이 우리가 입력을 주입할 수 있는 지점 (injection point)
03 — XOP/MTOM SSRF via CVE-2022-46364
WSDL 요청이 동작하는지 확인

SOAP 요청/응답을 확인

SSRF 확인하여 etc/passwd 요청/응답을 확인

Content안에 base64로 인코딩된 스트링을 확인

base64 디코딩 이후 etc/passwd 평문 확인

SSRF로 Hoverfly systemd unit 가져와서 admin 계정과 비밀번호 확인


04 — Hoverfly Authentication
CLI로 json 요청을 위해 jq 다운로드

Hoverfly JWT 획득

획득한 토큰 권한 확인

획득한 JWT로 인가 요청 -> 응답에서 Hoverfly 버전 1.11.3을 확인
해당 버전은 Hoverfly Middleware RCE(CVE-2025-54123) 가 가능

05 — Hoverfly Middleware RCE (CVE-2025-54123)
리버스쉘을 위해 tun0를 확인

페이로드 제작 / 4444포트로 리버스쉘 attach

4444포트 listening

source 명령어로 페이로드 실행

06 — User Flag
리버스쉘 attach 및 사용자 플래그 획득

07 — Privilege Escalation Enumeration
루트 접근 권한 확인결과 현재 dev_ryan은 비밀번호 없이 /opt/syswatch/syswatch.sh을 root권한으로 실행가능
블랙리스트(금지조건)
- web-stop
- web-restart
그 외 인자들 전부 허용

쉘 실행파일 /bin/bash의 권한 확인 결과 777로 설정되어 있어 누구나 쉘 파일을 수정 가능

08 — Bash Binary Swap to Root
전략: sudo /opt/syswatch/syswatch.sh 명령을 실행하면 /opt/syswatch/syswatch.sh 스크립트가 내부적으로 bash를 root 권한으로 실행한다.
만약 우리가 /bin/bash를 “원래 bash의 SUID 복사본을 만드는 악성 코드(payload)”로 바꿔치기하면 sudo가 그걸 root 권한으로 실행해준다.
SUID = 실행 시 root 권한으로 실행되는 파일
정리
- /bin/bash가 world-writable
- 우리가 /bin/bash를 악성 코드로 변환
- sudo /opt/syswatch/syswatch.sh 실행
- 스크립트 내부에서 bash 실행됨
- 우리가 심어둔 코드가 root 권한으로 실행됨
- SUID bash 생성
- 이후 언제든 root 쉘 획득
기존 bash 백업

악의적인 bash 페이로드 생성

bash를 수정하기 위해 dash로 전환
$로 나온다면 dash 전환 성공

현재 bash에서 점유중인 프로세스 확인

이전 bash chain들은 프로세스 종료(kill)

다른 터미널, 5555포트로 리버스쉘 attach
5555쉘에서 dash로 전환 후 우리가 준비한 bash 악성 코드 변환 준비
16298은 이전 bash chain, 17201은 새로운 bash chain

남아 있는 bash chain 프로세스 종료 및 악성 페이로드로 덮어쓰기

위에서 nohup으로 실행한 악성 페이로드 부모 프로세스 종료 후 실행되어 66바이트 bash 프로세스가 루트 권한으로 실행되는 것을 확인

syswatch.sh를 루트 권한으로 실행

기존 4444쉘이 루트 권한으로 상승하여 root flag를 접근
