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

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

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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-haidragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值