7.6 KiB
27017,27018 - Pentesting MongoDB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Sigue a HackenProof para aprender más sobre errores web3
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones comunitarias
Información básica
MongoDB es un sistema de gestión de bases de datos (DBMS) de código abierto que utiliza un modelo de base de datos orientado a documentos que admite diversas formas de datos. (De aquí)
Puerto predeterminado: 27017, 27018
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
Enumeración
Manual
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
Algunos comandos de 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
Automático
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
Shodan
- Todos los mongodb:
"información del servidor mongodb"
- Buscar servidores mongodb completamente abiertos:
"información del servidor mongodb" -"parcialmente habilitado"
- Solo habilitar parcialmente la autenticación:
"información del servidor mongodb" "parcialmente habilitado"
Inicio de sesión
Por defecto, mongo no requiere contraseña.
Admin es una base de datos mongo común.
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
El script de nmap: mongodb-brute verificará si se necesitan credenciales.
nmap -n -sV --script mongodb-brute -p 27017 <ip>
Fuerza bruta
Busque dentro de /opt/bitnami/mongodb/mongodb.conf para saber si se necesitan credenciales:
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
Predicción de Mongo Objectid
Los IDs de objetos de Mongo son cadenas hexadecimales de 12 bytes:
Por ejemplo, así es como podemos descomponer un ID de objeto real devuelto por una aplicación: 5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772 en decimal = viernes, 31 de julio de 2020 17:49:32
- 9fa6dc: Identificador de máquina
- 2500: ID de proceso
- 314019: Un contador incremental
De los elementos anteriores, el identificador de máquina permanecerá igual mientras la base de datos se ejecute en la misma máquina física/virtual. El ID de proceso solo cambiará si se reinicia el proceso de MongoDB. La marca de tiempo se actualizará cada segundo. El único desafío para adivinar los IDs de objetos simplemente incrementando los valores de contador y marca de tiempo, es el hecho de que Mongo DB genera IDs de objetos y asigna IDs de objetos a nivel del sistema.
La herramienta https://github.com/andresriancho/mongo-objectid-predict, dada una ID de objeto de inicio (puede crear una cuenta y obtener una ID de inicio), devuelve alrededor de 1000 IDs de objeto probables que podrían haber sido asignados a los siguientes objetos, por lo que solo necesita probarlos con fuerza bruta.
Publicación
Si eres root, puedes modificar el archivo mongodb.conf para que no se necesiten credenciales (noauth = true) e iniciar sesión sin credenciales.
Sigue a HackenProof para aprender más sobre errores web3
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones de la comunidad
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección de NFTs exclusivos.
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.