美文网首页
sidazujian

sidazujian

作者: 5f8689b959d5 | 来源:发表于2020-05-20 16:53 被阅读0次

    可以看一下这些文章哦 https://www.freebuf.com/articles/web/165466.html
    https://blog.csdn.net/nextdoor6/article/details/52211117

    Activity组件:界面组件,通常用来展示一个可视化的用户界面。劫持攻击中就是测试这个界面

    • 对于程序中的每一个界面都是一个Activity, 每一个Activity有不同的功能,比如登录、注册、 注册码验证、手势密码等,Activity之间的切换需 要满足一定的条件。
    • 一个activity通常就是一个单独的屏幕,它在上面可以显示一些控件也可以监听并处理用户的事件作出响应。
    • activity之间通过intent进行通信。intent是指意图。是组件之间通信的信息对象,用于启动组件和传输数据。
    • intent分为显式意图和隐式意图。显式意图就比如说是点击一个按钮,跳转的另外的界面。隐式意图尝尝是用于计划其他应用程序的组件。

    Activity组件测试

    1. activity劫持
      • 打开Hijack_Activity,后台运行,再打开测试的app,查看是否弹出Hijack_Activity劫持
        安全的情况下,当在app打开另外的界面时,app应用需要提示用户应用在后台运行中
     
    也可以使用测试命令:(使用命令的方式启动测试程序)
      1. 打开cmd
         adb shell
         su
         am start com.hijack_activity/.MyLogin
    
    1. activity组件导出
    • Activity组件可导出,则会造成Activity组件本地拒绝服务
    • 漏洞描述:Activity 组件的属性 exported 被设置为 true 或是未设置 exported 值 但 IntentFilter 不为空时,activity 被认为是导出的,可通过设置相 应的 Intent 唤起 activity。黑客可能构造恶意数据针对导出 activity 组件实施越权攻击。
    • 修复建议:组件安全。应合理设置APP组件的exported属性,防止APP自身不必要的组件暴露,对需要设置成导出的组件,对传入的Intent的参数做严格的检查和过滤。
    测试方法:
    1、adb forward tcp:31415 tcp:31415
    
    2、drozer console connect
    
    3、查看可导出的activity(run app.activity.info -a 包名)
    
    4、开启新的cmd,进入adb 掉起activity(am start -n 包名/activity名),观察页面是否黑屏、闪退等其他异常
    
    a. 查询四大组件的基本信息:
    
    dz> run app.package.attacksurface com.cpic.jkfwglesit
    Attack Surface:
      2 activities exported
      1 broadcast receivers exported
      0 content providers exported
      1 services exported
    
    b. 查看activity组件
    
    dz> run app.activity.info -a com.cpic.jkfwglesit
    Package: com.cpic.jkfwglesit
      com.cpic.jkfwglesit.MainActivity
        Permission: null
      cn.jpush.android.ui.PushActivity
        Permission: null
    
    
    
    c. 开启新的cmd,进入adb 掉起activity(am start -n 包名/activity名
    C:\Users\syjiang>adb shell
    shell@trltechn:/ $ am start -nncom.cpic.jkfwglesit/cn.jpush.android.ui.PushActivity
    rt -n com.cpic.jkfwglesit/cn.jpush.android.ui.PushActivity                    <
    Starting: Intent { cmp=com.cpic.jkfwglesit/cn.jpush.android.ui.PushActivity }
    
    
    如果此时APP界面存在异常,则可导出。
    这时候需要手机正在运行app.
    
    
    • 自动化测试
      使用自动化测试,导出app的配置文件AndroidManifest.xml,可以通过查看配置文件来看。


      AndroidManifest.xml文件
    • 我们主要介绍的是activity通过exported属性来对activity进行的安全控制。首先讲下默认情况,如果activity没有设置intent-filter,则exported默认的属性为false,就是这个组件仅仅能被自身内部程序调用。如果activity设置了intent-filter,则android:exported默认为true。这时如果我们对这个值进行控制就会导致一系列安全问题。所以组件安全也主要针对配置了意图过滤的组件。

    • 这时我们把组件分为公有组件和私有组件,公有组件就是activity组件可以被外部程序调用,私有组件就是不能被其他程序启动或调用。因此在创建组件时,如果是私有的组件,android:exported属性一律设置为false.如果是公有的,就设置android:exported为true。不管公有的还是私有的组件,处理接收的intent时都应该进行验证的数据验证。公有组件防止信息泄露和接收外部数据时进行严格的处理。如果对私有组件没有进行相应的配置,可能导致组件被其他程序调用,敏感信息泄露,拒绝服务器攻击和权限绕过等漏洞。

    • 其中. MainLoginActivity是app启动时的主界面,必须可以导出,但其他activity正常情况下是不能导出的

    漏洞组件:

    Service组件

    • 无用户界面,但是它会在后台一直执行
    • Service服务是伴随着程序启动,一直运行在后台,主要起检测作用的执行代码。服务一般用于时刻检测客户端的更新状态、时刻检测是否异地登录、时刻上传用户的操作信息
    • 很多情况下,一些与用户很少需要产生交互的应用程序,我们一般让它们在后台运行就行了,而且在它们运行期间我们仍然能运行其他的应用。为了处理这种后台进程,Android引入了Service的概念。
      测试方法
    1、adb forward tcp:31415 tcp:31415
    
    2、drozer console connect
    
    3、run app.service.info -a 包名
    
    4、am startservice -a INTENT -n 包名/组件名
    

    还是主要看配置文件吧,还是不太懂四大组件的测试,好多是需要手动注入的,还需要再了解一下!

    Broadcast组件

    • 广播是当程序检测到外界的某种运行环境发生变化时,而执行的逻辑代码,比如程序的自启、网络变化变化、实时消息(打车软件)
    • 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。广播接收者(BroadcastReceiver)用于接收广播Intent的, 广播Intent的发送是通过调用sendBroadcast/sendOrderedBroadcast来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收
      测试方法:
    1、adb forward tcp:31415 tcp:31415
    
    2、drozer console connect
    
    3、run app.broadcast.info -a 包名
    
    4、进入adb shell
    
    5、am  broadcast -a INTENT_ACTION -n 包名/actvivity名 //观察是否有闪退现象
    
    6、找到INTENT_ACTION(1、java -jar AXMLPrinter2.jar  xml地址 > AndroidManifest.txt) //可以在文本中查看具体情况,是否设置了exportd属性为false
    
    
    java -jar AXMLPrinter2.jar  C:\Users\LM\Desktop\AndroidManifest.xml > C:\Users\LM\Desktop\AndroidManifest.txt
    

    ContentProvider组件

    • ContentProvider用于保存和获取数据,并使其对所有应用程序可见。 这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。比如通讯录数据。
    • 内容提供者是应用程序之间共享数据的接口,使用ContentProvider共享数据的好处是统一了数据访问方式。
      测试方法:
    1、adb forward tcp:31415 tcp:31415
    
    2、drozer console connect
    
    3、run scanner.provider.finduris -a 包名
    
    4、获取各个URI的数据(查询到数据说明存在漏洞):run app.provider.query 
    
    run app.provider.query [URI] –selection “1=1”
    
    dz> SQL注入(报错则说明存在SQL注入):run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* from sqlite_master wh ere 1=1; --"
    
    检查是否存在遍历文件的漏洞
    dz> run scanner.provider.injection -a com.mwr.example.sieve
    
    dz> run scanner.provider.traversal -a com.mwr.example.sieve
    
    还有一种,就是去看配置文件。是否为false
    
    
    • 感觉这个比较难,给几个图


      测试案例
    需要自己写攻击payload
    • 测试方法
    检测sql注入和目录遍历:
    dz> run scanner.provider.injection -a com.mwr.example.sieve
    
    dz> run scanner.provider.traversal -a com.mwr.example.sieve
    
    遍历下载文件:
    dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
    
    dz> run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sie
    ve/databases/database.db /home/user/database.db
    
    

    调试信息未关闭

    • 查看配置文件xml,看debuggable属性值被设置为false则为安全,true为存在风险。

    二次打包

    • 所谓的二次打包的概念,即对已经编译发布的apk文件,即已经使用签名文件进行正式签名的应用文件进行自己的修改之后,再次签名打包发布的过程称为二次打包

    这里面是详细步骤
    https://www.jianshu.com/p/6bcc42542997

    • 二次打包,就是把apk文件压缩之后,把里面的东西改动之后,再重新编译,打包,看看能不能正常运行。如果可以的话,那么攻击者就可以随意改动app,存在风险呀~

    相关文章

      网友评论

          本文标题:sidazujian

          本文链接:https://www.haomeiwen.com/subject/nefnohtx.html