EYEN

DIVA 10단계 본문

Wargame/android

DIVA 10단계

EYEN 2024. 5. 4. 11:30

#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"로 설정

 

 

'Wargame > android' 카테고리의 다른 글

DIVA 12단계  (0) 2024.05.07
DIVA 11단계  (0) 2024.05.07
DIVA 9단계  (0) 2024.05.04
DIVA 8단계  (0) 2024.05.03
DIVA 7단계  (0) 2024.05.02