首页 > 其他分享 >漏洞实战部分3-ContentProvider组件的openFile接口问题

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

时间:2022-12-25 14:34:54浏览次数:45  
标签:tmp openFile ContentProvider uri flag hack 组件 txt 目录

前期回顾可以关注微信公众号

安卓应用漏洞学习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”。

image1

image1

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

image2

image2

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

image3

image3

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

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

image

image

选择Empty Activity

image

image

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

image

image

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

image9

image9

代码分两步,当填写了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"

image10

image10

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

image11

image11

它的执行效果如下:

image12

image12

 

 

 

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

 

 

 

标签:tmp,openFile,ContentProvider,uri,flag,hack,组件,txt,目录
From: https://www.cnblogs.com/haidragon/p/17003998.html

相关文章