0.Content Provider란?
Android에서 앱 간 데이터 공유를 위해 제공되는 컴포넌트이다.
앱의 데이터베이스(SQLite), 파일, 네트워크 데이터 등을 다른 앱과 공유할 때 사용된다.
주로 [content://] 스키마를 사용하여 URI 형태로 접근한다.
즉 데이터베이스 느낌이라고 생각하면 편할듯하다.
0-1.Content Provider의 기본 구조
Content Provider는 [content://] URI를 사용하여 데이터를 읽고 쓴다.
예를 들자면 Contacts 앱에서 연락처 데이터를 제공하는 URI는 이런 식으로 표현된다.
content://com.android.contacts/contacts
이를 통해서 다른 앱이 데이터에 접근할 수 있다.
0-2.Content Provider의 주요 메서드
| 메서드 | 설명 |
| query() | 데이터 조회 (SELECT) |
| insert() | 데이터 삽입 (INSERT) |
| update() | 데이터 수정 (UPDATE) |
| delete() | 데이터 삭제 (DELETE) |
1.취약한 Content Provider 분석

명령어 : run app.provider.info -a com.android.insecurebankv2
run app.provider.info -> 앱의 Content Provider 정보를 조회하라는 명령
-a com.android.insecurebankv2 -> 패키지(앱) 대상
출력 내용 분석
Package: com.android.insecurebankv2
-> 앱의 Content Provider 정보를 확인한 결과 ~
Authrity: com.android.insecurebankv2.TrackUserContentProvider
-> Authority [고유 식별자] (URI 형식으로 접근 가능하다)
Read Permission: null -> 읽기 권한 제한이 없음 (모든 앱이 읽을수 있음)
Write Permission: null -> 쓰기 권한 제한이 없음 (모든 앱이 쓸 수 있음)
Content Provider: com.android.insecurebankv2.TrackContentProvider -> 실제 클래스 이름
Multiprocess Allowed: False -> 여러 프로세스에서 동시 접근이 제한됨 (딱히 의미 없음)
Grant Uri Permissions: False -> 다른 앱이 특정 URI에 대해 임시 권한을 얻는 기능이 비활성화됨
이런 식으로 정리를 할 수 있다.
2. 취약한 Content Provider 접근
데이터 조회를 하기 위해 앞서 경로를 먼저 파악해야 한다.
2-1.table 경로 찾기 [finduri]

run app.provider.finduri -a com.android.insecurebankv2
finduri를 통해서 insecurebankv2에 대한 경로를 파악했다.
trackusers에 대해서 먼저 확인해 보자.
2-2. 데이터 조회 [query]

run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
query를 이용해서 trackerusers에 대한 데이터 조회를 총 2번에 jack으로 로그인했던 기록들이 나왔다.
2-3.SQL injection

run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/ --projection "* from SQLITE_MASTER where type='table';--"
injection 된 쿼리는 sqlite_master 테이블에서 type 이 table 인 모든 항목을 조회한다 즉 데이터베이스에 있는 모든 테이블 목록을 반환시키는 명령이다. [위험]
names에 대해서 추가적인 공격인 발생할 수도 있다. -> 사용자 정보 관리 [insert] <위험>
3. 해결방안?
1.Content Provider -> exported="false"
-> 외부 앱 허용 X
2. 입력 데이터 검증
->정규식 검증을 통해 허용된 값만 받는 것도 괜찮을듯하다.
3.android:permission -> 권한 설정
그나마 하기 쉬운 방안들이 이 정도인듯하다.
'Mobile_security > Drozer_Android' 카테고리의 다른 글
| 4.Drozer 실습 (Insecurebankv2) - Broadcast Receiver (1) | 2025.02.10 |
|---|---|
| 2.Drozer 실습 (InsecureBankv2) - activity (0) | 2025.02.05 |
| 1.Drozer 기초 (이론 + 실습) (0) | 2025.02.01 |