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

移动安全 2年前 (2022) admin
314 0 0

前期回顾

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

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

安卓应用漏洞学习case3

本课程学习ContentProvider组件的openFile接口。ContentProvider组件主要作用实现各个应用程序之间的数据共享。可以把它理解为应用对外开放的接口,只要符合Uri格式请求,就可以访问。

openFile定义如下:

public ParcelFileDescriptor openFile (Uri uri,                 String mode,                 CancellationSignal signal)

此方法返回一个 ParcelFileDescriptor,该描述符直接返回 给调用者。这样,大数据(如图像和文档)就可以 返回而不复制内容。

调用方法:

content://authorities + "path"

authorities 是共享应用的标识,是让外部应用通过这个标识找到共享应用接口。path是需要读取文件的路径,但一般都会被被限制,但如果校验不严格,极易造成路径穿越达到任意文件写和任意文件读的效果。

authorities标识符号,在共享应用的manifest.xml中Provide 组件上找到。

实战案例:

为了学习这个openFile接口,我编写了一个case3应用。功能很简单,应用启动时在/data/data/pagename/files 目录下创建tmp、hack两个目录,在tmp、hack两个目录下分别创建了flag.txt文件,tmp目录下的flag.txt文件内容是 “hello tmp”,hack目录下的flag.txt文件内容为“hello hack”。

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

在opneFile函数处,已经将路径写死为 tmp目录,uri传递的文件名只能是tmp目录下的文件,但是并没有考虑 ../的情况,所以存在路径穿越的问题,控制路径穿越到hack目录下读取flag.txt内容。

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

provider对外导出的authorities为 com.study.case3:

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

编写poc 应用调用这个共享接口,读取hack目录下的flag.txt内容。

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

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

选择Empty Activity

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

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

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

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

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

代码分两步,当填写了uri则使用填写的uri,如果没有那么就使用写好的uri,这个提前写好的uri只能访问tmp目录下的flag.txt文件内容。它的uri格式为:

String uri = "content://com.study.case3/flag.txt";  //这是读取tmp目录下的flag.txt文件

前分析可知,利用../路径穿越到hack目录下读取flag.txt内容,它的uri格式为:

// 利用../路径穿越到hack目录下,读取flag.txt文件String uri = "content://com.study.case3/../hack/flag.txt"

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

这个接口也支持向文件中写入内容。路径uri都和读一样,只需要使用FileOutputStream对象去进行写就可以将内容写入,但是这个接口只能追加写入内容,不能覆盖内容,而且也不能创建文件,实现一个写入poc最终如下所示

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

它的执行效果如下:

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

如果感兴趣可以了解下漏洞视频教程目录如下:

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

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

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


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

其它学习教程。

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


原文始发于微信公众号(安全狗的自我修养):漏洞实战部分3-ContentProvider组件的openFile接口问题

版权声明:admin 发表于 2022年12月25日 下午2:08。
转载请注明:漏洞实战部分3-ContentProvider组件的openFile接口问题 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...