# 27017,27018 - Pentesting MongoDB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
**HackenProof é o lar de todas as recompensas por bugs de criptografia.** **Seja recompensado sem atrasos**\ As recompensas do HackenProof são lançadas apenas quando seus clientes depositam o orçamento de recompensa. Você receberá a recompensa após a verificação do bug. **Adquira experiência em pentesting web3**\ Protocolos de blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão. **Torne-se a lenda do hacker web3**\ Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal. [**Cadastre-se no HackenProof**](https://hackenproof.com/register) comece a ganhar com seus hacks! {% embed url="https://hackenproof.com/register" %} ## Informações Básicas O MongoDB é um sistema de gerenciamento de banco de dados (DBMS) de código aberto que usa um modelo de banco de dados orientado a documentos que suporta várias formas de dados. (De [aqui](https://searchdatamanagement.techtarget.com/definition/MongoDB)) **Porta padrão:** 27017, 27018 ``` PORT STATE SERVICE VERSION 27017/tcp open mongodb MongoDB 2.6.9 2.6.9 ``` ### Enumeração #### Manual A enumeração manual é um processo de coleta de informações sobre um serviço MongoDB. Isso pode ser feito usando comandos e ferramentas específicas para obter detalhes sobre a instância do MongoDB em execução. #### Verificação de porta A primeira etapa é verificar se a porta 27017 (padrão do MongoDB) está aberta. Isso pode ser feito usando a ferramenta `nmap` com o seguinte comando: ``` nmap -p 27017 ``` Se a porta estiver aberta, isso indica que o serviço MongoDB está em execução. #### Conexão ao MongoDB Após verificar a porta, você pode tentar se conectar ao serviço MongoDB usando o cliente `mongo` com o seguinte comando: ``` mongo :27017 ``` Se a conexão for bem-sucedida, você será apresentado ao prompt do MongoDB, onde poderá executar comandos e consultar o banco de dados. #### Enumeração de informações Uma vez conectado ao MongoDB, você pode usar comandos específicos para obter informações sobre o banco de dados e suas coleções. Alguns comandos úteis incluem: - `show dbs`: lista todos os bancos de dados disponíveis. - `use `: seleciona um banco de dados específico. - `show collections`: lista todas as coleções no banco de dados selecionado. - `db..find()`: exibe todos os documentos em uma coleção específica. Esses comandos podem ajudar a identificar informações sensíveis ou vulnerabilidades no banco de dados MongoDB durante a enumeração manual. ```python 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:** ```bash # Show databases show dbs # Switch to a specific database use # Show collections in the current database show collections # Insert a document into a collection db..insertOne({}) # Find documents in a collection db..find({}) # Update documents in a collection db..updateOne({}, {}) # Delete documents from a collection db..deleteOne({}) ``` **Observações:** - Substitua `` pelo nome do banco de dados desejado. - Substitua `` pelo nome da coleção desejada. - Substitua `` pelo documento que deseja inserir. - Substitua `` pela consulta que deseja realizar. - Substitua `` pela atualização que deseja fazer. ```bash show dbs use show collections db..find() #Dump the collection db..count() #Number of records of the collection db.current.find({"username":"admin"}) #Find in current db the username admin ``` ### Automático O MongoDB é um banco de dados NoSQL popular que utiliza um modelo de armazenamento de documentos. Ele é amplamente utilizado em aplicações web e móveis devido à sua flexibilidade e escalabilidade. No entanto, como qualquer outro serviço de rede, o MongoDB também pode ser alvo de ataques. Neste capítulo, discutiremos algumas técnicas de pentesting para identificar e explorar vulnerabilidades em instâncias do MongoDB. Vamos nos concentrar nas portas padrão 27017 e 27018, que são comumente usadas para comunicação com o MongoDB. #### Verificação de porta Antes de iniciar um teste de penetração em um serviço MongoDB, é importante verificar se as portas 27017 e 27018 estão abertas. Isso pode ser feito usando ferramentas de varredura de portas, como o Nmap. ```bash nmap -p 27017,27018 ``` Se as portas estiverem abertas, isso indica que o serviço MongoDB está em execução e pode ser acessado. #### Enumeração de bancos de dados Uma vez que tenhamos acesso ao serviço MongoDB, a próxima etapa é enumerar os bancos de dados disponíveis. Isso pode ser feito usando o comando `show dbs` no shell do MongoDB. ```bash mongo --host --port 27017 > show dbs ``` Isso nos fornecerá uma lista de todos os bancos de dados presentes no servidor. #### Enumeração de coleções Após identificar os bancos de dados, podemos prosseguir para a enumeração das coleções dentro de cada banco de dados. Isso pode ser feito usando o comando `show collections` no shell do MongoDB. ```bash mongo --host --port 27017 --authenticationDatabase -u -p > use > show collections ``` Isso nos fornecerá uma lista de todas as coleções presentes no banco de dados selecionado. #### Extração de dados Uma vez que tenhamos identificado as coleções, podemos extrair dados dessas coleções usando o comando `find` no shell do MongoDB. ```bash mongo --host --port 27017 --authenticationDatabase -u -p > use > db..find() ``` Isso nos retornará todos os documentos presentes na coleção selecionada. #### Injeção de comandos Além da extração de dados, também podemos explorar a possibilidade de injeção de comandos no MongoDB. Isso pode ser feito usando o operador `$where` no comando `find`. ```bash mongo --host --port 27017 --authenticationDatabase -u -p > use > db..find({$where: ""}) ``` Isso nos permitirá executar comandos arbitrários no servidor MongoDB. #### Ataques de força bruta Se tivermos credenciais de acesso limitadas, também podemos tentar realizar ataques de força bruta para obter acesso não autorizado ao serviço MongoDB. Isso pode ser feito usando ferramentas como o Hydra. ```bash hydra -l -P mongodb ``` Isso tentará várias combinações de nomes de usuário e senhas da lista fornecida para obter acesso ao serviço MongoDB. #### Conclusão O MongoDB é um serviço popular que pode ser alvo de ataques se não for configurado corretamente. Neste capítulo, discutimos algumas técnicas de pentesting para identificar e explorar vulnerabilidades em instâncias do MongoDB. É importante lembrar que todas as técnicas discutidas devem ser realizadas apenas em sistemas autorizados e com o devido consentimento. ```bash nmap -sV --script "mongo* and default" -p 27017 #By default all the nmap mongo enumerate scripts are used ``` ### Shodan * Todos os mongodb: `"informações do servidor mongodb"` * Pesquisar por servidores mongodb totalmente abertos: `"informações do servidor mongodb" -"parcialmente habilitado"` * Apenas habilitar parcialmente a autenticação: `"informações do servidor mongodb" "parcialmente habilitado"` ## Login Por padrão, o mongo não requer senha.\ **Admin** é um banco de dados comum do mongo. ```bash mongo mongo : mongo :/ mongo -u -p '' ``` O script do nmap: _**mongodb-brute**_ irá verificar se são necessárias credenciais. ```bash nmap -n -sV --script mongodb-brute -p 27017 ``` ### [**Força bruta**](../generic-methodologies-and-resources/brute-force.md#mongo) Verifique dentro de _/opt/bitnami/mongodb/mongodb.conf_ para saber se são necessárias credenciais: ```bash 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 ``` ## Previsão de Mongo Objectid Os IDs de objeto do Mongo são strings hexadecimais de **12 bytes**: ![](../.gitbook/assets/id-and-objectids-in-mongodb.png) Por exemplo, aqui está como podemos analisar um ID de objeto real retornado por um aplicativo: 5f2459ac9fa6dc2500314019 1. 5f2459ac: 1596217772 em decimal = Sexta-feira, 31 de julho de 2020 17:49:32 2. 9fa6dc: Identificador da máquina 3. 2500: ID do processo 4. 314019: Um contador incremental Dos elementos acima, o identificador da máquina permanecerá o mesmo enquanto o banco de dados estiver executando na mesma máquina física/virtual. O ID do processo só mudará se o processo do MongoDB for reiniciado. O timestamp será atualizado a cada segundo. O único desafio em adivinhar os IDs de objeto simplesmente incrementando os valores do contador e do timestamp é o fato de que o Mongo DB gera IDs de objeto e atribui IDs de objeto em nível de sistema. A ferramenta [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), dado um ID de objeto inicial (você pode criar uma conta e obter um ID inicial), retorna cerca de 1000 IDs de objeto prováveis que poderiam ter sido atribuídos aos próximos objetos, então você só precisa forçar a entrada. ## Post Se você é root, pode **modificar** o arquivo **mongodb.conf** para que não sejam necessárias credenciais (_noauth = true_) e **fazer login sem credenciais**.
**HackenProof é o lar de todas as recompensas por bugs de criptografia.** **Seja recompensado sem atrasos**\ As recompensas do HackenProof são lançadas apenas quando os clientes depositam o orçamento de recompensa. Você receberá a recompensa após a verificação do bug. **Adquira experiência em pentesting web3**\ Protocolos de blockchain e contratos inteligentes são a nova Internet! Domine a segurança web3 em seus dias de ascensão. **Torne-se a lenda do hacker web3**\ Ganhe pontos de reputação com cada bug verificado e conquiste o topo do leaderboard semanal. [**Cadastre-se no HackenProof**](https://hackenproof.com/register) e comece a ganhar com seus hacks! {% embed url="https://hackenproof.com/register" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).