본문 바로가기
CTF/HTB

Funnel

 

1. Target Overview (머신 요약)

  • Target Name: Funnel
  • OS: Linux
  • Difficulty: Tier 1 (Starting Point)
  • Vulnerability: Anonymous FTP Access, Weak Default Credentials (기본 패스워드 방치)
  • Attack Vector: FTP 이메일 백업 탈취 ➔ SSH 접속 ➔ 로컬 포트 포워딩(SSH Tunneling) ➔ 로컬호스트(127.0.0.1) 전용 PostgreSQL DB 장악

2. 핵심 개념 총정리

① SSH 포트 포워딩 (Port Forwarding / Tunneling)

  • 방화벽이나 네트워크 정책으로 인해 직접 접근할 수 없는 내부 서비스(예: 타겟 서버의 127.0.0.1에서만 도는 DB)에 접속하기 위해, 암호화된 SSH 연결을 통로(Tunnel)로 삼아 트래픽을 전달하는 기법
  • 로컬 포트 포워딩 (Local Port Forwarding)
    • 공격자 PC의 특정 로컬 포트로 들어오는 트래픽을 타겟 서버를 거쳐 목적지 포트로 전달 (-L 옵션 사용)
  • 동적 터널링 (Dynamic Tunneling)
    • SOCKS 프록시 역할을 수행하여 다양한 포트와 목적지로 트래픽을 동적으로 라우팅할 때 사용(-D 옵션 사용)

 

② PostgreSQL 데이터베이스

  • 강력하고 안정적인 오픈소스 객체-관계형 데이터베이스 시스템(ORDBMS)
  • 기본적으로 5432/tcp 포트를 사용
  • 보안상 외부 노출을 막기 위해 타겟 머신에서는 localhost(127.0.0.1)에서만 수신 대기(Listen)하도록 설정됨.
    • 공격자는 외부에서 직접 포트 스캔이나 접속을 할 수 없음

[Task 1] How many TCP ports are open?

  • 정답: 2
  • 분석: Nmap 스캐닝(nmap -p- [Target IP]) 결과,
    • 외부에서 직접 접근 가능한 포트는 FTP(21/tcp)와 SSH(22/tcp) 단 두 개뿐임을 식별

[Task 2] What is the name of the directory that is available on the FTP server?

  • 정답: mail_backup
  • 분석
    • FTP 서버에 익명(anonymous)으로 접속
    • 디렉토리 목록(ls)을 열거
    • 사내 이메일 데이터가 백업되어 있는 민감한 폴더를 발견

[Task 3] What is the default account password that every new member on the "Funnel" team should change as soon as possible?

  • 정답: funnel1234!
  • 분석
    • FTP에서 다운로드한 이메일 백업 파일(텍스트 파일)들을 로컬에서 분석한 결과
    • 신규 입사자에게 부여되는 사내 시스템 기본(Default) 임시 패스워드가 평문으로 노출됨.

[Task 4] Which user has not changed their default password yet?

  • 정답: christine
  • 분석: 이메일 내용의 문맥을 분석하여, 패스워드 변경 정책을 아직 따르지 않아 기본 패스워드(funnel1234!)를 그대로 사용 중인 취약한 계정 소유자를 식별

[Task 5] Which service is running on TCP port 5432 and listens only on localhost?

  • 정답: PostgreSQL
  • 분석
    • christine 계정으로 SSH 접속 후 타겟 시스템 내부에서 로컬 네트워크 상태(ss -tulpn 또는 netstat)를 확인한 결과
    • 외부망에는 노출되지 않은 5432 포트(PostgreSQL 데몬)가 127.0.0.1에서 활성화되어 있음을 확인

[Task 6] Since you can't access the previously mentioned service from the local machine, you will have to create a tunnel and connect to it from your machine. What is the correct type of tunneling to use? remote port forwarding or local port forwarding?

  • 정답: local port forwarding
  • 분석: 공격자 PC의 로컬 포트(예: 1234)로 접근하면, 설정된 SSH 터널을 타고 타겟 머신의 로컬호스트 5432 포트로 트래픽이 '깔때기(Funnel)'처럼 흘러 들어가게 만드는 로컬 포트 포워딩 기법이 적합

[Task 7] What is the name of the database that holds the flag?

  • 정답: secrets
  • 분석
    • 포트 포워딩을 통해 DB에 접속
    • 논리적 데이터베이스 목록을 열거(\l 명령어)
    • 플래그가 저장된 타겟 데이터베이스 명칭을 식별

[Task 8] Could you use a dynamic tunnel instead of local port forwarding? Yes or No.

  • 정답: Yes
  • 분석
    • 프록시 체인(ProxyChains)과 함께 SSH 동적 터널링(-D 옵션)을 구성해도 내부 서비스(PostgreSQL)에 도달할 수 있음
    • 기술적으로 동적 터널링 역시 사용 가능

[Root Flag] 시스템 침투 및 플래그 추출

  • 분석
    • 정보 탈취부터 네트워크 터널링, 그리고 DB 권한 장악까지 이어지는 유기적인 침투 시나리오
  1. 익명 FTP에 접속해 이메일 파일을 다운로드
  2. christine / funnel1234! 자격 증명을 획득
  3. 타겟의 5432(PostgreSQL) 포트는 외부에 닫혀 있으므로
  4. SSH를 연결함과 동시에 로컬 포트 포워딩을 구성
  5. 공격자 PC에서 로컬로 매핑된 포트를 통해 타겟의 DB에 안전하게 원격 접속(psql)을 수행
  6. secrets 데이터베이스 내의 테이블을 조회하여 최종 플래그를 탈취
# 1. FTP 정보 탈취 (로컬 공격자 환경)
ftp [Target IP]
# Name: anonymous 접속 후 mail_backup 폴더 내 파일 다운로드(get)

# 2. 로컬 포트 포워딩을 동반한 SSH 접속
# (내 PC의 5432 포트를 타겟 서버의 localhost:5432로 연결)
ssh -L 5432:localhost:5432 christine@[Target IP]
# Password: funnel1234!

# 3. 새로운 터미널 창(공격자 PC)을 열고 로컬호스트로 PostgreSQL 접속
psql -U christine -h 127.0.0.1 -p 5432
# Password: funnel1234!

# 4. 데이터베이스 및 플래그 덤프 (psql 환경)
christine=> \l                  # DB 목록 확인
christine=> \c secrets           # secrets DB로 이동
secrets=> \dt                   # 테이블 목록 확인
secrets=> SELECT * FROM flag;   # 플래그 탈취
 

 

 

'CTF > HTB' 카테고리의 다른 글

Ignition  (0) 2026.04.07
Pennyworth  (0) 2026.04.06
Three  (0) 2026.04.06
Responder  (0) 2026.04.06
Crocodile  (0) 2026.04.06

Discussion 0