Android APP Service组件常见漏洞

admin 2024年10月7日18:44:48评论17 views字数 2832阅读9分26秒阅读模式

目录

  • 发现导出Service
  • 消息伪造
  • 越权
  • 命令执行
  • 本地拒绝服务
  • 案例下载

Service是android四大组件之一,可以长时间的运行在后台。一个组件可以绑定到一个service来进行交互,即使这个交互是进程间通讯也没问题。Service不是分离开的进程,除非其他特殊情况,它不会运行在自己的进程,而是作为运行它的进程的一部分。Service不是线程,意味着它将在主线程里劳作。如果一个「导出的Service」没有做严格的限制,任何应用都可以去启动并绑定到这个Service上,「取决于被暴露的功能」, 这可以是一个应用去执行未授权的行为,获取敏感信息或污染修改内部应用的状态造成威胁。

发现导出Service

Service 做为 Android 的组件,必须要在 AndroidManifest.xml 中进行声明,同样也会分为导出与非导出的状态。

当满足以下条件之一的时候,Service 组件将是导出状态,可以被其他 APP 调用:

  • 显式设置了 android:exported="true" (当 SDK 小于等于16的时候,默认为 true)
  • 设置了 <intent-filter> 的 action 标签,且未设置 android:exported="false"

使用drozer发现导出的service组件

run app.service.info -a <Package_Name>

消息伪造

Android APP Service组件常见漏洞

越权

使用某个安卓APP的时候,比如我们拨打电话,发送短信,打开摄像头,读取本地的存储,都是需要获取相应的权限,得到用户和系统的授权才能去完成相应的敏感功能。

这里的越权,某些受信任的APP,获取到了一些敏感操作的权限,但是了没有做好权限控制,将对应的权限暴露出去,从而导致一些恶意的APP可以不去申请敏感,但是可以直接去越权调用其他APP导出的组件越权完成一些敏感操作,比如发送短信,打开摄像头。

Android APP Service组件常见漏洞

Android APP Service组件常见漏洞

Android APP Service组件常见漏洞

这段代码定义了一个名为SMSService的Android服务,其主要功能是发送短信。以下是对代码的详细解释:

基础结构:

SMSService继承自android.app.Service,这意味着它是一个Android服务,可以在后台长时间运行,而不需要用户交互。
onBind方法:

这是Service类的一个回调方法,当其他组件(如活动)想要与服务绑定时,它会被调用。
在这个方法中,抛出了一个UnsupportedOperationException异常,表示这个服务不支持绑定操作。这意味着其他组件不能与这个服务绑定并进行通信。
onCreate方法:

这是Service类的一个回调方法,当服务首次创建时,它会被调用。
在这里,它只是调用了父类的onCreate方法,没有进行任何其他操作。
onStartCommand方法:

这是Service类的一个回调方法,当服务通过startService方法启动时,它会被调用。
在这个方法中,首先获取了系统的SmsManager,这是一个用于发送短信的管理器。
 从传入的Intent中,提取了电话号码(phone)和消息内容(content)。 
使用smsManager.divideMessage(message)将消息内容分割成多个部分,以确保消息可以适应短信的大小限制。
使用迭代器遍历这些消息部分,并使用smsManager.sendTextMessage方法发送每个部分。
在日志中记录了发送的消息内容。
SmsManager:

SmsManager是Android提供的一个类,用于发送短信。
getDefault方法返回系统默认的SmsManager实例。
divideMessage方法用于将长消息分割成多个部分,以确保它们可以适应短信的大小限制。
sendTextMessage方法用于发送短信。
日志记录:

使用了Log.e方法,这是Android的日志工具,用于记录错误消息。在这里,它被用来记录发送的短信内容。
总结:
这个服务的主要功能是发送短信。当服务启动时,它会从传入的Intent中提取电话号码和消息内容,然后使用SmsManager发送短信。如果消息内容太长,它会被分割成多个部分,并分别发送。

命令执行

Android APP Service组件常见漏洞

Android APP Service组件常见漏洞

这段代码是一个Android的Service,名为NetService,它提供了一个功能:检查指定的主机是否可以通过网络访问。以下是对代码的详细解释:

  1. 「基础结构」
    • NetService继承自android.app.Service,这意味着它是一个Android服务,可以在后台长时间运行,而不需要用户交互。
  2. 「AIDL接口」
    • IGetNetStatusInterface.Stub是一个AIDL(Android Interface Definition Language)接口的实现。AIDL用于允许不同的应用程序或应用程序的不同部分(例如服务和活动)在同一个设备上进行进程间通信(IPC)。
    • netStub是这个接口的一个实例,它提供了一个getNetStatus方法,该方法接受一个host参数。
  3. 「getNetStatus方法」
    • 这个方法的目的是检查指定的主机是否可以通过网络访问。
    • 它使用ping命令来实现这个功能。ping是一个网络诊断工具,用于检查主机是否可达。
    • Utils.exec(cmd)似乎是一个工具方法,用于执行给定的命令并返回结果。
    • 根据ping命令的结果,方法将判断网络是否可用,并在日志中记录相应的消息。
  4. 「onBind方法」
    • 这是Service类的一个回调方法,当其他组件(如活动)想要与服务绑定时,它会被调用。
    • 在这个方法中,返回了netStub,这意味着其他组件可以通过这个接口与服务通信。
  5. 「日志记录」
    • 代码中多次使用了Log.e方法,这是Android的日志工具,用于记录错误消息。在这里,它被用来记录执行的命令、命令的结果以及网络是否可用。

「总结」:这个服务提供了一个方法,允许其他组件检查指定的主机是否可以通过网络访问。它使用ping命令来实现这个功能,并将结果记录在日志中。其他组件可以通过AIDL接口与这个服务绑定并调用它的方法。

Android APP Service组件常见漏洞

Android APP Service组件常见漏洞

本地拒绝服务

Service的拒绝服务主要来源于Service启动时对接收的Intent等没有做异常情况下的处理,导致程序崩溃。主要体现在给Service传输的intent或者传输序列化对象导致接收时候的类型传化异常。

adb shell am startservice -n <package_name>/service组件名字 

案例下载

vuls_v4.4.apk

TestVuls.apk

youku-v4.5_killer.apk

youku-poc.apk

参考

https://mp.weixin.qq.com/s/E0a3NbOoImyM7pxiCF6jgw

https://bbs.kanxue.com/thread-269255.htm

原文始发于微信公众号(闻鸡习武):Android APP Service组件常见漏洞

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

发表评论

匿名网友 填写信息