27017,27018 - Pentesting MongoDB
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas
MongoDB é um sistema de gerenciamento de banco de dados de código aberto que utiliza um modelo de banco de dados orientado a documentos para lidar com formas diversas de dados. Oferece flexibilidade e escalabilidade para gerenciar dados não estruturados ou semi-estruturados em aplicações como análise de big data e gerenciamento de conteúdo. Porta padrão: 27017, 27018
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
Enumeração
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
Alguns comandos do 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 os servidores mongodb: “mongodb server information”
- Pesquisar por servidores mongodb totalmente abertos: “mongodb server information” -“partially enabled”
- Apenas auth parcialmente habilitado: “mongodb server information” “partially enabled”
Login
Por padrão o mongo não requer senha.
Admin é um banco de dados mongo comum.
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
O script do nmap: mongodb-brute verificará se creds são necessários.
nmap -n -sV --script mongodb-brute -p 27017 <ip>
Brute force
Olhe dentro de /opt/bitnami/mongodb/mongodb.conf para saber se credenciais são necessárias:
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 Predict
Exemplo from here.
Mongo Object IDs são strings hexadecimais de 12-byte:

Por exemplo, aqui está como podemos dissecar um Object ID real retornado por uma aplicação: 5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772 em decimal = Sexta-feira, 31 de julho de 2020 17:49:32
- 9fa6dc: Identificador da Máquina
- 2500: Process ID
- 314019: Um contador incremental
Dos elementos acima, o identificador da máquina permanecerá o mesmo enquanto o banco de dados estiver rodando na mesma máquina física/virtual. O Process ID só mudará se o processo MongoDB for reiniciado. O timestamp será atualizado a cada segundo. O único desafio em adivinhar Object IDs simplesmente incrementando os valores do contador e do timestamp é o fato de que o MongoDB gera e atribui Object IDs a nível de sistema.
A ferramenta https://github.com/andresriancho/mongo-objectid-predict, dado um Object ID inicial (você pode criar uma conta e obter um ID inicial), devolve cerca de 1000 prováveis Object IDs que poderiam ter sido atribuídos aos próximos objetos, então você só precisa bruteforceá-los.
Post
Se você é root pode modify o arquivo mongodb.conf para que nenhuma credencial seja necessária (noauth = true) e login without credentials.
MongoBleed zlib Memory Disclosure (CVE-2025-14847)
Uma divulgação de memória não autenticada e generalizada (“MongoBleed”) afeta MongoDB 3.6–8.2 quando o zlib network compressor is enabled. O header OP_COMPRESSED confia em um uncompressedSize fornecido pelo atacante, então o servidor aloca um buffer desse tamanho e o copia de volta nas respostas mesmo que apenas um payload comprimido muito menor tenha sido fornecido. Os bytes extras são uninitialized heap data de outras conexões, /proc, ou do cache WiredTiger. Os atacantes então omitem o esperado BSON \x00 terminator de modo que o parser do MongoDB continua escaneando esse buffer superdimensionado até encontrar um terminador, e a resposta de erro ecoa tanto o documento malicioso quanto os bytes de heap escaneados pre-auth em TCP/27017.
Exposure requirements & quick checks
- A versão do servidor deve estar dentro das faixas vulneráveis (3.6, 4.0, 4.2, 4.4.0–4.4.29, 5.0.0–5.0.31, 6.0.0–6.0.26, 7.0.0–7.0.27, 8.0.0–8.0.16, 8.2.0–8.2.2).
net.compression.compressorsounetworkMessageCompressorsdevem incluirzlib(padrão em muitas builds). Check it from the shell with:
db.adminCommand({getParameter: 1, networkMessageCompressors: 1})
- O atacante precisa apenas de acesso de rede à porta do MongoDB. Nenhuma autenticação é necessária.
Fluxo de exploração e coleta
- Inicie o handshake do wire-protocol anunciando
compressors:["zlib"]para que a sessão use zlib. - Envie frames
OP_COMPRESSEDcujouncompressedSizedeclarado é muito maior do que o payload real descomprimido para forçar alocação de heap superdimensionada cheia de dados antigos. - Construa o BSON embutido sem um
\x00final para que o parser percorra dados controlados pelo atacante até o buffer superdimensionado enquanto procura por um terminador. - MongoDB emite um erro que inclui a mensagem original mais quaisquer bytes do heap que foram escaneados, causando leak de memória. Repita com comprimentos/offsets variados para agregar segredos (creds/API keys/session tokens), estatísticas do WiredTiger e artefatos em
/proc.
O PoC público automatiza os offsets de sondagem e o carving dos fragmentos retornados:
python3 mongobleed.py --host <target> --max-offset 50000 --output leaks.bin
Sinal de ruído de detecção (conexões de alta taxa)
O ataque normalmente gera muitas requisições de curta duração. Fique atento a picos de conexões de entrada para mongod/mongod.exe. Exemplo XQL hunt (>500 conexões/min por IP remoto, excluindo, por padrão, faixas RFC1918/loopback/link-local/mcast/broadcast/reserved):
Cortex XQL high-velocity Mongo connections
```sql // High-velocity inbound connections to mongod/mongod.exe (possible MongoBleed probing)dataset = xdr_data | filter event_type = ENUM.NETWORK | filter lowercase(actor_process_image_name) in (“mongod”, “mongod.exe”) | filter action_network_is_server = true | filter action_remote_ip not in (null, “”) | filter incidr(action_remote_ip, “10.0.0.0/8”) != true and incidr(action_remote_ip, “192.168.0.0/16”) != true and incidr(action_remote_ip, “172.16.0.0/12”) != true and incidr(action_remote_ip, “127.0.0.0/8”) != true and incidr(action_remote_ip, “169.254.0.0/16”) != true and incidr(action_remote_ip, “224.0.0.0/4”) != true and incidr(action_remote_ip, “255.255.255.255/32”) != true and incidr(action_remote_ip, “198.18.0.0/15”) != true | filter action_network_session_duration <= 5000 | bin _time span = 1m | comp count(_time) as Counter by agent_hostname, action_remote_ip, _time | filter Counter >= 500
</details>
## Referências
- [Unit 42 – Threat Brief: MongoDB Vulnerability (CVE-2025-14847)](https://unit42.paloaltonetworks.com/mongobleed-cve-2025-14847/)
- [Tenable – CVE-2025-14847 (MongoBleed): MongoDB Memory Leak Vulnerability Exploited in the Wild](https://www.tenable.com/blog/cve-2025-14847-mongobleed-mongodb-memory-leak-vulnerability-exploited-in-the-wild)
- [MongoDB Security Advisory SERVER-115508](https://jira.mongodb.org/browse/SERVER-115508)
- [Censys – MongoBleed Advisory](https://censys.com/advisory/cve-2025-14847)
- [MongoBleed PoC (joe-desimone/mongobleed)](https://github.com/joe-desimone/mongobleed)
---
> [!TIP]
> Aprenda e pratique Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Aprenda e pratique Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Aprenda e pratique Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Supporte o HackTricks</summary>
>
> - Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
> - **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
>
> </details>


