首页 > 技术文章 > 分析activity安全检测实践

fczlm 2021-02-06 17:06 原文

在学习移动安全中的一些测试经验,记录一下

以想看app为例

https://app.mi.com/details?id=com.xiangkan.android&ref=search

使用drozer测试暴露的activity

run app.activity.info -a  com.xiangkan.android

得到:

Package: com.xiangkan.android
  com.bikan.reading.activity.SplashActivity
    Permission: null
  com.xiaomi.assemble.control.DistributeActivity
    Permission: null
  com.tencent.tauth.AuthActivity
    Permission: null
  com.bikan.reading.activity.DummyActivity
    Permission: null
  com.xiangkan.android.MiPushWakeActivityActivity
    Permission: null
  com.ledong.lib.leto.main.FunctionActivity
    Permission: null
  com.bikan.reading.social.SocialShareActivity
    Permission: null
  com.xiangkan.android.wxapi.WXEntryActivity
    Permission: null
    Target Activity: com.bikan.reading.social.SocialShareActivity

  

反编译客户端后,由查找函数getStringExtra,为什么要这个函数?由于我们希望分析的是activity接收数据之后的安全,如果activity都没有接收任何参数,那顶多是去测测能不做客户端的绕过,运行下,如果对应的activity不敏感,那也就没啥卵用,但是如果接收参数,我们就可以分析下参数在客户端逻辑中都有哪些风险了。而getStringExtra就是接收String类型的参数,这种类型最容易出现风险。

通过jd-gui全局搜索这个函数确认到com.bikan.reading.activity.DummyActivity,是暴露的,且接收参数数据的

 

 

进入DummyActivity找打onCreate函数,是创建Activity的入口函数,他接收ref参数,为push值得时候,执行a函数

 

 

a函数没有参数,所以找到它,它接收uri参数,然后接受两个a(String),a(Uri)函数的过滤,

 

 

 

 

最后进入SplashActivity

 

 

然后会启动SplashActivity,并为它传递url参数的值,也就是DummyActivity中Uri的值

那么确认DummyActivity接收两个参数ref和uri

adb测试:

adb shell am start -n com.xiangkan.android/com.bikan.reading.activity.DummyActivity --es ref push --es uri https://www.baidu.com

执行后,啥动静也没有。

因为过滤了,刚才提到的两个过滤a函数。

其中a(Uri paramUri)中WebRiskChecker类,限制了地址中域名的白名单

 

 

adb shell am start -n com.xiangkan.android/com.bikan.reading.activity.DummyActivity --es ref push --es uri https://www..mi.com

想看就打开了https://www..mi.com

其实这样问题就不大了,主要问题就是域名的限制太大,因为不能保证这些域下的内容都是安全的,比如有url跳转,就可以配合使用。虽然问题不大,记录下分析过程。

 

推荐阅读