10 KiB
27017,27018 - Pentestiranje MongoDB
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju oglašenu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Pridružite se HackenProof Discord serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Hakerski uvidi
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
Hakerske vesti u realnom vremenu
Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu
Najnovije objave
Budite informisani o najnovijim pokretanjima nagrada za pronalaženje bagova i važnim ažuriranjima platforme
Pridružite nam se na Discord-u i počnite da sarađujete sa vrhunskim hakerima danas!
Osnovne informacije
MongoDB je open source sistem za upravljanje bazama podataka koji koristi model baze podataka orijentisanog na dokumente za obradu različitih oblika podataka. Nudi fleksibilnost i skalabilnost za upravljanje nestrukturiranim ili polu-strukturiranim podacima u aplikacijama poput analitike velikih podataka i upravljanja sadržajem. Podrazumevani port: 27017, 27018
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
Enumeracija
Ručna
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
Neki MongoDB komandi:
# Show all databases
show dbs
# Switch to a specific database
use <database_name>
# Show all collections in the current database
show collections
# Insert a document into a collection
db.<collection_name>.insertOne({<document>})
# Find documents in a collection
db.<collection_name>.find({<query>})
# Update documents in a collection
db.<collection_name>.updateOne({<query>}, {<update>})
# Delete documents from a collection
db.<collection_name>.deleteOne({<query>})
Napomena: Zamijenite <database_name>
sa imenom odgovarajuće baze podataka, <collection_name>
sa imenom odgovarajuće kolekcije, <document>
sa dokumentom koji želite umetnuti, <query>
sa upitom koji koristite za pretragu dokumenata i <update>
sa ažuriranjem koje želite primijeniti.
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
Automatsko
MongoDB
MongoDB - 27017/27018
MongoDB je popularna baza podataka koja koristi JSON-sličan format za čuvanje podataka. MongoDB koristi TCP portove 27017 i 27018 za komunikaciju.
Identifikacija
Da biste identifikovali MongoDB server, možete koristiti naredbu nmap
:
nmap -p 27017,27018 <cilj>
Napadi
Nepotpuna autentifikacija
MongoDB može biti konfigurisan sa slabom autentifikacijom ili čak bez autentifikacije. To omogućava napadačima da pristupe bazi podataka bez pružanja pravih legitimacija.
Injekcija komandi
MongoDB podržava JavaScript izvršavanje na serveru. To može dovesti do mogućnosti injekcije komandi, gde napadač može izvršiti proizvoljni kod na serveru.
DDoS napadi
Napadači mogu izvršiti DDoS napade na MongoDB servere slanjem velikog broja zahteva zahtevajući resurse i dovodeći do preopterećenja servera.
Brute force napadi
Napadači mogu pokušati da izvrše brute force napade na MongoDB servere pokušavajući različite kombinacije korisničkih imena i lozinki kako bi pristupili bazi podataka.
Prevencija
Da biste sprečili napade na MongoDB servere, preporučuje se sledeće:
- Konfigurišite snažnu autentifikaciju za MongoDB servere.
- Redovno ažurirajte MongoDB servere sa najnovijim sigurnosnim zakrpama.
- Koristite firewall za ograničavanje pristupa MongoDB serverima samo na određene IP adrese.
- Pratite logove MongoDB servera kako biste otkrili sumnjive aktivnosti.
Zaključak
MongoDB serveri mogu biti meta različitih napada, uključujući nepotpunu autentifikaciju, injekciju komandi, DDoS napade i brute force napade. Implementacija snažne autentifikacije i redovno ažuriranje servera su ključni koraci za sprečavanje ovih napada.
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
Shodan
- Svi mongodb:
"informacije o mongodb serveru"
- Pretraga potpuno otvorenih mongodb servera:
"informacije o mongodb serveru" -"delimično omogućeno"
- Samo delimično omogućena autentifikacija:
"informacije o mongodb serveru" "delimično omogućeno"
Prijava
Po defaultu, mongo ne zahteva lozinku.
Admin je uobičajena mongo baza podataka.
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
Nmap skripta: mongodb-brute će proveriti da li su potrebni pristupni podaci.
nmap -n -sV --script mongodb-brute -p 27017 <ip>
Brute force
Pogledajte unutar /opt/bitnami/mongodb/mongodb.conf da biste saznali da li su potrebni pristupni podaci:
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
Predviđanje Mongo Objectid-a
Primer odavde.
Mongo Object ID-ovi su 12-bajtni heksadecimalni nizovi:
Na primer, evo kako možemo razložiti stvarni Object ID koji je vraćen od strane aplikacije: 5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772 u decimalnom formatu = petak, 31. jul 2020. 17:49:32
- 9fa6dc: Identifikator mašine
- 2500: ID procesa
- 314019: Inkrementalni brojač
Od gore navedenih elemenata, identifikator mašine će ostati isti sve dok se baza podataka izvršava na istoj fizičkoj/virtualnoj mašini. ID procesa će se promeniti samo ako se proces MongoDB ponovo pokrene. Vremenska oznaka će se ažurirati svake sekunde. Jedini izazov u pogađanju Object ID-ova je jednostavno uvećavanje brojača i vrednosti vremenske oznake, jer Mongo DB generiše Object ID-ove i dodeljuje ih na sistemskom nivou.
Alat https://github.com/andresriancho/mongo-objectid-predict, na osnovu početnog Object ID-a (možete kreirati nalog i dobiti početni ID), vraća oko 1000 verovatnih Object ID-ova koji bi mogli biti dodeljeni sledećim objektima, tako da ih samo treba isprobati metodom iscrpljivanja.
Post
Ako ste root, možete izmeniti fajl mongodb.conf tako da ne budu potrebne akreditacije (noauth = true) i prijaviti se bez akreditacija.
Pridružite se HackenProof Discord serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Hacking Insights
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
Real-Time Hack News
Budite u toku sa brzim svetom hakovanja putem vesti i saznanja u realnom vremenu
Latest Announcements
Budite informisani o najnovijim pokretanjima nagrada za pronalaženje bagova i važnim ažuriranjima platforme
Pridružite nam se na Discord-u i počnite da sarađujete sa vrhunskim hakerima danas!
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite oglašavanje vaše kompanije u HackTricks-u ili preuzmete HackTricks u PDF formatu, proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje trikove hakovanja slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.