type
status
date
slug
summary
tags
category
icon
password
 
 
 

一、漏洞APP分析

 

1. AndroidManifest.xml

AndroidManifest 主要声明了一个MainActivity,一个FlagReceiver ,剩下的无需分析
 

2. MainActivity

MainActivity 获取到intent的data 后,使用String secUrl = "https://bytectf-1303079954.cos.ap-nanjing.myqcloud.com/jump.html?url=" + uri 进行跳转,这里原本环境要求是只能接受https 协议的url ,因此是输入一个https链接,然后jump.html进行跳转。
另外,题目设计出现问题,前后两次进行了webView.setWebViewClient(new WebViewClient() 的操作,导致前一个校验无效,因此,其实完全可以不管第一个校验,但是在这里复现将第一个校验也考虑在内。
  • 第一个无效校验就是校验httpsHost的后缀,对于Host校验,ByteCTF2021 HardDroid中提到可以通过 HierarchicalUri 绕过校验,但是这里不行,因为题目的环境是直接让输入一个URL,而非允许安装攻击APP,所以这里无法直接用字符串的方式绕过,但是给出提示可以用腾讯云的对象存储,其域名是以.myqcloud.com 结尾的。
  • 第二个则是判断路径第一节是否为/local_cache/ ,如果是就到后面读取/data/data/com.bytectf.silverdroid/cache/下的文件并且作为响应,实现离线加载,这里参照ByteCTF2021 ByteDroid1 的复现,就是通过路径穿越读取其他的文件,这里读取/data/data/com.bytectf.silverdroid/files/flag 文件并回传
 

3. jmup.html

jmup.html 是APP中用于跳转的url,其源码校验了myqcloud,也就是说跳转的链接不能包含myqcloud ,如果假设第一个校验有效这里就必须使用.myqcloud.com 结尾的host,所以使用特殊字符绕过。
官方给出的解决方案是使用Unicode等价性,可以在这个网站中找到各式各样的Unicode等价性字符:https://www.compart.com/en/unicode/html比如我们这里poc就用的https://www.compart.com/en/unicode/U+1F132即在webview加载url的时候:c=🄲,同时还会在url把特殊的🄲统一化到普通的c。

二、攻击APP构造

 

1. 攻击方案

 
首先在腾讯云开一个免费额度的对象存储服务,把恶意html放里面,然后拿到链接,然后替换一下特殊字符,用jump.html跳转。而evil.html 的内容就是通过构造/local_cache/..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F%2Fdata%2Fdata%2Fcom.bytectf.silverdroid%2Ffiles%2Fflag 这样的路径造成路径穿越,然后将内容发送到https://webhook.site,这里必须要进行编码。
⚠️
这里需要明确一点。在Android5.0之前,系统默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即总是允许WebView同时加载Https和Http;而从Android5.0开始,默认用MIXED_CONTENT_NEVER_ALLOW模式,即总是不允许WebView同时加载Https和Http ,也就是说对于本题而言通过webview 加载都要使用https ,否则无法正常访问,所以为了方便才使用https://webhook.site 的服务
 

2. 攻击结果

成功拿到flag回传
notion image
 

三、总结

  • 考察host校验的绕过
  • 考察离线加载的路径穿越漏洞
 

参考

  1. ‍⁡‬⁤⁣⁢‍⁢‌‌‬⁣⁡⁢‬⁢⁡‬⁢‬‬⁡⁡‬‬‬‬‬⁤⁤⁣‌ByteCTF2021 writeup for Android challenges - 飞书云文档 (feishu.cn)
  1. Unicode等价性 - 维基百科,自由的百科全书 (wikipedia.org)
  1. Android WebView https白屏、Http和Https混合问题、证书配置和使用-CSDN博客
ByteCTF2022 GoldDroid复现ByteCTF2022 BronzeDroid复现
  • Twikoo