内容简介:iOS URL Schemes,这个单词对于大多数人来说可能有些陌生,但是类似下面这张图的提示大部分人应该都经常看见:今天要探究的就是:了解iOS URL Schemes、如何发现iOS URL Schemes、iOS URL Schemes结合漏洞案例。
前言
iOS URL Schemes,这个单词对于大多数人来说可能有些陌生,但是类似下面这张图的提示大部分人应该都经常看见:
今天要探究的就是:了解iOS URL Schemes、如何发现iOS URL Schemes、iOS URL Schemes结合漏洞案例。
iOS URL Schemes
基本概念
抛开iOS从URL Schemes的字面意思理解,就是地址协议( Scheme一般用来表示协议,比如 http、https、ftp 等 ),我们所熟知的HTTP协议的URL格式就是:
http(s)://user:pass@host:port/path?query
举个例子: http://gh0st.cn/
,在浏览器输入这个地址,浏览器是使用HTTP协议向 gh0st.cn 请求,请求的资源就是 / 。
再来看一下iOS URL Schemes的一个例子: weixin://
,你在Safari浏览器(Mobile)输入这个网址就会提示你 在"微信"中打开链接吗?
,然后由你选择”取消”或”打开”; 和HTTP协议格式的URL访问流程进行对比,iOS URL Schemes 实际上就是启动一个应用的 URL ,其访问流程是这样的:
浏览器输入"weixin://" -> iOS识别URL Schemes ->询问是否跳转到微信 -> 确认跳转 -> 从浏览器跳转到微信端
那么问题就来了,以上所述流程中的” iOS识别URL Schemes “,iOS如何识别这段URL Schemes? iOS官方要求的是APP开发者需要自己定义自己APP的”URL Schemes”,只有APP本身定义(支持)了URL Schemes,iOS才会去识别然后跳转 。
定义
一个完整的 URL Schemes 应该分为 Scheme、Action、Parameter、Value 这 4 个部分,中间用冒号 :
、斜线 /
、问号 ?
、等号 =
相连接。
举个例子: mst://jump?url=https://gh0st.cn/&title=test
,它对应的4部分就是如下所示:
Scheme(头): mst
、Action(动作): jump
、Parameter(参数): url、title
、Value(值): https://gh0st.cn、test
不同的部分之间有符号相连,它们也有一定的规则(和URL部分规则是一样的):
-
冒号
:
:在 链接头 和 命令 之间; - 双斜杠
//
:在 链接头和命令 之间,有时会是三斜杠///
; - 问号
?
:在 命令和参数 之间; - 等号
=
:在 参数和值 之间; - 和符号
&
:在 一组参数和另一组参数 之间。
理解
以上述所举的例子: mst://jump?url=https://gh0st.cn/&title=test
,来简单的说明下这段URL Scheme所产生的效果:
1.跳转到”mst”所对应的APP
2.在APP中执行jump动作(跳转网站)
3.告诉APPjump动作所需的 url
和 title
参数,对应的值分别为 https://gh0st.cn/
和 test
可以理解为在APP应用中访问 https://gh0st.cn/
,网页标题为 test
。
寻找iOS APP的URL Schemes
当你学会了如何寻找APP的URL Schemes,你就算发现了半个漏洞。
获取IPA包
基本的URL Schemes可以在iOS APP中的Info.plist文件中寻找到,而一般你是无法获取到APP的ipa包的,所以需要借助软件获取到这个包。
前提是你需要这两台设备:MacBook、iPhone,如果你只拥有一台iPhone的话也有办法去获取(需要Thor APP,具体方法自行寻找)。
Mac上先安装Apple Configurator 2,然后你需要在该软件中登录你的Apple账户:
使用iPhone充电线将手机连接Mac,这时候软件中就会显示已经连接Mac的设备:
假设你需要获取微信的URL Schemes,那么你的手机已经安装过了微信,然后使用该软件进行添加,选中设备点击添加按钮,选择应用:
搜索微信,选中添加:
当你下载完成看见如下提示的时候,在Finder中按快捷键 Command+Shift+G
,输入 ~/资源库/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps/
软件下载的微信ipa文件就存在该文件夹中:
进入文件夹将ipa文件复制到其他地方:
然后回到Apple Configurator 2的提示,点击停止即可。
获取基本URL Schemes
将IPA包后缀名修改为ZIP,然后解压,进入Payload目录会看见一个.APP后缀名文件,选中文件右击显示包内容:
找到Info.plist文件并打开,搜索关键词 URLSchemes
:
被 String
标签所包含的就是微信的URL Schemes:
<string>wexinVideoAPI</string> <string>weixin</string> <string>weixinapp</string> <string>fb290293790992170</string> <string>wechat</string> <string>QQ41C152CF</string> <string>prefs</string>
寻找完整URL Schemes
如上已经了解了如何获取最基本的URL Schemes,但是这远远不够,因为完整的URL Schemes有4部分,而目前只找到了第一部分,仅仅能做到的功能就是启动,而想找到更多的非基本URL Schemes需要其他的方法。有很多方法在这里不一一例举了,只例几个常见的思路供你参考。
从手机站点页面获取
一般网站都会有这些子域名:m\h5\mobile…
打开这些子域名,利用Chrome的开发者工具(F12)切换为手机模式视图,这样就能模拟手机去访问了:
那在这里可以在该页面的HTML代码中寻找URL Schemes(前提是你已经知道了基本的URL Schemes)
在这里我从页面的JavaScript代码中发现了很多URL Schemes:
有些还有参数,可以根据命名来猜这些URL Schemes的含义,例如 path: "mst://jump/core/web/jump"
,就可以知道这个是做Web跳转的,那跳转到哪个地址是什么参数控制呢?下面也有对应的告诉我们是 url
参数去控制,也就组成了这样一个URL Scheme: mst://jump/core/web/jump?url=https://gh0st.cn
QRLCode解析地址获取
现在很多网站都支持二维码登录,就比如如下这个网站:
保存该二维码进行二维码解析:
解析得出这是一个URL Scheme,修改json参数url的值为我的网站尝试在浏览器中打开成功的触发了跳转APP,并且在APP中访问了我的网站。
逆向APP
不仅是iOS,安卓也支持URL Schemes,而一般的定义是一样的,所以你可以基于 获取基本URL Schemes
这个步骤将.APP文件的后缀去掉,这时候这个文件就变成了一个文件夹拖到Sublime里面全局搜索” weixin:// “即可。
至于安卓的APK的逆向可以参考我之前的一篇文章< 打造Mac下APK逆向环境到实战接口XSS挖掘 >,可以在源代码中、所有文件内容中搜索URL Schemes。
漏洞案例
APP内URL跳转问题
其实严格来讲这不算是漏洞,毕竟利用有限,但又和 一切能产生危害的问题都算漏洞 这句话所冲突,所以在这还是选择列了出来,至于厂商觉不觉得是个安全性问题,还要看他们对“安全风险“的定义。
如何发现这类问题?在上文中我提到了如何发现URL Schemes,只要你发现了这种类型的URL Schemes就可以尝试替换地址为你的地址然后使用浏览器打开查看是否能在APP内跳转到你的地址,当然利用方式也很简单,构建一个HTML页面即可,然后将网址发送给“ 受害者 ”即可:
<script> window.location='URL Schemes'; </script>
凭证窃取(设计不当)
在做一次漏洞挖掘的时候也碰见了很多次这种问题,大概的描述下就是我找到了能在APP中打开网页的入口方式(例如:二维码扫描、URL Schemes动作),让APP访问到我的地址,这样我就可以直接获取到APP中登录后的凭证信息。
利用方式和URL跳转的方式是一样的;关于这方面漏洞产生原理得出一个可能“ 不太严谨的结论 ”: APP在做HTTP请求的时候默认所有访问的都是信任域,所以带上了本身已经登录的凭证去请求了 。
结合漏洞扩大攻击面
在一次APP的漏洞挖掘中发现了一个JSONP劫持的问题,但是在这里只会对APP用户产生影响,在没有二维码扫描的情况下就需要结合URL Schemes来扩大这个漏洞的影响面,而不是局限于self。
利用流程:
用户打开https://gh0st.cn/test.html,test.html内容:
<script> window.location='mst://jump?url=https://gh0st.cn/jsonp.html'; </script>
用户点开之后启动 mst应用
执行 jump动作
,跳转到https://gh0st.cn/jsonp.html,jsonp.html内容:
<script>function test(data){ document.write(JSON.stringify(data)) }</script> <script src="JSONP URL"></script>
URL Schemes劫持
这个漏洞是15年在乌云爆出来的,漏洞编号为:wooyun-2015-0103233,大家可以自行去查看。
这个问题说白了是一个流程上的缺陷,苹果官方没有限制APP定义的URL Schemes名字,导致其他APP也可以定义“支付宝”的URL Schems名字;又因为iOS系统判定URL Schemes优先级顺序与 Bundle ID 有关(一个 Bundle ID 对应一个应用),如果有人精心伪造 Bundle ID,iOS 就会调用恶意 App 的 URL Schemes 去接收相应的 URL Schemes 请求,这就导致了可以被劫持。
结尾
还有很多思路等着我们去探寻,此文仅做思路启发。
Reference:
https://sspai.com/post/31500 https://sspai.com/post/44591 WooyunBugID:wooyun-2015-0103233
以上所述就是小编给大家介绍的《iOS URL Schemes与漏洞的碰撞组合》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- LeetCode (735):行星碰撞
- 哈希碰撞与生日攻击
- 使用 getImageData 实现碰撞检测
- 从生日悖论谈哈希碰撞
- OpenGL 碰撞检测之 AABB 包围盒
- 游戏制作之路(7)角色与物品之间的碰撞
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Kafka技术内幕
郑奇煌 / 人民邮电出版社 / 2017-11 / 119.00元
Kafka自LinkedIn开源以来就以高性能、高吞吐量、分布式的特性著称,本书以0.10版本的源码为基础,深入分析了Kafka的设计与实现,包括生产者和消费者的消息处理流程,新旧消费者不同的设计方式,存储层的实现,协调者和控制器如何确保Kafka集群的分布式和容错特性,两种同步集群工具MirrorMaker和uReplicator,流处理的两种API以及Kafka的一些高级特性等。一起来看看 《Kafka技术内幕》 这本书的介绍吧!