บทนำ (Overview)
“Directory Traversal” หมายถึงช่องโหว่ที่สามารถทำให้เราเข้าถึงระบบไฟล์ที่อยู่ในโฟลเดอร์ต่าง ๆ ของ เครื่อง “Android” โดยที่โปรแกรมไม่ได้อนุญาต แต่อาศัยช่องโหว่ของ “Webivew Controller” (เปรียบเสมือนเว็บบราวเซอร์) ที่ไม่มีการกรองคำสั่ง และไม่มีการจำกัดสิทธิโฟลเดอร์ที่ไม่อนุญาต หรือให้สิทธิเฉพาะโฟลเดอร์ที่สามารถเข้าถึงได้ ทำให้เกิดช่องโหว่ที่สามารถอ่านข้อมูลที่สามารถประมวลผลกับ “Webview” ได้ (Text, JavaScript, HTML, etc…) ซึ่งเราเรียกว่า “Local File inclusion”
อนึ่งช่องโหว่ดังกล่าวใกล้เคียงกันกับ “Content Provider” ซึ่งก็ทำให้เราสามารถอ่านไฟล์ที่สำคัญ ทั้งของระบบและ “Application” ได้เช่นกันแต่มีลักษณะช่องโหว่แตกต่างกันเล็กน้อย สามารถติดตามบทความดังกล่าวได้ที่ How to exploit Directory Traversal via “Content Provider” using Drozer – Sieve
ขั้นตอน (Steps)
- ติดตั้งโปรแกรมช่องโหว่ “DIVA” สามารถติดตามวิธีการติดตั้งได้ที่ How to install DIVA (android)
- จากนั้นเข้าไปที่เมนู “8. INPUT VALIDATION ISSUES – PART2”
- วัตถุประสงค์คือเราจะต้องเข้าถึงไฟล์ระบบหรือ ไฟล์ใดๆ ที่มีความสำคัญโดยผ่านช่อง “URL” ดังกล่าว ทดลองกรอกเว็บไซต์ http://itselectlab.com
- ทดลองใส่ค้นหาไฟล์ในเครื่องโดยใช้ “file:///etc/hosts”
- ทดลองเข้าโฟลเดอร์ /sdcard (*ไฟล์ดังกล่าวถูกสร้างมาจากโปรแกรมช่องโหว่ Insecure Bank)
- เราพบว่าสามารถเข้าถึงระบบไฟล์ได้โดยผ่าน “Webview Controller” ดังนั้นเราลองมาตรวจสอบกันว่าเกิดจากช่องโหว่อะไร
- ให้ทำการ “Reverse Engineering” โปรแกรมเพื่อตรวจสอบ “Source-code” โดยสามารถติดตามได้จากบทความดังนี้
- จากตัวอย่างข้างต้นเราพบว่า URL ถูกนำมาประมวลผลโดยทันทีโดยไม่มีการกรองคำสั่ง “file://” ตรงคำสั่ง “.loadUrl(localEditText.getText().toString());” ทำให้สามารถโจมตีช่องโหว่ ค้นหา Path คือ “Directory Traversal” และ “Local File Inclusion” ที่สามารถประมวลผลผ่าน “WebView” ได้
public class InputValidation2URISchemeActivity extends AppCompatActivity { public void get(View paramView) { EditText localEditText = (EditText)findViewById(2131492993); ((WebView)findViewById(2131492995)).loadUrl(localEditText.getText().toString()); } protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130968609); ((WebView)findViewById(2131492995)).getSettings().setJavaScriptEnabled(true); } }
- ในส่วนของที่สามารถอ่านไฟล์ได้จากโฟลเดอร์ “sdcard” เนื่องมาจากโปรแกรมดังกล่าวมีการให้สิทธิดังกล่าว โดยเราสามารถตรวจสอบได้จากวิธีการดังต่อไปนี้
- จากการตรวจสอบพบว่าให้สิทธการเขียนและอ่านบนโฟลเดอร์ “sdcard”