安卓应用漏洞学习-Content Provider组件的自定义权限
2023-1-7 21:27:16 Author: 安全狗的自我修养(查看原文) 阅读量:15 收藏

前期回顾

漏洞免费实战部分-安卓应用层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 堆利用

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

它的执行效果如图:

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

其它教程


文章来源: http://mp.weixin.qq.com/s?__biz=MzkwOTE5MDY5NA==&mid=2247487311&idx=1&sn=6f83aac7a4137da9c9e4ff3621a0ed2b&chksm=c13f3c06f648b5108e0053a130c9aec499c77d5576b5c24c27d8a31fa56b14d5b119cdfe5bf6#rd
如有侵权请联系:admin#unsafe.sh