Ruby İle mongoDB “admin” Kullanıcısının Parolasını Elde Etme

0
220
views
Sızma testleri sırasında tespit edilen bir açıklığın istismarı ile arka tarafta çalışan veritabanı üzerinde komut çalıştırılabilir. Bu yazıda Ruby programlama dili kullanılarak mongoDB “admin” kullanıcısına ait parolanın elde edilmesi incelenecektir.

 

 

A) NoSQL’e Giriş

NoSQL ‘Sadece SQL değil’ manasına gelen ‘Not Only SQL’in kısaltılmış halidir. Bol ziyaretçi trafiğine sahip ve yoğun işlemler gerektiren durumlarda yani maliyetin hat safhada olduğu durumlarda ilişkisel veritabanı sistemlerine(RDBMS – Relational Database Management System) nazaran maliyeti daha rahat karşılayabilmek için geliştirilmiş bir sistemdir.

 

 

B) NoSQL Veri Tabanı Türleri

“NoSQL”, sadece ilişkisel olmayan ve SQL anlamına gelmediğinden, NoSQL teknolojisini uygulamanın birçok farklı yolu vardır. Genel olarak, NoSQL veritabanları aşağıdaki aileleri içerir:

  • Anahtar-değer depoları en basit NoSQL veritabanlarıdır. Veritabanındaki her öğe, değeriyle birlikte bir özellik adı veya anahtarı olarak saklanır. Anahtar mağazaların örnekleri Riak ve Voldemort’tur. Redis gibi bazı anahtar-değer depoları, her bir değerin, işlevsellik katan “integer” gibi bir tür olmasına izin verir.
  • Belge veritabanları her anahtarı, belge olarak bilinen karmaşık bir veri yapısıyla eşleştirir. Belgeler birçok farklı anahtar / değer çifti veya anahtar-dizi çifti veya iç içe geçmiş belgeler içerebilir.
  • Cassandra ve HBase gibi geniş sütunlu mağazalar , büyük veri kümeleri üzerindeki sorgular için optimize edilmiştir ve satırlar yerine veri sütunlarını birlikte saklar.
  • Grafik mağazaları, sosyal bağlantılar gibi ağlar hakkında bilgi depolamak için kullanılır. Grafik mağazaları Neo4J ve HyperGraphDB’yi içerir.

 

C) MongoDB’ye Giriş

Döküman tabanlı bir NoSQL veritabanıdır. Verileri yapısal olarak Json formatında ve documentlar halinde collectionlar içerisinde tutmaktadır. Herhangi bir alana yahut aralığa göre sorgu yazılabilmektedir.

MongoDB’de ki yapıları ilişkisel veritabanlarındaki yapılarla kıyaslarsak eğer;

 

Ruby için ruby-lang sitesinden istifade edebilirsiniz.

https://www.ruby-lang.org/tr/about/

 

D) Parola Tespit Etme İşlemi

Artık başlayabiliriz :)

 

Test sayfamız Pentesterlab’daki bir bölumden alındı.

“admin” bağlantısına tıkladığımızda aşağıdaki sayfa gelir.

 

/?search=admin’ denediğimizde ise boş sayfa geliyor.

 

/?search=admin’ && this.password.match(/aaa/)%00

bu sorguyla kısaca mongodb ye parolanın aaa ile eşleşip eşleşmediğini soruyoruz. Sonunda null byte kullandık.

& yerine %26 kullanmamızın nedeni ASCII karşılığı olmasıdır.

 

Null Byte Enjeksiyonu, kullanıcı tarafından sağlanan verilere URL kodlu boş bayt karakterleri (yani “%00” veya onaltılık olarak “%00” gibi) ekleyerek web altyapısındaki kontrol filtrelerini atlamak için kullanılan aktif bir kullanım tekniğidir.

Sorgunun cevabı boş geldi.

 

“aaa” yerine “d” gibi farklı bir harf denediğimizde sayfanın cevap verdiğini görüyoruz.

 

Sonrasında manuel olarak “^d” ile deneme yaparak parolanın d ile başlayıp başlamadığını anlıyoruz. Dizenin ortasındaki karakterlerle eşleşmediğinden emin olmak için “^” ve “$” karakterlerini kullanarak eşleşmenin doğru yapıldığından emin olacağız (aksi halde yineleme çok daha zor olacaktır). Bundan sonra harf ve sayılar ekleyerek denemelerimizi çoğaltabiliriz fakat bu epey uzun sürecek ve yüksek ihtimal sonuca varamayacağız.

Bunun için ruby ile script yazıp öyle deneme yapmasını sağlayacağız.

 

 

 

Bunu kaydedip çalıştırdığınızda harfleri sırayla denediğini göreceğiz.

 

Eğer timeout gibi bir hata alırsa aşağıdaki gibi komut satırında göreceksiniz.

 

Denemeye devam ettiğinde harf buldukça yenisini ekleyerek sorguyu yeniler

 

İzlemesi zevkli değil mi :) Bence de…

 

Kaynaklar:

https://www.gencayyildiz.com/blog/nosql-ve-mongodb-nedir/
https://www.mongodb.com/nosql-inline
https://www.ruby-lang.org/tr/
https://pentesterlab.com/badges/essential

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz