前期回顾
漏洞免费实战部分-安卓应用层getLastPathSegment函数问题
漏洞实战部分3-ContentProvider组件的openFile接口问题
漏洞学习之PWN-HITCON_CTF_2016:Secret Holder
本课程学习Content Provider组件的自定义权限,存在这样的一个应用它想让自己Content Provider组件受到保护不被随意调用,同时又要提供数据给予外部访问,可以使用自定义权限。只有符合这个权限的App才能访问Content Provider组件。
Android protectionLevel 分4个级别:
"normal"
"dangerous"
"signature"
"signatureOrSystem"
如果定义的是前面两种normal或者dangerous, 我们自己的应用需要去访问其对应受保护的资源时只需要在androidManifest.xml中添加相同的uses-permission就行了。
如果是signature, 我们仅仅添加对权限的使用还不行, 必须同时具有相同的签名。
如果是signatureOrSystem(这种权限的应用第三方的应用无法单独访问), 不仅要有相同的签名,而且签名必须是系统签名,此外可能还需要android:sharedUserId=“android.uid.system”
自定义权限如下:
<permission
android:name="com.case4.provider.read" // 权限名称
android:label="provider permission" // 标签 起说明作用
android:protectionLevel="normal" // 权限等级
/>
案例实战:
为了学习这个自定义权限,我编写了一个case4应用。功能很简单,应用启动时创建一个名为case4.db的数据库并生成表名称为hack的数据表。表中有两个字段 _id(key键并且自增长)和CONTENT(text字段)。初始写入表中数据为“hello hack”。
insertData
为了方便外部调用case4应用的Content Provider组件,实现了两个调用uri如下:
uri
外部App调用Content Provider组件时使用相应的uri即可完成数据查询或插入。case4应用为Content Provider组件声明了自定义权限,如下:
permission
自定义权限等级是normal。
protectionLevel
case4运行截图:
case4
编写poc应用调用这个组件,插入数据和查询数据。
打开Android Studio 选择 Start a new Android Studio project项
image
选择Empty Activity
image
填写项目名和报名,其他不用管,直接Finish
image
完成后会进入到MainActivity类中,在onCreate函数中实现代码:
poc_onCeate
为了增加辨识,poc每次启动运行时都会向case4的数据库表中写入‘hello poc4’.
第一次运行 poc没有添加 “com.case4.provider.read” 权限时,运行报错。
SecurityException
第二次运行,poc添加使用权限运行。
usespermission
它的执行效果如图:
关注微信公众号或者可以直接加作者微信:
其它教程