.. | ||
exploiting-content-providers.md | ||
README.md |
Drozer 튜토리얼
htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가 수준까지 배우세요 !!
HackTricks를 지원하는 다른 방법:
- 회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스왜그를 구매하세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 Discord 그룹 또는 telegram 그룹에 가입하거나 Twitter 🐦 @carlospolopm을 팔로우하세요.
- 해킹 팁을 공유하려면 HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하세요.
버그 바운티 팁: 해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼인 Intigriti에 가입하세요! https://go.intigriti.com/hacktricks에서 오늘 가입하고 최대 $100,000의 바운티를 받아보세요!
{% embed url="https://go.intigriti.com/hacktricks" %}
테스트할 APKs
이 튜토리얼의 일부는 Drozer 문서 pdf에서 추출되었습니다.
설치
호스트에 Drozer 클라이언트를 설치하세요. 최신 릴리스에서 다운로드하세요.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
최신 릴리스에서 drozer APK를 다운로드하고 설치합니다. 현재 이 링크에서 다운로드할 수 있습니다: 여기.
adb install drozer.apk
서버 시작
에이전트는 포트 31415에서 실행 중이며, Drozer 클라이언트와 에이전트 간의 통신을 확립하기 위해 포트 포워딩이 필요합니다. 다음은 그 명령어입니다:
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는 실행할 exploits를 생성할 수 있습니다. drozer exploit list |
payload | exploits에는 페이로드가 필요합니다. 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
Manifest를 읽으세요:
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
- Activities: 어떤 종류의 권한을 우회하여 활동을 시작할 수 있습니다.
- Content providers: 개인 데이터에 액세스하거나 취약점 (SQL Injection 또는 경로 탐색)을 악용할 수 있습니다.
- Services:
- is debuggable: 자세히 알아보기
Activities
AndroidManifest.xml 파일에서 내보낸 활동 구성 요소의 "android:exported" 값이 **"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
액티비티 시작:
어쩌면 액티비티를 시작하고, 시작을 방지해야 하는 어떤 종류의 권한을 우회할 수 있을지도 모릅니다.
{% code overflow="wrap" %}
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
{% endcode %}
adb를 사용하여 내보낸 활동을 시작할 수도 있습니다:
- PackageName은 com.example.demo입니다
- 내보낸 ActivityName은 com.example.test.MainActivity입니다
adb shell am start -n com.example.demo/com.example.test.MainActivity
콘텐츠 제공자
이 게시물은 여기에 있을 정도로 크기가 컸으므로 자체 페이지에서 액세스할 수 있습니다.
서비스
내보낸 서비스는 Manifest.xml 내에서 선언됩니다:
{% code overflow="wrap" %}
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
{% endcode %}
코드 내부에서 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
브로드캐스트 수신기
Android 기본 정보 섹션에서 브로드캐스트 수신기가 무엇인지 확인할 수 있습니다.
이 브로드캐스트 수신기를 발견한 후에는 그들의 코드를 확인해야 합니다. 수신된 메시지를 처리할 onReceive
함수에 특별히 주의를 기울여야 합니다.
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!"
디버그 가능 여부
프로덕션 APK는 절대 디버그할 수 없어야 합니다.
이는 실행 중인 애플리케이션에 자바 디버거를 연결하여 검사하고, 실행 중에 중단점을 설정하고, 단계별로 진행하고, 변수 값을 수집하고 심지어 변경할 수 있음을 의미합니다. InfoSec institute에는 훌륭한 기사가 있습니다. 애플리케이션이 디버그 가능하고 런타임 코드를 삽입할 때 더 깊이 파고들 수 있습니다.
애플리케이션이 디버그 가능한 경우 Manifest에 나타납니다:
<application theme="@2131296387" debuggable="true"
Drozer를 사용하여 모든 디버깅 가능한 애플리케이션을 찾을 수 있습니다:
run app.package.debuggable
튜토리얼
- 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
추가 정보
버그 바운티 팁: Intigriti에 가입하여 해커들이 만든 프리미엄 버그 바운티 플랫폼에 가입하세요! https://go.intigriti.com/hacktricks에서 오늘 가입하고 최대 $100,000의 바운티를 받아보세요!
{% embed url="https://go.intigriti.com/hacktricks" %}
제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team Expert)!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 스왜그를 얻으세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 디스코드 그룹 또는 텔레그램 그룹에 가입하거나 트위터 🐦 @carlospolopm를 팔로우하세요.
- HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.