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

6.7 KiB

27017,27018 - MongoDB 침투 테스트

htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 히어로까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

경험 많은 해커 및 버그 바운티 헌터들과 소통하려면 HackenProof Discord 서버에 가입하세요!

해킹 통찰력
해킹의 스릴과 도전에 대해 탐구하는 콘텐츠와 상호 작용하세요

실시간 해킹 뉴스
빠르게 변화하는 해킹 세계의 최신 뉴스와 통찰력을 유지하세요

최신 공지
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 정보를 얻으세요

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

기본 정보

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

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

열거

수동

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"

로그인

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

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

nmap 스크립트인 _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 예측

예시 여기에서 확인.

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를 반환하여 브루트포스만으로 추측할 수 있습니다.

게시물

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


HackenProof Discord 서버에 가입하여 경험 많은 해커 및 버그 바운티 헌터들과 소통하세요!

해킹 통찰
해킹의 즐거움과 도전에 대해 탐구하는 콘텐츠와 상호 작용하세요

실시간 해킹 뉴스
실시간 뉴스와 통찰을 통해 빠른 속도의 해킹 세계를 따라가세요

최신 공지
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아두세요

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