Ekim 19, 2021
11 11 11 ÖÖ
TCP nedir ? Aktarım Katmanı 2
Aktarım Katmanı Tcp Nedir
Yönlendirme Nedir 2 ?
Yönlendirme Nedir ?
Ağ Katmanı Nedir 2 ?
Ağ Katmanı Nedir ?
Veri Bağı Katmanı Nedir 2 ?
Android Studio Nasıl Kurulur ?
Veri Bağı Katmanı Nedir ?
Fiziksel Katman Nedir ?
Son Yazılar
TCP nedir ? Aktarım Katmanı 2 Aktarım Katmanı Tcp Nedir Yönlendirme Nedir 2 ? Yönlendirme Nedir ? Ağ Katmanı Nedir 2 ? Ağ Katmanı Nedir ? Veri Bağı Katmanı Nedir 2 ? Android Studio Nasıl Kurulur ? Veri Bağı Katmanı Nedir ? Fiziksel Katman Nedir ?
DIVA

Mobil (Android) Penetrasyon Testi

Paylaşım , Takip İçin

Mobil Penetrasyon Testi Nedir ?

Mobil penetrasyon testi, normal penetrasyon testine benzemektedir. Ayrı olarak burada bir uygulamanın açığı üzerinden mobil sisteme sızma işlemi gerçekleşebilmektedir.

Adb Nedir ?

Sanal cihazımızla ya da bilgisayarımıza bağlı gerçek cihazımızla iletişim kurulmasını sağlar. Bu sayede bağlanılan cihazı komut satırında kullanabilir, dosya yükleyebilir, cihaz içinden dosya çekebilir, hatta uygulama içinde bulunan Activityleri çalıştırabiliriz.

Adb Nasıl Kullanılır ?

Adb dosyamızı indirdikten sonra içerisinde birden fazla tools bulunur. Adb dosyamızın içerisine gelerek shift + faremizin sağ tuşu ile basarak komut satırını açıyoruz . Sonrasında bağlı bir cihazın olup olmadığını görmek için ./adb devices yazıyoruz. Shell açmak içinde ./adb shell yazmamız gerekecek.

DIVA (Damn Insecure and Vulnerable App)

DIVA Nedir ?

Diva , sızma testi uzmanları mobil güvenlik üzerinde çalışma ve pratik yapmak için kodlanmış bir zafiyetli android uygulamasıdır. Örnek olarak DVWA ‘ya benzediğini söyleyebiliriz. Sitesinden veya Github üzerinden apk dosyasını indirerek sanal cihazımıza
entegre ediyoruz. Ben bunun için Genymotion uygulamasını kullandım. Sanal cihaza kurarken indirdiğimiz apk dosyasını isterseniz sanal makinemize sürükleyerek yükleyebilir veya kullanacak olduğumuz adb ile adb install komutu ile de yükleyebilirsiniz.

DIVA

1-Insecure Logging

Insecure Logging Nedir ?

Türkçe karşılığı güvensiz günlük kayıt anlamına gelmektedir. Yani diva uygulamasının ilk zafiyeti güvensiz log (günlük kayıt) kayıtlarından kaynaklanan güvenlik açığıdır. Kullanıcıdan inputta yani veri giriş kısmında kredi kartı bilgisinin girilmesi isteniyor. Fakat kaynak kodda bu işlem yapılarken loglama açık bırakılmış yani yazılımın loglarına düşmekte. Bu logları cihaza adb ile bağlantı kurup logcat ile inceleyeceğiz.

2-Hardcoding Issues - Part 1

Bu zafiyette yazılımcı tarafından kaynak kodda kullanılan sabitlerden kaynaklanan sorunlara değinilmiş. Bir veri girişi var ve doğru değeri girdiğimizde başarılı girmediğimizde yeniden deneyin mesajı veriyor. Bu kodlanırken en temel seviyede mesaja eşitse true değilse false mantığı kullanılmış ve eşitse diye kontrol edilirken cleartext olarak doğru değer kaynak kodda bulunmakta. Elimizdeki apk dosyasını decompiler ettiğimizde değere ulaşabilmekteyiz.

İlk yapmamız gereken diva-beta.apk dosyamızın ismini diva-beta.rar yapıp klasöre çıkartmak olacaktır.

Daha sonrasında bu konuma gelerek zafiyetimiz olan HardcodeActivity ‘i açıyoruz.

17.satırda vendorsecretkey yazısını görmekteyiz. İf kısmında bu yazıyı girdiğimiz zaman giriş başarılı olduğu yazıyı verecektir burada bu şekilde bir yazı kısmının olması bir güvenlik açığıdır.

Gördüğünüz gibi giriş başarılı yazısını görmekteyiz.

3- Insecure Data Storage - Part 1

Bu bölümde güvensiz veri saklamadan kaynaklanan güvenlik açıklıklarına değinilmiştir. Açılan activityde önümüze gelen inputlara yani veri girişlerinde username , password girmemizi istemekte girdiğimiz bu değerleri güvenli saklanamamasından dolayı saldırganlar tarafından erişilebilir durumdadır. Uygulama /data/data dizinin altında genellikle kendi dizinini oluşturur. Bu klasörün altında sharedpreferences ve databases klasörleri bulunduğunuda kod kısmından görebilmekteyiz. Fakat ilk başta kullanıcı adı şifre girişi yapmadan shared dizini oluşmayacaktır. O yüzden ilk önce kayıt yapmamız gerekiyor. Sonrasında shared dizinine erişebiliyor olacağız.

sharedpreferences dizininde bizim kullanıcı adı ve şifrelerinin olduğunu görüyoruz. Hemen uygulamamıza gelip kaydediyoruz. 

insecure data storage

Şimdi shared dizininden kullanıcı adı ve şifresini yakalamayı deneyeceğiz. İlk önce ./adb shell yazarak shelle geçiş yapıyoruz. daha sonra cd /data/data/ diyerek data dizinine gidiyoruz. Sonrasında diva yazısının geçtiği hangi dizinlerin olduğuna bakıyoruz tekrardan. gördüğümüz dizine gidiyoruz sonrasında tekrar içerisinde hangi dizinlerin olduğuna bakmamız gerekecek. Sonrasında shared_prefs dizinini görüyoruz. Tekrardan bu dizine geçiş yapıyoruz . Geçtikten sonra içerisinde ne olduğuna bakıyoruz. Bulduğumuz xml dosyasını cat komutu ile açıyoruz ve kullanıcı adını ve şifresini bulmuş oluyoruz.

4- Insecure Data Storage - Part 2

Bu bölümdede güvensiz veri saklama yöntemlerinden kaynaklanan 2. zafiyetimiz bulunmaktadır. Bu sefer girdiğimiz bilgiler veritabanına kaydolmaktadır. Fakat kaydolduğu yer cihazın içinde /data/data/jakhar.aseem.diva/databases dizininin altındadır.

18. ve 19. satıra baktığımız zaman ids2 veri tabanına kaydettiğimizi ve myuser tablosuna eklendiğini görüyoruz. Şimdi kullanıcı adı ve şifremizi kaydedelim ve veri tabanına girelim.

data 2

./adb shell ile shellimizi açıyoruz. Ardından cd /data/data/jakhar.aseem.diva/ dizinine gidiyoruz . Sonrasında dilerseniz bakabilirsiniz ls komutu ile database dizinin olduğunu görürsünüz ve cd diyerek databases dizinine geçiyoruz. Ardından ls diyerek içerideki dizinleri görüyoruz. Daha sonra sqlite3 ids2 diyoruz ve veri tabanına girmiş oluyoruz. .tables diyerek tabloları görüyoruz ve en son olarak Select * from myuser; diyerek kayıtlı kullanıcıları görmüş oluyoruz.

Görüldüğü gibi kayıt ettiğimiz pentest ve burak verilerini bulmuş olduk.

5- Insecure Data Storage - Part 3

Bu kısımda da yine güvensiz veri saklamanın 3. zafiyetini görmekteyiz. Uygulama bulunduğu klasöre geçici bir dosya oluşturarak hassas verileri buraya kaydetmekte. Bu tip tespitler için her zaman uygulamanın klasörü , databases ve shared prefences dizinleri incelenmelidir. Diğer zafiyetlerde yaptığımız gibi kodumuza bakıyoruz ve sonrasında sızma işlemine geçiyoruz.

23. satıra baktığımız zaman bizim kaydettiğimiz veri geçici bir dosyada yani uinfo , tmp şeklinde kaydedildiği gözükmektedir. Şimdi kullanıcı adı ve şifremizi kaydedelim sonrasında kodumuza geçelim.

insecure data 3

Her zamanki gibi ./adb shell ile giriş yapıyoruz. Sonrasında cd /data/data/jakhar.aseem.diva diyerek dizinimize gidiyoruz ve ls -al diyerek olan bütün dosyaları görüyoruz. uinfo şeklindeki dosyamız bizim verilerimizin kayıt edildiği dosyadır. cat uinfo-tmp diyoruz ve kayıt edilmiş verimizi görmüş oluyoruz.

6- Insecure Data Storage - Part 4

Bu kısımda da yine girilen bilgiler cihaz içinde güvensiz şekilde tutulmaktadır.

7- Input Validation Issues - Part 1:

Bu kısımda input kontrol eksikliğinden kaynaklanan zafiyetlere değinilmiştir. Buradaki input girilen değeri aramaktadır. Varsa ekrana getirmekte yoksa bulunamadı olarak çıktı vermekte. Bundan sonra sorgularımızın tırnak ile yazıldığını tespit ederek sqli sorgusunu yazarak tüm kayıtlara ulaşabilmekteyiz.

8-Input Validation Issues - Part 2

Yine input control eksikliğinden kaynaklanan bir güvenlik açığı bulunmakta. Girilen url’I sayfayının hemen altında web view veya tarayıcı yardımı ile açmakta fakat biz url yerine bir cihaz içindeki hassas bir dosya çağırdığımızda onuda ekrana getirmektedir.

Şimdi, kimlik bilgilerinin depolandığı paylaşılan tercihlerden bir dosyaya erişmeye çalışalım. Bu, daha önceki görevlerde gördüğümüz dosyadır.

file:///data/data/jakhar.aseem.diva/shared_prefs/jakhar.aseem.diva_preferences.xml

9-Access Control Issues – Part 1

Erişim kontrol sorunları başlıklı bu bölümde activitylerin AndroidManifest.xml dosyasında gerekli şekilde konfigürasyonu ve izinleri ayarlanamadığında activityler dışarıdan butonlara tıklanmadan açılabilmektedir. Drozer ve adb gibi araçlarla bu işlemler yapılabilmektedir.

Bu kısımda View Apı Credentials a tıkladığımızda yeni bir activity açılarak api bilgilerini getirdiğini gördük .

Etkinlik adını aldığımız gibi. Şimdi doğrudan adb etkinlik Yöneticisi’nden erişmeye çalışalım.

adb shell am start -n jakhar.aseem.diva/.APICredsActivity

Gördüğünüz gibi dışarıdan da giriş yapabilmekteyiz.

10-Access Control Issues – Part 2

Erişim kontrol sorunlarının ikinci kısmı da ilk kısmına benzer sadece bu sefer uygulama açıldığında önümüze iki seçenek sunuyor Kayıt ol ve kayıtlı kullanıcıyım tarzında kayıt ol seçeneğine tıklandığı zaman PIN sormakta. Fakat zaten kayıtlı kullanıcıyım sekmesinde ise direk activity açılmakta. Bizim amacımız zaten kayıtlı kullanıcıyım butonuna basmadan bu activity’i dışarıdan çalıştırmak.

Önce uygulamayı derlemeliyiz. Bunun için APKTOOL kullanıyoruz. Derledikten sonra AndroidManifest.xml dosyasının oluştuğunu görmekteyiz. Sonrasında dosyamıza bakıyoruz.

Dosyada gözümüze çarpan APICreds2Activity dosyamız geliyor. Daha önce görmüş olduğumuz dosyayı açıyoruz.

Burada 19. satırdaki chk_pin dikkatimizi çekmektedir. Devre dışı bırakırsak eğer giriş yapabiliri. Bulduğumuz bu ayrıntılarla kimlik bilgilerine erişmeye ve PIN’i kontrol etmeyi devre dışı bırakmaya çalışalım.

adb shell am start -n jakhar.aseem.diva/.APICreds2Activity -a jakhar.aseem.diva.action.View_CREDS2 –ez check_pin false

Görüldüğü gibi erişmiş olmaktayız.

11-Access Control Issues – Part 3

Bu kısımda yine erişim control sorunlarına değinilmiş. Kullanıcıdan bir pin kodu girmesi istenmektedir. Görünüşe göre PIN olmadan notlara erişemiyoruz. İçerik sağlayıcısını kullanarak etkinliğe erişmeye çalışalım.

12-Hardcoding Issues - Part 2

pull libdivajni.so adb kullanarak sanal makineden dosya çekeriz. 

adb pull /data/data/jakhar.aseem.diva/lib/libdivajni.so

Dosyaları string haline çevirmek için ise string kullanıyoruz.

strings libdivajni.so

Farklı stringleri denedikten sonra nihayet aradığımız string çalışıyor.

13-Input Validation Issues - Part 3

Bu zafiyetimizdeki amaç uygulamayı çökertmektir. Input kontrol eksikliğinden kaynaklanan zafiyetlerin üçüncü kısmı bu sefer input yani veri girişi uzunluğu kontrol edilmemiş. 10 karakter girildiğinde herhangi bir sorun vermemektedir fakat 10dan fazla adet karakter girildiğinde uygulamamız çökmektedir.


Paylaşım , Takip İçin
5 1 vote
Article Rating

Bir Cevap Yazın

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
HAYALİNDEKİ YAZILIM
%d blogcu bunu beğendi: