How to exploit Directory Traversal – INPUT VALIDATION ISSUES – PART2

บทนำ (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)

  1. ติดตั้งโปรแกรมช่องโหว่ “DIVA” สามารถติดตามวิธีการติดตั้งได้ที่ How to install DIVA (android)
  2. จากนั้นเข้าไปที่เมนู “8. INPUT VALIDATION ISSUES – PART2” DIVAandroid-input-part2-01
  3. วัตถุประสงค์คือเราจะต้องเข้าถึงไฟล์ระบบหรือ ไฟล์ใดๆ ที่มีความสำคัญโดยผ่านช่อง “URL” ดังกล่าว ทดลองกรอกเว็บไซต์ http://itselectlab.comDIVAandroid-input-part2-02
  4. ทดลองใส่ค้นหาไฟล์ในเครื่องโดยใช้ “file:///etc/hosts” DIVAandroid-input-part2-03
  5. ทดลองเข้าโฟลเดอร์ /sdcard (*ไฟล์ดังกล่าวถูกสร้างมาจากโปรแกรมช่องโหว่ Insecure Bank)DIVAandroid-input-part2-04
  6. เราพบว่าสามารถเข้าถึงระบบไฟล์ได้โดยผ่าน “Webview Controller” ดังนั้นเราลองมาตรวจสอบกันว่าเกิดจากช่องโหว่อะไร
  7. ให้ทำการ “Reverse Engineering” โปรแกรมเพื่อตรวจสอบ “Source-code” โดยสามารถติดตามได้จากบทความดังนี้
  8. จากตัวอย่างข้างต้นเราพบว่า 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);
      }
    }
    
    
  9. ในส่วนของที่สามารถอ่านไฟล์ได้จากโฟลเดอร์ “sdcard” เนื่องมาจากโปรแกรมดังกล่าวมีการให้สิทธิดังกล่าว โดยเราสามารถตรวจสอบได้จากวิธีการดังต่อไปนี้
  10. จากการตรวจสอบพบว่าให้สิทธการเขียนและอ่านบนโฟลเดอร์ “sdcard” DIVAandroid-input-part2-06

 

ใส่ความเห็น