기술보안/Android

[DIVA-android] DIVA - 10. 입력 값 검증 부재 파트 2(INPUT VALIDATION ISSUES - PART 2)

kimcogi 2024. 2. 12. 20:21

DIVA 앱을 설치 후 실행하면 13개의 문제가 나오게 되는데 이 중 10번 문제인 입력 값 검증 부재 파트 2(INPUT VALIDATION ISSUES - PART 2) 문제를 클릭한다

 

문제를 들어가게 되면 API CREDENTIALS 정보를 볼 수 있는 창과 함께 아마 사용자 특정 정보(ex. PIN 번호)등을 이용한 계정 등록을 할 수 있는 버튼(Register Now)이 있으며, 목표에서는 Tveter에 온라인 등록을 하고 PIN 번호가 발급되어야 TVEETER API CREDENTIALS에 액세스 할 수 있다고 적혀있다

 

"Register Now" 버튼을 클릭한 후 "VIEW TVEETER API CREDENTIALS" 버튼을 클릭한다

 

PIN 번호를 입력하는 창이 존재하고, 임의의 PIN 번호(1234567890)을 입력해 본 결과 액세스 거부(Invalid PIN) 메시지가 나오는 것을 볼 수 있다

 

jadx를 이용하여 DIVA 앱의 "AndroidManifest.xml" 파일을 보면 10번 문제와 관련된 activity가 "intent-filter"로 보호되어 있음을 볼 수 있으며, 관련된 activity는 2개임을 알 수 있다
(AccessControl2Activity, APICreds2Activity)

 

"AccessControl2Activity"에 접근한 결과 "chk_pin" 변수가 "intent i"와 함께 사용되는 것을 볼 수 있으며, "VIEW_CREDS2"에 접근할 수 있도록 "setAction" 함수가 지정되어 있음을 알 수 있다

 

"APICreds2Activity"에 접근한 결과 "bcheck" 변수가 "chk_pin" 변수의 값을 String값으로 가져와 false 일 경우 getBooleanExtra()함수를 이용하여 TVEETER API Key값이 보이도록 되어있음을 알 수 있다

"bcheck"에 대한 조건식("!")이 걸려있음을 또한 알 수 있다

 

이전 9번 문제에서 사용했던 adb shell 명령어를 이용하여 해당 activity에 접근 시도를 한다
("chk_pin" 변수의 값이 false로 전달되게끔 옵션을 삽입한 후 activity 접근 시도) 

  • --ez 옵션 : am(Activity Manager)를 이용한 Intent 전송 시 사용되며, boolean extra값에 대한 값을 설정할 수 있음
    (String은 --es 옵션을 넣어주면 됨)

 

"--ez" 옵션을 이용한 Activity 접근 결과 PIN번호를 입력해야 TVEETER API CREDENTIALS에 액세스가 가능함을 확인

 

"chk_pin"에 대해 재확인을 해본 결과 "strings.xml" 파일 내 "chk_pin" 변수가 실제로는 "check_pin"을 의미한다는 것을 확인

 

adb 명령어를 수정하여 "chk_pin"이 아닌 "check_pin"변수에 대한 값이 false로 되게끔 하여 Activity 접근 시도

 

위 명령어를 이용하여 접근한 결과 외부에서 TVEETER API CREDENTIALS에 액세스가 가능함을 확인할 수 있다

반응형