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

7.5 KiB

27017,27018 - Pentesting MongoDB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights
Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News
Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements
Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

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

Exemplo daqui.

Os IDs de objeto 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 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 forçá-los.

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 as novas recompensas de bugs lançadas 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 %}