DIVA系列教程 part 5 – 访问控制问题

DIVA第9,10,11关都是访问控制问题

9.ACCESS CONTROL ISSUES – PART 1

  • 目标:可以直接点击按钮访问api认证,现在需要尝试从外部访问此api认证
  • 提示:当权限保护有问题时,应用组件可以通过其他用户或应用来获取访问。这些组件包括activities,services,content providers等

点击按钮直接来到认证后的界面

我们的目标就是不点击按钮,在不访问此案例情况下从外部得到认证后的消息。

在AndroidManifest.xml中存在此activity的名称,action等的描述信息

以上代码APICredsActiviey是通过 intent-filter来进行保护的,然而 intent-filter不能作为一种保护机制,若如此,组件就会暴露,由此activity存在缺陷并且可以被外部应用所利用。

根据AndroidManifest.xml中APICredsActiviey属性描述,可以使用 adb shell来构造触发此activity

adb shell am start jakhar.aseem.diva/.APICredsActivity

更常用的命令是这个

adb shell am start -n jakhar.aseem.diva/.APICredsActivity -a jakhar.aseem.diva.action.VIEW_CREDS

执行之后发现app中界面自动跳转到认证后界面

10.ACCESS CONTROL ISSUES – PART 2

  • 目标:注册Tveeter后就可以访问第三方应用TVEETER api,这个应用需要你在线注册,官网返回一个pin码,用它来注册。现在需要在不知道PIN码情况下从应用外部来访问验证后的信息。这是常见的商业逻辑问题,需要查看源代码
  • 提示:权限访问保护不正确时,应用组件可以被其他应用或用户访问,有些组件还会需要额外的输入信息。

当选择第一项 Register Now然后点击按钮,提示需要去官网并根据给予的PIN码来注册。随便输入PIN码是不行的

当选择 Already Registered 选项点击按钮,会返回验证通过后的信息,注意username 是diva2,区别于上一关

我们的目标就是在不知道PIN码时直接访问已注册后的认证信息。

在AndroidManifest.xml中查找到 AccessControl2Activity 和 APICreds2Activity 的activity以及action信息

根据上一关的方法,直接adb shell输入命令

adb shell am start -n jakhar.aseem.diva/.APICreds2Activity -a jakhar.aseem.diva.action.VIEW_CREDS2

然而返回的是注册页面,并不是已注册后的认证页面。

据此猜测可能有一个注册与否的判断,根据某个属性值在加载时确定是否已成功注册,跟软件破解有些类似。

根据提示,需要查看diva的源码,下载地址:https://github.com/payatu/diva-android

在 APICreds2Activity.java 源码中看到 bncheck 这个属性是控制注册与否的判断的,本案例中,bncheck = false 才可以

bncheck赋值引出另一个关键字: R.string.chk_pin

在values/string.xml中查看 chk_pin的内容

在 AccessControl2Activity.java 源码中看到chk_pin赋值

根据定义猜测 chk_pin 判断是否现在注册

如果 chk_pin = true 说明需要现在注册,跳转到注册页面;如果 chk_pin = false 说明不需要注册,或者说已经完成注册,就会跳到认证后的界面

据此我们需要设置 chk_pin = false 来控制页面跳转完成破解

在appie中使用如下命令:

adb shell am start -a jakhar.aseem.diva.action.VIEW_CREDS2 -n jakhar.aseem.diva/.APICreds2Activity  -–ez check_pin false

返回认证后页面

用drozer做测试,也是可以成功执行的

11.ACCESS CONTROL ISSUES – PART 3

  • 目标:这是个私有笔记应用,可以创建PIN码登录获取访问。现在在不知道PIN码情况下在应用外部访问内部私有数据

首先创建一个PIN码,随便输入,如1357

创建后多出一项 访问私有笔记,进入后需要输入PIN码

正确验证后来到私有笔记区,可以看到私有数据

首先查看AndroidManifest.xml中关于此案例的描述

发现有个 exported = true 的 provider 注册。content providers 使用URI,通常开头是 content://

使用搜索功能查找关键字: content://

找到 NotesProvider.smali 中重要信息

根据以上smail代码,找到路径

content://jakhar.aseem.diva.provider.notesprovider/notes

根据xml中属性信息,这个content 是exported = true 的,也就意味着可以直接外部访问

输入命令

adb shell content query  –uri content://jakhar.aseem.diva.provider.notesprovider/notes

就可以查询到认证后的私有笔记信息

您可能还喜欢...