2016年8月26日 星期五

DIVA Android - 10.Access Control Issues – Part 2

相關文章:

DIVA Android - 1.Insecure Logging
DIVA Android - 2.Hardcoding Issues – Part 1
DIVA Android - 3.Insecure Data Storage – Part 1
DIVA Android - 4.Insecure Data Storage – Part 2
DIVA Android - 5.Insecure Data Storage – Part 3
DIVA Android - 6.Insecure Data Storage – Part 4
DIVA Android - 7.Input Validation Issues – Part 1
DIVA Android - 8.Input Validation Issues – Part 2
DIVA Android - 9.Access Control Issues – Part 1
DIVA Android - 10.Access Control Issues – Part 2
DIVA Android - 11.Access Control Issues – Part 3
DIVA Android - 12.Hardcoding Issues – Part 2
DIVA Android - 13.Input Validation Issues – Part 3

「10.Access Control Issues – Part 2」對應到的 Activity 是 AccessControl2Activity,看一下 code 長這樣:



首先建立一個隱式的 Intent,並透過 setAction 定義 Action 的名稱為「jakhar.aseem.diva.action.VIEW_CREDS2」,然後利用 RadioButton 去判斷使用者是否已選擇 id 為「aci2rbregnow」的選項,並把該狀態賦予 chk_pin。

接著看一下AndroidManifest.xml中的「jakhar.aseem.diva.action.VIEW_CREDS2」,會發現它所對應的 Activity 為「APICreds2Activity」,所以可得知當程式 startActivity 時會去呼叫這隻 APICredsActivity。


不過在呼叫之前,剛剛的 chk_pin 會透過 putExtra 將狀態賦予給 R.String.chk_pin。





接著看這隻 APICreds2Activity,可以看到 bcheck 的值若為 false,則會吐出我們要的資訊。往回追一下,bcheck 被透過 getBooleanExtra,將 R.String.chk_pin 的值設為 true。

所以很明顯的,我們需要去改變 bcheck 的輸出,而既然必須不透過此 App 去啟動指定的 component,那下手的點,就是 R.String.chk_pin 的預設值。



翻一下 strings.xml,可看到 R.String.chk_pin 所對應的值為 check_pin。



那就開始了:adb shell am start -n jakhar.aseem.diva/.APICreds2Activity –-ez check_pin false



理論上 ez 參數沒下錯,不過不知為什麼我的 ez 參數會被當成 pkg(若有大大知道原因還請指教)。

後來索性直接用 drozer 跑就行了:run app.activity.start --component jakhar.aseem.diva jakhar.aseem.diva.APICreds2Activity --extra boolean check_pin false



弱點在於使用隱式 Intent 這種方式由於未指定 component 的名稱,並且須在AndroidManifest.xml 設定 intent-filter,便可讓其他應用程式使用它。

防範方法:

(1)使用顯式 Intent,確保不會遭其他 App 存取。

(2)不該 exported 的 component 應設為 false。

1 則留言:

  1. 老哥,你的那个 --ez 前一个 - 长一点。。。

    回覆刪除