Bundle的序列化细节看上去还是有些复杂的,在之前已经讨论过,一般我们使用Parcel的时候,都是严格的write和read相对应。一些疏漏,不对应,竟然就可以成为漏洞,

https://xz.aliyun.com/t/2364 里介绍了Bundle漏洞的情况,详情可以去查看,

这里补充一些理解,

引用里面的原理图,

Bundle可以存储map键值对,存储 key-value数量 key1 value1 key2 value2 ...

根据key-value数量来控制读的次数,来进行反序列化。

  1. 当恶意bundle中存的data有<key, intent>

  1. 第一个key-value存储的是有bug的对象,这里是PeriodicAdvertisingReport

@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(syncHandle);dest.writeLong(txPower);dest.writeInt(rssi);dest.writeInt(dataStatus);if (data != null) {dest.writeInt(1);dest.writeByteArray(data.getBytes());} else {dest.writeInt(0);}}private void readFromParcel(Parcel in) {syncHandle = in.readInt();txPower = in.readInt();rssi = in.readInt();dataStatus = in.readInt();if (in.readInt() == 1) {data = ScanRecord.parseFromBytes(in.createByteArray());}}

txPower的读写类型不一致,会造成错位。

系统中的这样有漏洞的Parcelable对象会被这样利用起来作为错位工具。

  1. 构造恶意Bundle,使用了特意的组装,而不是调用Parcelable对象里定义的构造方法。

        pcelData.writeString("mismatch");pcelData.writeInt(4); // VAL_PACELABLEpcelData.writeString("android.bluetooth.le.PeriodicAdvertisingReport"); // name of Class LoaderpcelData.writeInt(1);//syncHandlepcelData.writeInt(1);//txPowerpcelData.writeInt(1);//rssipcelData.writeInt(1);//dataStatuspcelData.writeInt(1);// flag for data

就这样,错位后的结构中,原内容里的 <key, intent>数据 就冒充了Bundle中的第2个键值对来进行使用。

<key, intent>逃脱了权限检查。

如同这样一个命令字串,

  1. aaaabb'2.cccc

  1. dddd

第一条数据是aaaabb'2.cccc

第二条数据是dddd

当解析错位,以为2.cccc 是第二行,就会以为第二条数据是cccc

这个和sql注入有些相似。

一些不经意的漏洞,就会被别有用心的人利用,甚至做出更加卑劣的行为。

这里可以看出,Parce的读写要规范,不遵守规范,各种机缘巧合或者机关算尽下,就会出现匪夷所思的问题,如下面这个汽车上树。

参考资料

https://xz.aliyun.com/t/2364

https://blog.csdn.net/u010206565/article/details/129020951

Parcel Bundle漏洞学习相关推荐

  1. Hacking Team Flash 0day漏洞学习笔记

    周日的夜晚,与囧桑下载下来Hacking Team之前爆出的flash 0day漏洞,怀着紧张激动的心情,在自己的机子上做了实验,经测试,在我的虚拟机(一个sp3的XP,貌似没装Flash)上根本跑不 ...

  2. log4j2远程代码执行漏洞学习总结

    log4j2远程代码执行漏洞学习总结 背景 近期log4j2的漏洞闹得沸沸扬扬,在工作之余也是找了一些资料看一下相关的内容,到现在网上的总结已经很全了,B站上有各种漏洞复现,各大博客类网站关于JNDI ...

  3. WEB安全全基础漏洞学习

    本文省略了SQL注入和xss漏洞,需要的可以网上找资料,资料非常多 web安全全基础漏洞学习 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称 ...

  4. 苹果2017年漏洞学习总结

    苹果2017年漏洞学习总结 一. 漏洞资料列举: 1.      Yalu102 漏洞编号:CVE-2017-2370 作者:kpwn     https://github.com/kpwn/yalu ...

  5. APP安全漏洞学习笔记

    APP安全漏洞学习笔记 本文首先明确了APP安全的目标,然后对常见的APP漏洞进行了整理分析,并研究学习了APK的静态分析与动态分析技术,最后介绍了安卓的渗透测试技术和常见的安全评估工具.附录处整理了 ...

  6. 漏洞学习之:MS17-010

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. 漏洞 ...

  7. SSRF 漏洞学习实战

    3x05 SSRF 漏洞学习实战 文章目录 3x05 `SSRF` 漏洞学习实战 一.ssrf漏洞概念 二.原理 三.SSRF漏洞的危害 四.漏洞检测点 五.ssrf漏洞绕过 六.ssrf漏洞的利用 ...

  8. %3c xml 和php冲突,[原创]WEB安全第五章 漏洞学习与利用11 xml实体注入

    WEB安全第五章 漏洞学习与利用11 xml实体注入 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数 ...

  9. 个php反序列化漏洞,PHP反序列化漏洞学习(一)

    前言:PHP反序列化也是web安全中常见的一种漏洞,这次就先来大致了解一下PHP反序列化漏洞的基础知识. 一.PHP序列化和反序列化 在学习PHP反序列化漏洞时,先来了解一下基础的知识. (一)PHP ...

最新文章

  1. 漫画 | 如何向外行解释产品经理频繁更改需求会令程序员很焦灼?
  2. 按不同vlan下发dhcp_电脑网络:交换机VLAN基础知识及基本划分方法,揭开VLAN的面纱...
  3. 【软考】信息系统项目管理师--知识点
  4. 搜狐视频怎么开启青少年模式
  5. debian linux vnc,Debian 如何配置安装Xfce桌面+VNC远程桌面服务
  6. Linux中断(interrupt)子系统之二:arch相关的硬件封装层
  7. Eclipse IDE的安装与配置
  8. TFRecord —— tensorflow 下的统一数据存储格式
  9. cannot+connect+mysql_mysqlnd cannot connect to MySQL 4.1+ using the old insecure
  10. Centos 7 Mysql 最大连接数超了问题解决
  11. RSA加密与签名的区别
  12. 线性代数基本公式结论简要总结(1)
  13. autocad.net-图片打印合成
  14. 基于网络嵌入和语义表征的作者名消歧
  15. 微信小程序开屏动画组件封装以及使用示例
  16. python汇率兑换双向_汇率兑换—python第一课
  17. 图像处理之预处理方法
  18. 【转】则表达式匹配居民身份证
  19. 推荐系统中的pointwise和pairwise区别
  20. 微软裁员新招:积极离职者奖诺基亚手机

热门文章

  1. 技术服务 哺乳动物细胞双杂交服务
  2. Java面向对象基础腚级理解
  3. jquery插件chosen多选时排序问题
  4. chosen插件引入、初始化、取val、取text、赋值
  5. 哪个Linux ATA 硬盘,linux – scsi和/ dev / disk / by-id下相同硬盘的ata条目
  6. 体验完老罗的直播,我再也不敢了...
  7. Java 接受键盘输入数据的方法
  8. ingress 详解
  9. 游戏数据分析 | 用户流失原因分析
  10. 参与第三次全国土地调查工作