Exploiting Content Providers
İçerik Sağlayıcıların Sömürülmesi
Giriş
Veri, bir uygulamadan diğerlerine bir içerik sağlayıcı olarak bilinen bir bileşen aracılığıyla talep üzerine sağlanır. Bu talepler, ContentResolver sınıfı yöntemleri aracılığıyla yönetilir. İçerik sağlayıcılar, verilerini veritabanı, dosyalar veya ağ gibi çeşitli yerlerde depolayabilir.
Manifest.xml dosyasında, içerik sağlayıcının beyanı gereklidir. Örneğin:
content://com.mwr.example.sieve.DBContentProvider/Keys
erişmek için READ_KEYS
izni gereklidir. Geliştiricinin bir hatası nedeniyle /Keys
'in güvence altına alındığı, ancak /Keys/
'in korunmadığı ilginçtir.
Belki özel verilere erişebilir veya bazı zayıflıkları (SQL Injection veya Path Traversal) istismar edebilirsiniz.
Açık içerik sağlayıcılardan bilgi alın
DBContentProvider'a ulaşmanın bir yolunu, URI'leri “content://” ile başlatarak bir araya getirmek mümkündür. Bu yaklaşım, Drozer kullanarak elde edilen içgörülere dayanmaktadır; burada anahtar bilgiler /Keys dizininde bulunmuştur.
Drozer birçok URI'yi tahmin edebilir ve deneyebilir:
You should also check the ContentProvider code to search for queries:
Also, if you can't find full queries you could check which names are declared by the ContentProvider on the onCreate
method:
The query will be like: content://name.of.package.class/declared_name
Veritabanı destekli İçerik Sağlayıcılar
Muhtemelen çoğu İçerik Sağlayıcı, bir veritabanı için arayüz olarak kullanılır. Bu nedenle, ona erişebilirseniz, bilgileri çıkarma, güncelleme, ekleme ve silme işlemlerini gerçekleştirebilirsiniz. Hassas bilgilere erişip erişemeyeceğinizi kontrol edin veya yetkilendirme mekanizmalarını atlamak için değiştirmeyi deneyin.
İçerik Sağlayıcının kodunu kontrol ederken şunları da arayın: query, insert, update ve delete gibi adlandırılmış fonksiyonlar:
Çünkü onları çağırabileceksiniz
İçerik sorgulama
İçerik Ekleme
Veritabanını sorgulayarak sütunların adını öğrenirsiniz, ardından veritabanına veri ekleyebilirsiniz:
Eklemelerde ve güncellemelerde --string ile string, --double ile double, --float, --integer, --long, --short, --boolean belirtmek için kullanabilirsiniz.
İçeriği Güncelleme
Sütunların adını bildiğinizde girdileri de değiştirebilirsiniz:
İçeriği Silme
SQL Enjeksiyonu
SQL enjeksiyonunu (SQLite) test etmek, içerik sağlayıcısına geçirilen projection ve selection fields'ı manipüle ederek basittir. Content Provider'ı sorgularken bilgi aramak için 2 ilginç argüman vardır: --selection ve --projection:
SQL enjeksiyonlarını test etmek için bu parametreleri istismar etmeyi deneyebilirsiniz:
Drozer ile Otomatik SQLInjection keşfi
Dosya Sistemi Destekli İçerik Sağlayıcılar
İçerik sağlayıcılar dosyalara erişmek için de kullanılabilir:
Dosyayı Oku
İçerik Sağlayıcıdan dosyaları okuyabilirsiniz.
Path Traversal
Eğer dosyalara erişebiliyorsanız, Path Traversal'ı kötüye kullanmayı deneyebilirsiniz (bu durumda bu gerekli değil ama "../" ve benzeri hileleri kullanmayı deneyebilirsiniz).
Drozer ile Otomatik Yol Geçişi Keşfi
Referanslar
Last updated