安卓应用漏洞学习-Content Provider组件的自定义权限

前期回顾

漏洞免费实战部分-安卓应用层getLastPathSegment函数问题

漏洞实战部分2-安卓应用ZipEntry对象问题实战

漏洞实战部分3-ContentProvider组件的openFile接口问题

漏洞学习之PWN-easyheap分析

漏洞学习之PWN-HITCON_CTF_2016:Secret Holder

漏洞学习之PWN-绿城杯uaf_pwn 分析

漏洞学习之PWN-ASIS_CTF_2016_b00ks

漏洞学习之PWN-lctf2016:pwn200 堆利用

安卓应用漏洞学习case4

本课程学习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

insertData

为了方便外部调用case4应用的Content Provider组件,实现了两个调用uri如下:

uri

uri

外部App调用Content Provider组件时使用相应的uri即可完成数据查询或插入。case4应用为Content Provider组件声明了自定义权限,如下:

permission

permission

自定义权限等级是normal。

protectionLevel

protectionLevel

case4运行截图:

case4

case4

编写poc应用调用这个组件,插入数据和查询数据。

打开Android Studio 选择 Start a new Android Studio project项

image

image

选择Empty Activity

image

image

填写项目名和报名,其他不用管,直接Finish

image

image

完成后会进入到MainActivity类中,在onCreate函数中实现代码:

poc_onCeate

poc_onCeate

为了增加辨识,poc每次启动运行时都会向case4的数据库表中写入‘hello poc4’.

第一次运行 poc没有添加 “com.case4.provider.read” 权限时,运行报错。

SecurityException

SecurityException

第二次运行,poc添加使用权限运行。

usespermission

usespermission

它的执行效果如图:

poc

 

 

 

 

 

 

 

 

关注微信公众号或者可以直接加作者微信:

 

 

 

 

posted @ 2023-01-07 21:24  syscallwww  阅读(122)  评论(0编辑  收藏  举报