
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 권한 장악까지 이어지는 유기적인 침투 시나리오
- 익명 FTP에 접속해 이메일 파일을 다운로드
- christine / funnel1234! 자격 증명을 획득
- 타겟의 5432(PostgreSQL) 포트는 외부에 닫혀 있으므로
- SSH를 연결함과 동시에 로컬 포트 포워딩을 구성
- 공격자 PC에서 로컬로 매핑된 포트를 통해 타겟의 DB에 안전하게 원격 접속(psql)을 수행
- 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; # 플래그 탈취

Discussion 0