10 KiB
27017,27018 - MongoDB Pentesting
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!
HackTricks를 지원하는 다른 방법:
-
회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
-
공식 PEASS & HackTricks 스웨그를 얻으세요.
-
The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
-
💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
-
Hacking Insights
해킹의 스릴과 도전을 다루는 콘텐츠와 상호 작용하세요. -
실시간 해킹 뉴스
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요. -
최신 공지사항
새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 받아보세요. -
Discord에 참여하여 최고의 해커들과 협업을 시작하세요!
경험있는 해커와 버그 바운티 헌터들과 소통하기 위해 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 <database>: 특정 데이터베이스 선택
- show collections: 선택한 데이터베이스의 컬렉션 목록 표시
- db.<collection>.find(): 선택한 컬렉션의 모든 문서 표시
- db.<collection>.findOne(): 선택한 컬렉션의 첫 번째 문서 표시
- db.<collection>.insertOne(<document>): 선택한 컬렉션에 문서 삽입
- db.<collection>.updateOne(<filter>, <update>): 선택한 컬렉션의 문서 업데이트
- db.<collection>.deleteOne(<filter>): 선택한 컬렉션의 문서 삭제
참고:
<database>
는 데이터베이스 이름으로 대체되어야 합니다.<collection>
은 컬렉션 이름으로 대체되어야 합니다.<document>
는 삽입할 문서로 대체되어야 합니다.<filter>
는 업데이트 또는 삭제할 문서를 선택하는 데 사용되는 조건으로 대체되어야 합니다.<update>
는 업데이트할 내용으로 대체되어야 합니다.
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
자동
MongoDB는 일반적으로 기본 포트 27017을 사용하여 실행됩니다. 그러나 일부 시스템은 추가 포트 27018을 사용할 수도 있습니다. 이러한 포트는 MongoDB 서비스에 대한 연결을 수락하는 데 사용됩니다.
자동화된 도구를 사용하여 MongoDB 서비스를 탐지하고 악용하는 것이 가능합니다. 이를 통해 데이터베이스에 대한 액세스 권한을 얻을 수 있습니다.
자동화된 도구를 사용하여 MongoDB 서비스를 탐지하려면 다음 단계를 따르세요:
- 포트 스캐닝 도구를 사용하여 대상 시스템에서 포트 27017 및 27018을 스캔합니다.
- 포트가 열려 있는 경우, MongoDB 서비스가 실행 중인 것으로 간주할 수 있습니다.
- MongoDB 서비스에 대한 액세스를 얻기 위해 인증되지 않은 연결을 시도합니다.
- 인증되지 않은 연결이 성공하면, 데이터베이스에 대한 액세스를 얻을 수 있습니다.
자동화된 도구를 사용하여 MongoDB 서비스를 악용하는 것은 데이터 유출 및 시스템 침입과 같은 심각한 보안 위협을 초래할 수 있습니다. 따라서 합법적인 목적으로만 사용해야 합니다.
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
Shodan
- 모든 mongodb:
"mongodb 서버 정보"
- 완전히 열린 mongodb 서버 검색:
"mongodb 서버 정보" -"부분적으로 활성화"
- 인증이 부분적으로만 활성화된 경우:
"mongodb 서버 정보" "부분적으로 활성화"
로그인
기본적으로 mongo는 비밀번호를 요구하지 않습니다.
Admin은 일반적인 mongo 데이터베이스입니다.
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>
무차별 대입 공격
인증 정보가 필요한지 확인하려면 /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 ID는 12바이트의 16진수 문자열입니다:
예를 들어, 애플리케이션에서 반환된 실제 Object ID를 분석하는 방법은 다음과 같습니다: 5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772를 10진수로 변환하면 2020년 7월 31일 금요일 17시 49분 32초입니다.
- 9fa6dc: 기계 식별자
- 2500: 프로세스 ID
- 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**에 참여하여 최고의 해커들과 협업을 시작하세요!
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
- HackTricks와 HackTricks Cloud github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.