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。
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。
老哥,你的那个 --ez 前一个 - 长一点。。。
回覆刪除