hacktricks/network-services-pentesting/27017-27018-mongodb.md

7.6 KiB

27017,27018 - Pentesting MongoDB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights
해킹의 스릴과 도전에 대해 깊이 있는 콘텐츠에 참여하세요.

Real-Time Hack News
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계의 최신 정보를 유지하세요.

Latest Announcements
새로운 버그 바운티와 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.

Join us on Discord and start collaborating with top hackers today!

Basic Information

MongoDB는 다양한 형태의 데이터를 처리하기 위해 문서 지향 데이터베이스 모델을 사용하는 오픈 소스 데이터베이스 관리 시스템입니다. 비정형 또는 반정형 데이터를 관리하기 위한 유연성과 확장성을 제공하며, 빅 데이터 분석 및 콘텐츠 관리와 같은 애플리케이션에서 사용됩니다. 기본 포트: 27017, 27018

PORT      STATE SERVICE VERSION
27017/tcp open  mongodb MongoDB 2.6.9 2.6.9

Enumeration

수동

from pymongo import MongoClient
client = MongoClient(host, port, username=username, password=password)
client.server_info() #Basic info
#If you have admin access you can obtain more info
admin = client.admin
admin_info = admin.command("serverStatus")
cursor = client.list_databases()
for db in cursor:
print(db)
print(client[db["name"]].list_collection_names())
#If admin access, you could dump the database also

일부 MongoDB 명령어:

show dbs
use <db>
show collections
db.<collection>.find()  #Dump the collection
db.<collection>.count() #Number of records of the collection
db.current.find({"username":"admin"})  #Find in current db the username admin

자동

nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used

Shodan

  • 모든 mongodb: "mongodb server information"
  • 전체 공개 mongodb 서버 검색: "mongodb server information" -"partially enabled"
  • 인증이 부분적으로만 활성화된 경우: "mongodb server information" "partially enabled"

로그인

기본적으로 mongo는 비밀번호를 요구하지 않습니다.
Admin은 일반적인 mongo 데이터베이스입니다.

mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'

The nmap script: _mongodb-brute_는 자격 증명이 필요한지 확인합니다.

nmap -n -sV --script mongodb-brute -p 27017 <ip>

Brute force

자격 증명이 필요한지 확인하려면 /opt/bitnami/mongodb/mongodb.conf 파일을 확인하세요:

grep "noauth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#" #Not needed
grep "auth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#\|noauth" #Not needed

Mongo Objectid Predict

Example from here.

Mongo Object IDs는 12바이트 16진수 문자열입니다:

http://techidiocy.com/_id-objectid-in-mongodb/

예를 들어, 애플리케이션에서 반환된 실제 Object ID를 분해해보면: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 (10진수) = 2020년 7월 31일 금요일 17:49:32
  2. 9fa6dc: 머신 식별자
  3. 2500: 프로세스 ID
  4. 314019: 증가하는 카운터

위 요소 중 머신 식별자는 데이터베이스가 동일한 물리적/가상 머신에서 실행되는 한 동일하게 유지됩니다. 프로세스 ID는 MongoDB 프로세스가 재시작될 때만 변경됩니다. 타임스탬프는 매초 업데이트됩니다. 카운터와 타임스탬프 값을 단순히 증가시켜 Object ID를 추측하는 데 유일한 도전 과제는 Mongo DB가 Object ID를 생성하고 시스템 수준에서 Object ID를 할당한다는 사실입니다.

도구 https://github.com/andresriancho/mongo-objectid-predict는 시작 Object ID를 주면 (계정을 생성하고 시작 ID를 얻을 수 있습니다), 다음 객체에 할당될 가능성이 있는 약 1000개의 Object ID를 반환하므로 이를 브루트포스하면 됩니다.

Post

루트 권한이 있는 경우 mongodb.conf 파일을 수정하여 자격 증명이 필요 없도록 할 수 있습니다 (noauth = true) 그리고 자격 증명 없이 로그인할 수 있습니다.


경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 HackenProof Discord 서버에 참여하세요!

Hacking Insights
해킹의 스릴과 도전에 대해 깊이 있는 콘텐츠에 참여하세요.

Real-Time Hack News
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계의 최신 정보를 유지하세요.

Latest Announcements
새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.

오늘 Discord에 참여하여 최고의 해커들과 협업을 시작하세요!

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}