前期回顾
漏洞免费实战部分-安卓应用层getLastPathSegment函数问题
漏洞实战部分3-ContentProvider组件的openFile接口问题
漏洞学习之PWN-HITCON_CTF_2016:Secret Holder
安卓应用漏洞学习-Content Provider组件的自定义权限
安卓应用漏洞学习case5
本课程学习Content Provider组件的openFileHelper的函数,openFileHelper函数是为了方便实现openFile函数提供简单的实现。
openFileHelper
三星在野漏洞cve-2021-25337它是系统权限下的任意文件写。openFileHelper函数为了通过uri寻找数据表中_data字段的文件路径,并打开文件返回FileDescriptor对象。根据p0的博客的介绍,漏洞存在三星手机中的剪切板服务中,没有具体的app实现,只有Server.jar包中有具体的实现代码。
cve-2021-25337
案例实战:
为了学习这个openFileHelper函数,我编写一个case5应用。功能简单,应用启动创建一个名为case5.db的数据库并生成表名为hack的数据表。表中有两个字段_id(key键并且自增长)和’ _data’(text字段并不能为空)。
images2
在Activity启动时创建/data/data/package/files/overflow.txt文件。
images2
为了方便调用case5的Content Proider组件,实现一个匹配任意数字调用的uri 如下:
images3
case5运行截图:
case5
在files目录下的文件,如下图可知文件只有case5应用的可以读写:
file
编写poc应用调用这个组件,插入数据和查询数据。
打开Android Studio 选择 Start a new Android Studio project项
image
选择Empty Activity
image
填写项目名和报名,其他不用管,直接Finish
image
完成后会进入到MainActivity类中,在onCreate函数中实现代码:
poc
创建调用case5的Content Proider组件uri字符串 ‘content://com.study.case5’。向hack表中的 _data 字段插入文件路径 ‘/data/data/com.test.case5/files/overflow.txt’。case5的Content Proider组件中insert函数会返回插入 _data字段对应的 _id 字段组合的uri。
insert
比如第一次插入 _data 字段那么返回的是 “content://com.test.case5/1”。这个uri保存文件路径,调用openFileDescriptor函数访问文件并写入。
运行poc5界面截图:
poc5
poc5代码中向文件写入 hello 字符串,此时case5应用中的overflow.txt内容如下:
content
调用逻辑:
在poc5中调用openFileDescriptor函数后,通过framework的代理访问到case5的openFile函数,传入的uri假设为 “content://com.study.case5/1” .
openfile
openFile函数在调用this.openFileHelper函数,函数中它会使用query接口查找hack数据表中 _data字段保存的内容。
openFileHelper2
query接口会去调用MyContentProvider组件实现的query函数。
query
此时的uri依旧是”content://com.study.case5/1” ,这时会将uri的1变量取出当做_id 字段查询hack表中对应的 _data字段的变量,projection就是openFileHelper函数中传入的 _data 字段。成功查询到字段后返回到openFileHelper函数中,将字段对应的路径文件打开并返回。
openFileHelper3
关注微信公众号或者可以直接加作者微信: