找回密码
 立即注册
首页 业界区 安全 Android四大组件安全漏洞实战

Android四大组件安全漏洞实战

辈霖利 2025-9-28 18:03:49
Android 四大组件Activity、Service、Broadcast Receiver和Content Provider是应用程序的核心组成部分,但如果实现不当,会引入严重的安全漏洞。本文将详细分析各组件常见的安全漏洞,通过漏洞代码逻辑基于 drozer 的利用方式,能够更清楚的了解具体漏洞的原理以及利用方法。
具体droze的下载和安装不详细介绍,可以自行百度,安装完成后先在android端运行drozer agent,点击开启。
[img=500,865.990990990991]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/ef585614-0bd1-4d1f-bf20-c816dbc1295b.png[/img]

在电脑端通过adb实现端口转发,并成功启动drozer
  1. adb forward tcp:31415 tcp:31415
  2. drozer console connect
复制代码
[img=720,324.64285714285717]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/b32b5140-5d84-4351-9ac1-2670e2608bfd.png[/img]

通过app.package.list的filter参数过滤alan关键词的包名称
  1. run app.package.list --filter alan
复制代码
[img=720,79.64601769911505]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/eec2e003-8f13-44e7-be47-bf0eaa238a2e.png[/img]

查询该app的包信息
  1. run app.package.info -a com.asec.alan
复制代码
[img=720,340.7142857142857]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/5648aa39-ac93-4018-a752-b2319fa72cdd.png[/img]

利用app.package.attacksurface可以查询该APP的攻击面,即漏洞的点和数量。
  1. run app.package.attacksurface com.asec.alan
复制代码
[img=720,163.28571428571428]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/19acac84-262c-4576-96cf-d40e01e6d100.png[/img]

完成上述的操作后,即可对相关的漏洞进行检测分析了,接下来针对具体的组件和漏洞进行测试操作。
【----帮助网安学习,以下所有学习资料免费领!加vx:YJ-2021-1,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
一、Activity
Activity 作为 Android 的界面组件,负责与用户交互,其安全问题直接影响用户数据安全。
1、未授权访问漏洞

需要登录权限的 Activity 未做严格校验,导致恶意应用可直接通过 Intent 启动。
通过以下drozer命令可以查看当前app的所有activity,并确认无权限限制
  1. run app.activity.info -a com.asec.alan
复制代码
[img=720,285.0557620817844]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/322b4aef-2231-497a-8942-b444b1daf6f6.png[/img]

对于这些activity的执行逻辑属于
LoginActivity登录->MainActivity->InfoQueryActivity
1.webp

 
2.webp

 
3.webp

LoginActivity登录->MainActivity->FileQueryActivity
4.webp

 
5.webp

 
6.webp

1)漏洞代码

以下为具体的代码,以LoginActivity登录->MainActivity->InfoQueryActivity场景为例,可以看到首先LoginActivity以硬编码的形式进行用户密码的判断,并使用SharePreference进行了登录态的存储
[img=720,621.6428571428571]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/e2ad2f8b-392a-46c3-8c03-0c061f50d9d7.png[/img]

当用户密码登录成功后即可跳转MainActivity,MainActivity对登录态简单做了校验,确认其中的is_logged_in的值存在即可加载。
[img=720,383.14285714285717]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/dffd3274-8a9d-46cc-8f03-31d1770ce07e.png[/img]

通过MainActivity跳转到InfoQueryActivity直接进行点击事件的监听跳转
[img=720,627.4285714285714]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/362bd897-4eae-47bd-8f68-e481320cb4eb.png[/img]

该acitivity直接加载,未进行登录态的校验
7.png

通过上述APP代码的分析,可以判断出MainActivity的加载做了简单的登录态校验,但是如果已经登录过,且登录态写入到user_prefs.xml中后,只要不进行删除即可直接通过命令加载成功实现绕过;InfoQueryActivity的加载并未做任何校验,可以尝试直接进行加载。
2)漏洞利用

MainActivity加载:
基于上述代码逻辑的分析,接下来通过drozer命令进行利用测试,如果已经登录过APP,则在该程序目录会生成user_prefs.xml文件,里面会写入"is_logged_in"的值为true
[img=720,254.57142857142858]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/ce706948-1a6f-40e8-946d-b7c6cf6f1681.png[/img]

MainActivity的加载可直接通过drozer命令加载
  1. run app.activity.start --component com.asec.alan com.asec.alan.MainActivity
复制代码
[img=720,35.357142857142854]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/08e2d90b-7c28-45c0-a6ff-69993d2ad250.png[/img]

执行后成功记载MainActivity
[img=720,405.9]https://www.yijinglab.com/headImg.action?news=4e9ccd44-d64b-49c6-adf9-aaafaf759e3e.png[/img]

删除user_prefs.xml文件,再利用drozer命令尝试加载MainActivity则失败
[img=720,199.91951710261569]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/f76e56c6-fbc1-4a01-a658-085295e97969.png[/img]

[img=720,37.92857142857143]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/d5d1da6c-cfbb-43a6-900f-7f3860c4125d.png[/img]

[img=500,840.983606557377]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/94a5e614-7670-43b7-94df-d677d7a10e74.png[/img]

InfoQueryActivity加载:
InfoQueryActivity则通过app.activity.start命令直接加载即可。
  1. run app.activity.start --component com.asec.alan com.asec.alan.InfoQueryActivity
复制代码
[img=720,46.285714285714285]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/6e2bda90-1a33-4ab4-a367-cfa387309740.png[/img]

[img=720,360.9899175068744]https://www.yijinglab.com/headImg.action?news=38c168c6-f7e7-4fdd-b424-46edc13b6b07.png[/img]

3)修复建议
二、Service

Service 用于后台处理任务,若存在漏洞可能导致敏感操作被恶意调用。
新建一个用于漏洞测试的service,并写入一些漏洞的逻辑
[img=720,693.6428571428571]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/d4764c43-15c3-42dc-950c-fa1c85535ae2.png[/img]

service组件运行导出
[img=720,120.26373626373626]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/f4344951-8fcd-46fd-9c11-932b26ce5c95.png[/img]

通过drozer命令可以查询支持导出的service组件信息,支持导出则可能存在对应的漏洞。
  1. run app.service.info -a com.asec.alan
复制代码
[img=720,110.57142857142857]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/954bc271-155a-4f07-9e73-13cbe3d01dca.png[/img]

1、任意文件写入漏洞

在 Android Service 场景中,当服务接收外部传入的文件路径参数并直接用于文件写入操作时,覆盖应用自身关键文件(配置文件、数据库等),导致应用的使用或者安全风险问题。
1)漏洞代码

当 Service 处理"com.asec.alan.ACTION_WRITE_FILE"动作时,会从 Intent 中直接读取filePath参数及需要写入的内容,并通过writeToFile()方法写入内容。但是writeToFile()直接使用传入的filePath创建File对象,未检查路径是否限制在应用私有目录
[img=720,716.1428571428571]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/6dd6ec7a-2a04-445e-a1f5-7843a6a23e77.png[/img]

2)漏洞利用

通过drozer命令向/data/data/com.asec.alan/写入drozer_test.txt文件,文件内容为Test from drozer
  1. run app.service.start --action com.asec.alan.ACTION_WRITE_FILE --component com.asec.alan com.asec.alan.VulnerableService --extra string file_path "/data/data/com.asec.alan/drozer_test.txt" --extra string content "Test from drozer"
复制代码
[img=720,25.714285714285715]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/f3083d25-f332-42f8-ba0c-75163492fbca.png[/img]

利用adb shell连接android系统,切换为root权限后查看drozer_test.txt的存在和内容
  1. adb shell
  2. su
  3. ls /data/data/com.asec.alan/drozer_test.txt
  4. cat /data/data/com.asec.alan/drozer_test.txt
复制代码
[img=720,159.42857142857142]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/7011e2ba-4dea-436c-be33-0f1f8c1769f3.png[/img]

2、敏感信息泄露漏洞

敏感信息泄露指应用在运行过程中,将不应公开的敏感数据(如密码、密钥、令牌等)以明文形式存储、传输或输出,导致未授权主体可获取这些信息。
1)漏洞代码

当 Service 处理"com.asec.alan.ACTION_GET_SECRET"动作时,getSensitiveInformation()方法会返回包含数据库密码、API 密钥等核心敏感数据,并通过Log.d()输出到系统日志
[img=720,793.9285714285714]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/24d565ca-17a0-4f9c-8fc8-91a78b91f0e8.png[/img]

[img=720,222.42857142857142]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/2b8235cc-017e-4393-bec3-3a96f5cb12c0.png[/img]

2)漏洞利用

利用drozer命令启动com.asec.alan com.asec.alan.VulnerableService服务
  1. run app.service.start --action com.asec.alan.ACTION_GET_SECRET --component com.asec.alan com.asec.alan.VulnerableService
复制代码
[img=720,25.071428571428573]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/b25a9d4a-96e4-4379-81b5-fafd0518ac5c.png[/img]

通过adb的logcat查看对应的日志,成功打印出对饮的敏感数据。
  1. adb logcat VulnerableService:D *:S
复制代码
[img=720,73.28571428571429]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/57210b0e-e57b-455d-8778-2651bc9537bb.png[/img]

三、Broadcast Receiver

Broadcast Receiver 用于接收系统或应用间的广播,若实现不当会导致信息泄露或恶意调用。
1、伪造恶意广播漏洞

Receiver 未验证广播发送者身份,恶意应用可伪造广播触发敏感操作。
1)漏洞代码

该接收器未对广播发送者的身份进行任何验证,任何应用都可以发送com.asec.alan.ACTION_SENSITIVE_OPERATION动作的广播来触发其逻辑。并通过performSensitiveOperation方法执行敏感操作,测试使用Toast在界面弹窗展示,但整个调用链都没有权限检查机制。
[img=720,667.2857142857143]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/78cb9c84-abbd-4824-8554-e4eeb57b48a1.png[/img]

[img=720,208.92857142857142]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/7a473034-8638-4286-a21b-6df995dfe014.png[/img]

2)漏洞利用

利用drozer伪造恶意广播并触发该接收器
  1. run app.broadcast.send --action com.asec.alan.ACTION_SENSITIVE_OPERATION --component com.asec.alan com.asec.alan.VulnerableReceiver --extra string operation "test" --extra string data "test"
复制代码
[img=720,30.214285714285715]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/30208240-778a-468f-b16e-466f75871adf.png[/img]

通过界面可以查看到对应的广播信息
[img=500,845.0134770889488]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/48d227e9-5de9-476a-92a3-d604d730b4ea.png[/img]

四、Content Provider

Content Provider 用于数据共享,是最容易出现安全问题的组件,常见漏洞包括信息泄露、SQL 注入和目录遍历。
1、信息泄露漏洞

Content Provider 未限制访问权限,导致应用内敏感数据(如用户信息、数据库)可被任意读取。
1)漏洞代码:

通过该代码可以发现,未检查调用者是否有读取权限,可以直接调用sql进行数据的查询。
8.png

9.png

[img=720,134.35714285714286]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/eacac80a-6506-4d19-894e-4f3c2ce85438.png[/img]

2)漏洞利用

利用drozer命令可以查看该APP的provider的信息
  1. run app.provider.info -a com.asec.alan
复制代码
[img=720,158.78571428571428]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/0082b816-585d-4e71-96d7-c0f9e6495159.png[/img]

利用app.provider.finduri可以查看所有的uri
  1. run app.provider.finduri com.asec.alan
复制代码
[img=720,149.78571428571428]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/f882b977-0c90-4865-ad54-fe75eba38bcf.png[/img]

通过drozer查询content://com.asec.alan.provider/该uri的数据
  1. run app.provider.query content://com.asec.alan.provider/
复制代码
[img=720,171.64285714285714]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/9c0976fa-42dd-4ba7-a13f-61226ff40d0a.png[/img]

2、SQL 注入漏洞

Content Provider 在处理查询时直接拼接 SQL 语句,未使用参数化查询,导致 SQL 注入。
1)漏洞代码

通过代码发现将selection参数直接拼接进 SQL 查询字符串,未使⽤参数化查询或输⼊净化,完全信任外部输⼊。并且忽略了selectionArgs参数,该参数本应⽤于安全传递查询参数,调⽤rawQuery时未使⽤参数绑定功能,⽽是传递null。
[img=720,676.9285714285714]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/af0ebdf4-fcf1-4840-bbd9-c0a1159bef10.png[/img]

2)漏洞利用

利用drozer的scanner.provider.injection可以查询该APP的Content Provider存在的SQL注入
  1. run scanner.provider.injection -a com.asec.alan
复制代码
[img=720,217.28571428571428]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/04a94132-6870-4511-9fd5-20c4af8ecf9c.png[/img]

基于sql注入漏洞的测试和利用,通过order by进行显示位的判断
  1. run app.provider.query content://com.asec.alan.provider/ --selection "1=1 order by 2"
  2. run app.provider.query content://com.asec.alan.provider/ --selection "1=1 order by 3"
  3. run app.provider.query content://com.asec.alan.provider/ --selection "1=1 order by 4"
复制代码
[img=720,164.57142857142858]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/aa2d8a8e-0240-407f-b40e-ed636b3115bc.png[/img]

并进行username和password数据的查询。
  1. run app.provider.query content://com.asec.alan.provider/ --selection "1=1 UNION SELECT 1,username,password FROM users--"
复制代码
[img=720,79.71428571428571]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/08d66276-2aa4-43c8-8ac8-9499566c555b.png[/img]

3、目录遍历漏洞

Content Provider 的openFile()方法未验证文件路径,导致攻击者可访问应用沙盒外的任意文件。
1)漏洞代码

代码中使用uri.getEncodedPath()获取路径,未处理../或..\等路径跳转符,用户可控的uriPath直接与基础目录baseDir拼接,并没有对访问的文件类型、路径范围进行权限校验。
[img=720,465.42857142857144]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/bc611513-4207-48f6-b5e5-9cd8aefdb3d6.png[/img]

2)漏洞利用

利用drozer的scanner.provider.traversal对目录遍历漏洞进行检测,发现对应的uri
  1. run scanner.provider.traversal -a com.asec.alan
复制代码
[img=720,183.21428571428572]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/7e1758c1-fd73-47e5-a902-9b35d5fa18db.png[/img]

并成功查询/system/etc/hosts文件内容
  1. run app.provider.read content://com.asec.alan.provider/../../../../system/etc/hosts
复制代码
[img=720,57.214285714285715]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/fe807aa8-d0c9-4e80-95c2-d58c57ef3507.png[/img]

本文利用drozer工具基于该APP的测试和操作,其实对于android app的组件漏洞的测试还有很多方法,通过其对四大组件的系统性检测,可有效发现权限控制缺失、输入验证不足等高危漏洞。在实际测试中,需结合静态代码分析(如查看 AndroidManifest.xml 的组件配置)与 Drozer 的动态交互测试,形成 "静态枚举 + 动态验证" 的闭环,才能全面评估组件的安全状态,为漏洞修复提供精准依据。
APP地址: https://pan.baidu.com/s/1l1thGur7wmMBXLWivqW6cg?pwd=4ggk
提取码: 4ggk
更多网安技能的在线实操练习,请点击这里>>
  

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册