hacktricks/network-services-pentesting/27017-27018-mongodb.md

7.6 KiB

27017,27018 - Pentesting MongoDB

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Junte-se ao HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!

Insights de Hacking
Engaje-se com conteúdo que explora a emoção e os desafios do hacking

Notícias de Hacking em Tempo Real
Mantenha-se atualizado com o mundo acelerado do hacking através de notícias e insights em tempo real

Últimos Anúncios
Fique informado sobre os novos programas de recompensas por bugs lançados e atualizações cruciais da plataforma

Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!

Informações Básicas

MongoDB é um sistema de gerenciamento de banco de dados open source que utiliza um modelo de banco de dados orientado a documentos para lidar com diversas formas de dados. Ele 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 mongodb: "mongodb server information"
  • Pesquisar por servidores mongodb totalmente abertos: "mongodb server information" -"partially enabled"
  • Apenas autenticação parcialmente habilitada: "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 nmap: mongodb-brute verificará se são necessárias credenciais.

nmap -n -sV --script mongodb-brute -p 27017 <ip>

Brute force

Olhe dentro de /opt/bitnami/mongodb/mongodb.conf para saber se são necessárias credenciais:

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 Objectid do Mongo

Exemplo daqui.

Os IDs de objeto do Mongo são strings hexadecimais de 12 bytes:

http://techidiocy.com/_id-objectid-in-mongodb/

Por exemplo, aqui está como podemos dissecar um ID de objeto real retornado por uma aplicação: 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 rodando 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 um nível de sistema.

A ferramenta 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 fazer brute force neles.

Post

Se você for root, pode modificar o arquivo mongodb.conf para que nenhuma credencial seja necessária (noauth = true) e fazer login sem credenciais.


Junte-se ao servidor HackenProof Discord para se comunicar com hackers experientes e caçadores de bugs!

Insights de Hacking
Engaje-se com conteúdo que mergulha na emoção e nos desafios do hacking

Notícias de Hack em Tempo Real
Mantenha-se atualizado com o mundo do hacking em ritmo acelerado através de notícias e insights em tempo real

Últimos Anúncios
Fique informado sobre os novos programas de recompensas por bugs lançados e atualizações cruciais da plataforma

Junte-se a nós no Discord e comece a colaborar com os melhores hackers hoje!

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Suporte ao HackTricks
{% endhint %}