EYEN
DIVA 10단계 본문
#1 문제 분석
가. 목적
앱 외부에서 api credentials에 pin없이 접근해보자
#2 취약점 정보
가. 취약점
<activity> 내의 <intent-filter>로 보호하면 안 된다.
intent-filter 를 적용하면 exported가 true가 되어서 VIEW_CREDS2를 외부에서 접근할 수 있게 된다.
view creds2는 저 Tveeter API credentials를 띄우는 action
액티비티 jakhar.aseem.diva.APICreds2Activity 에 속한다.
그래서 저 VIEW_CREDS2를 하려면
am(activity manager) start(시작) -n(액티비티 경) jakhar.aseem.diva/.APICreds2Activity -a(액션) jakhar.aseem.diva.action.VIEW_CREDS2
위 코드를 보면 chk_pin이 true면 bcheck이 false가 되어 credential이 출력되지 않고, false면 bcheck가 true가 되어 출력됨을 알 수 있다.
chk_pin
으로 적용하면 안 된다. 왜 안 되는가.
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
이하 시행착오
bcheck chk_pin check_pin
왜 bcheck이랑 chk_pin 은 안 되고 check_pin만 되는가.
adb 명령어는 nox와 상호작용하는것, adb shell에서 볼 수 있는 건 외부 저장소.
위 명령어는 액티비티 안의 VIEW_CREDS2 를 켤 때 어떤 키의 value를 바꿔주는 명령어이다.
아 왜와이. 실제 값이라서? 근데 chk_pin으로 선언했는데..
#3 코드 분석
1.
i.putExtra(getString(R.string.chk_pin), chk_pin);
리소스파일에서 chk_pin인 문자열 리소스의 값을 가져오는 역할을 한다. check_pin을 가져오는거였던.!
chk_pin 변수의 값을 인텐트에 추가
2.
if (i.resolveActivity(getPackageManager()) != null) {
resolveActivity 처리할 수 있는 액티비티를 찾아서 반환. getPackageManager는 현재 애플리케이션의 패키지 매니저 가져옴
packageManager: 애플리케이션 실행 가능 여부 확인, 애플리케이션 구성 요소 시작 등
3.
boolean bcheck = i.getBooleanExtra(getString(R.string.chk_pin), true);
아 R에 있는 chk_pin변수에서 정의된 문자열 리소스의 값을 가져오는 코드이다. 그니까 chk_pin
이렇게 되어있으니까 boolean value를 갖고 있는 건 check_pin인거임
true는 값이 없을 때 기본 값.
4.
pintext.setVisibility(0);
pintext라는 이름의 뷰를 보이도록 만든다.
5.
setContentView(R.layout.activity_apicreds2);
현재 액티비티의 레이아웃을 지정된 레이아웃 파일인 "activity_apicreds2.xml"로 설정