Drozer Tutorial
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
버그 바운티 팁: Intigriti에 가입하세요, 해커를 위해 해커가 만든 프리미엄 버그 바운티 플랫폼입니다! 오늘 https://go.intigriti.com/hacktricks에서 저희와 함께하고 최대 $100,000의 보상을 받기 시작하세요!
테스트할 APK
Sieve (mrwlabs에서)
이 튜토리얼의 일부는 Drozer 문서 pdf에서 발췌되었습니다.
설치
호스트 내에 Drozer 클라이언트를 설치하세요. 최신 릴리스에서 다운로드하세요.
drozer APK를 최신 릴리스에서 다운로드하고 설치하세요. 현재는 이것입니다.
서버 시작하기
Agent는 포트 31415에서 실행되고 있으며, Drozer Client와 Agent 간의 통신을 설정하기 위해 포트 포워딩을 해야 합니다. 다음은 이를 수행하는 명령어입니다:
마지막으로, 애플리케이션을 실행하고 하단의 "ON"을 누릅니다.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F311514708-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F1ImEu59kE9yiIA7SmB7z%252Fuploads%252Fgit-blob-ab1786558a7b9d62724edd85419268e3c891bad5%252Fimage%2520%28459%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=992d469d&sv=1)
그리고 연결합니다:
Interesting Commands
Commands | Description |
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는 장치에서 실행할 수 있는 익스플로잇을 생성할 수 있습니다. |
payload | 익스플로잇에는 페이로드가 필요합니다. |
Package
패키지의 이름을 이름의 일부로 필터링하여 찾습니다:
패키지의 기본 정보:
읽기 Manifest:
패키지의 공격 표면:
활동: 아마도 활동을 시작하고 이를 실행하는 것을 방지해야 하는 어떤 종류의 권한 부여를 우회할 수 있을 것입니다.
콘텐츠 제공자: 아마도 개인 데이터에 접근하거나 일부 취약점(SQL Injection 또는 Path Traversal)을 악용할 수 있을 것입니다.
서비스:
is debuggable: 자세히 알아보기
활동
내보내기된 활동 구성 요소의 “android:exported” 값이 AndroidManifest.xml 파일에서 **“true”**로 설정되어 있습니다:
내보낸 활동 목록:
활동 시작:
어쩌면 활동을 시작하고 이를 실행하는 것을 방지해야 하는 어떤 종류의 권한 부여를 우회할 수 있습니다.
adb에서 내보낸 활동을 시작할 수도 있습니다:
패키지 이름은 com.example.demo입니다.
내보낸 활동 이름은 com.example.test.MainActivity입니다.
Content Providers
이 게시물은 여기에서 너무 커서 여기에서 자체 페이지에 액세스할 수 있습니다.
Services
내보낸 서비스는 Manifest.xml 내에 선언됩니다:
코드 안에서 check는 메시지를 받는 **handleMessage
** 함수를 확인합니다:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F311514708-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F1ImEu59kE9yiIA7SmB7z%252Fuploads%252Fgit-blob-f20e8ce2fc518cd80eb4ba6d3cc92921b98557d8%252Fimage%2520%2882%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=daded9e2&sv=1)
서비스 목록
서비스와 상호작용
예제
Take a look to the drozer help for app.service.send
:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F311514708-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F1ImEu59kE9yiIA7SmB7z%252Fuploads%252Fgit-blob-b1c5a1a13c3d409442ea29b8a82310be8e29b742%252Fimage%2520%281079%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b2c85da9&sv=1)
Note that you will be sending first the data inside "msg.what", then "msg.arg1" and "msg.arg2", you should check inside the code 어떤 정보가 사용되고 있는지 and where.
Using the --extra
option you can send something interpreted by "msg.replyTo", and using --bundle-as-obj
you create and object with the provided details.
In the following example:
what == 2354
arg1 == 9234
arg2 == 1
replyTo == object(string com.mwr.example.sieve.PIN 1337)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F311514708-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F1ImEu59kE9yiIA7SmB7z%252Fuploads%252Fgit-blob-6046bf9a80645bab7a7591101301a9288f4783d8%252Fimage%2520%28647%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=968428f6&sv=1)
Broadcast Receivers
안드로이드 기본 정보 섹션에서 Broadcast Receiver가 무엇인지 확인할 수 있습니다.
이 Broadcast Receivers를 발견한 후에는 코드를 확인해야 합니다. onReceive
함수에 특별히 주의하세요. 이 함수는 수신된 메시지를 처리합니다.
모든 broadcast receivers 감지
앱의 브로드캐스트 수신기 확인
브로드캐스트 상호작용
메시지 전송
이 예제에서는 FourGoats apk 콘텐츠 제공자를 악용하여 사용자의 허가 없이 임의의 SMS를 비프리미엄 목적지로 전송할 수 있습니다.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F311514708-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F1ImEu59kE9yiIA7SmB7z%252Fuploads%252Fgit-blob-deb8d0d388e9fdc2f306cc84d13e3b79c623ac01%252Fimage%2520%28415%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4c487d22&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F311514708-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F1ImEu59kE9yiIA7SmB7z%252Fuploads%252Fgit-blob-9fe1e166755bb71fc118787b447a1445b53eb4fd%252Fimage%2520%28573%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d6bdb2e&sv=1)
코드를 읽어보면, "phoneNumber"와 "message" 매개변수를 콘텐츠 제공자에게 전송해야 합니다.
Is debuggeable
생산 APK는 절대 디버깅 가능해서는 안 됩니다. 이것은 실행 중인 애플리케이션에 자바 디버거를 연결하고, 런타임에서 검사하고, 중단점을 설정하고, 단계별로 진행하며, 변수 값을 수집하고 심지어 변경할 수 있음을 의미합니다. InfoSec institute has an excellent article on digging deeper when you application is debuggable and injecting runtime code.
애플리케이션이 디버깅 가능할 때, 매니페스트에 나타납니다:
Drozer를 사용하여 모든 디버깅 가능한 애플리케이션을 찾을 수 있습니다:
Tutorials
More info
Bug bounty tip: 해킹하는 사람들을 위해 해커들이 만든 프리미엄 버그 바운티 플랫폼인 Intigriti에 가입하세요! 오늘 https://go.intigriti.com/hacktricks에서 저희와 함께하고 최대 $100,000의 보상을 받기 시작하세요!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated