博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Intent scheme URL attack
阅读量:6940 次
发布时间:2019-06-27

本文共 2777 字,大约阅读时间需要 9 分钟。

瘦蛟舞 · 2014/08/29 12:19

0x01 Android Intents with Chrome


Android有一个很少人知道的特性可以通过web页面发送intent来启动apps。以前通过网页启动app是通过设置iframe的src属性,例如:

复制代码

此方法适用version 18或者更早版本。其他android浏览器也适用。 这个功能在安卓chrome 浏览器version 25之后版本发生了改变。不能在通过设置iframe标签的src属性来启动app了。取而代之的是你应该通过自定义scheme实现用户手势启动app或者使用本文描述的“intent:”语法。

1.1 基本语法

“最佳实践”是构造一个intent插入网页中使用户能够登录app。这为您提供了更多的灵活性在控制应用程序是如何启动,包括传通过传递额外信息。 intent-based URI基本语法如下:

intent:   HOST/URI-path // Optional host   #Intent;      package=[string];      action=[string];      category=[string];      component=[string];      scheme=[string];   end;复制代码

语法细节见源码

1.2 简单举例

例子是一个intent登陆应用“Zxing barcode scanner”,语法如下:

intent:   //scan/   #Intent;      package=com.google.zxing.client.android;      scheme=zxing;   end;复制代码

设置a标签发href属性:

 Take a QR code 复制代码

Package和host定义在配置文件中

1.3 注意事项

如果调用activity的intent包含,同样可以包含这些。 Activity只有配置了category filter才有被通过这种方式在浏览器中打开,因为这样表明其是安全的。

1.4 另请参阅

0x02 利用思路


在Android上的Intent-based攻击很普遍,这种攻击轻则导致应用程序崩溃,重则可能演变提权漏洞。当然,通过静态特征匹配,Intent-Based的恶意样本还是很容易被识别出来的。 然而最近出现了一种基于Android Browser的攻击手段——Intent Scheme URLs攻击。这种攻击方式利用了浏览器保护措施的不足,通过浏览器作为桥梁间接实现Intend-Based攻击。相比于普通Intend-Based攻击,这种方式极具隐蔽性,而且由于恶意代码隐藏WebPage中,传统的特征匹配完全不起作用。除此之外,这种攻击还能直接访问跟浏览器自身的组件(无论是公开还是私有)和私有文件,比如cookie文件,进而导致用户机密信息的泄露。

0x03 1.3 Intent scheme URL的用法

看一下Intent Scheme URL的用法。

  复制代码

从用法上看,还是很好理解的,这里的代码等价于如下Java代码:

Intent intent = new Intent("myaction");  intent.setData(Uri.parse("mydata"));  intent.setType("text/plain");  复制代码

再看一个例子:

intent://foobar/#Intent;action=myaction;type=text/plain;S.xyz=123;i.abc=678;end 复制代码

上面的语句,等价于如下Java代码:

Intent intent = new Intent("myaction");  intent.setData(Uri.pase("//foobar/"));  intent.putExtra("xyz", "123");  intent.putExtra("abc", 678);  复制代码

其中S代表String类型的key-value,i代表int类型的key-value。 源码中提供了Intent.parseUri(String uri)静态方法,通过这个方法可以直接解析uri,如果想更一步了解其中的语法,可以查看官方源码。

0x04 Intent scheme URI的解析及过滤


如果浏览器支持Intent Scheme URI语法,一般会分三个步骤进行处理:

  1. 利用Intent.parseUri解析uri,获取原始的intent对象;
  2. 对intent对象设置过滤规则,不同的浏览器有不同的策略,后面会详细介绍;
  3. 通过Context.startActivityIfNeeded或者Context.startActivity发送intent; 其中步骤2起关键作用,过滤规则缺失或者存在缺陷都会导致Intent Schem URL攻击。

关键函数

Intent.parseUri()复制代码

绕过

Intent.setComponent(null);复制代码

使用sel;

0x05 乌云案例


某浏览器对此支持非常好

   设置绕过Pin码(android 3.0-4.3)复制代码

    qq浏览器崩溃复制代码

    打开原生浏览器复制代码


   发送短信
复制代码

   打开相机
复制代码

   删除应用
复制代码

    添加联系人
复制代码

0x06 修复


通过以上漏洞的描述,总结得出一种相对比较安全的Intent Filter方法,代码如下:

// convert intent scheme URL to intent object  Intent intent = Intent.parseUri(uri);  // forbid launching activities without BROWSABLE category  intent.addCategory("android.intent.category.BROWSABLE");  // forbid explicit call  intent.setComponent(null);  // forbid intent with selector intent  intent.setSelector(null);  // start the activity by the intent  context.startActivityIfNeeded(intent, -1);  复制代码

0x07 参考


转载地址:http://uginl.baihongyu.com/

你可能感兴趣的文章
ThinkPHP技术
查看>>
c#接口和抽象类的区别[转]
查看>>
2019-05-16 Java学习日记之面向对象_继承&方法&final
查看>>
vue单页面程序
查看>>
[转]KVC/KVO
查看>>
windows 2008 r2服务器密码忘记解决办法(RAID5磁盘阵列)
查看>>
nginx(web)应用实践
查看>>
筑泰防务与中山市公安局携手共同打造双系统警用移动管控——“智慧新警务”...
查看>>
python常用内置函数map()
查看>>
我的友情链接
查看>>
JS获取当前日期及时间
查看>>
linux下PHP网站安全加固方案
查看>>
使用apache搭建文件服务器
查看>>
手把手指南 Windows 路由和远程访问实现如何架设×××(二)
查看>>
CALayer1-简介
查看>>
css盒子学习记录
查看>>
Linux hugepage的配置方法
查看>>
文献综述
查看>>
linux网络编程中select/poll/epoll的比较分析
查看>>
java 从通过网址获取网页图片
查看>>