뉴비에욤

[안드로이드 APK 진단] DIVA - 10.접근 제어 부재 파트 2 본문

Android_Vuln

[안드로이드 APK 진단] DIVA - 10.접근 제어 부재 파트 2

초보에욤 2017. 10. 18. 11:24

10번 문제, "10. ACCESS CONTROL ISSUES - PART 2"를 클릭한다.


목표를 보면 Tveeter에 등록을 하고 나면 TVEETER API 자격 증명을 얻을 수 있다고 한다. 이 앱은 온라인 등록을 해야 하는데, 벤더가 핀 코드를 주면 해당 핀 코드를 이용해서 등록해야 한다.

우리의 목표는 핀 코드를 모르는 상태에서 앱 바깥에서 API 자격 증명을 얻는 것으로, 비즈니즈 로직 문제이기 때문에 코드를 봐야한다고 한다.


Register Now를 선택하고 VIEW TVEETER API CREDENTIALS 버튼을 클릭한다.


등록을 시도하면 핀 코드를 입력하라고 한다.


임의의 핀 코드를 입력하면 잘못된 코드라는 메시지가 나타난다.


Already Registered를 선택하고 API 자격 증명에 접근한다.


이미 등록 된 상태라면 API 자격 증명을 얻을 수 있다.


Manifiest.xml 파일을 보면 이번 문제와 관련 된 액티비티는 2개임을 볼 수 있다.

   > AccessControl2Activity

   > APICreds2Activity


AccessControlActivity 코드를 보면 부울린 데이터 타입의 v0 변수가 인텐트 v1과 함께 사용 된다.


APICreds2Activity 코드를 보면 어떤 조건이 거짓(제일 앞에 NOT을 뜻하는 느낌표가 있고, true와 비교, 즉 거짓)일 경우 API 자격 증명에 접근할 수 있게 된다.

   > JEB를 통한 디컴파일은 제대로 된 변수명을 보여주지 않기 때문에 DIVA 앱의 소스 코드를 통해 확인해야 한다.


실제 소스 코드의 APICreds2Activity.java 파일을 보면 위 사진과 같은데 부울린 타입의 변수명이 bheck 임을 볼 수 있는데 R.string.chk_pin과 관련되어 있는 듯 하다.


소스 코드 폴더에서 values/string.xml을 보면 위 사진과 같이 chk_pin은 실제로 check_pin을 의미함을 볼 수 있다.

즉, 정리하자면 check_pin 변수가 false 라면 API 자격증명을 얻을 수 있따는 뜻이다.


기존 레벨에서 사용했던 코드를 그대로 사용하되, "--ez" 옵션을 사용하여 check_pin 변수를 false 상태로 실행하면 API 자격 증명을 앱을 실행하지 않고 볼 수 있다.

Comments