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. COALESCE语句解救sql的sum问题
  2. 如何使用Java中的UTC或GMT获取当前日期和时间?
  3. Android之 AndroidManifest xml 文件解析
  4. C++中的对象_纪要(二)
  5. 神经网络激活函数链接
  6. 京东商品详情页碎碎念
  7. java 视频监控 分屏ui_视频监控网页ActiveX视频分屏播放控件开发
  8. 一个女程序员的创业人生:胆识也是一种能力 作者:秋镇菜
  9. adapt和adopt的区别_adopt和adapt的区别
  10. Java常量设计与常量池
  11. html5之Canvas坐标变换应用-时钟实例
  12. 你知道 Google X 神秘实验室创始人的故事么?
  13. [CSS3] :nth-child的用法
  14. 易语言获取硬盘特征字序列号加密特征字
  15. 《未来世界的幸存者》笔记
  16. golang常量与逻辑运算基本语法
  17. hp服务器u盘安装系统进不了安装界面,hp笔记本开机无法从u盘安装系统
  18. 联想服务器网卡显示不全,ThinkSystem系列服务器板载1Gb网口及LOM网卡接入100Mb交换机显示无连接...
  19. 批量添加联系人的方法
  20. 以太坊宠物商店 - 记录第一个Dapp

热门文章

  1. vi 整行 多行 复制与粘贴
  2. 支付宝(查询对账单下载地址+文件下载+解压+遍历文件+读文件)
  3. js插件chosen-select后台交互下拉框选择
  4. 8月13日云栖精选夜读 | 阿里云首次发布数字化转型方法论,推动各行各业数字化转型...
  5. 服务器渲染技术-->Thymeleaf
  6. 公共基础知识:敦煌莫高窟
  7. IRSHELL 3.8/3.81安装使用教程
  8. Android 原生Wi-Fi室内定位探究
  9. 外媒评选过去25年10大黑客攻击事件
  10. xjax和JQery