阿里聚安全攻防挑战赛第三题Android PwnMe解题思路

大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目。我们今天带你一探究竟,如何攻破这道题目。

一、题目

购物应用pwn (6分)

环境:

  • 要求在ARM 64位Android手机上攻击成功,也可在模拟器(运行Google官方Android SDK提供的Google APIs ARM64 Android 7.0镜像)中攻击成功,其中镜像会打包提供,参见题目下载链接。模拟器执行命令参考如下:(qemu-system-aarch64 -sysdir . -datadir . -kernel kernel-qemu -system system.img -ramdisk ramdisk.img -data userdata.img)
  • 包含bug的apk一个
  • 必须在非root环境

攻击过程:

  • 将apk装入模拟器中。
  • 打开chrome浏览器,访问选手的恶意网页的地址。(web服务由选手自己搭建)
  • 通过选手的恶意网页,即可获取此app的shell。
  • apk显示“购买成功”

目标:Chrome浏览器点击链接,导致远程触发app的购买逻辑,app界面上显示“购买成功”。

评分标准:通过浏览器访问网页即达到控制app远程任意代码执行得6分,其中:
1. 反弹shell控制app ,5分。
2. 能够进一步让app界面显示“购买成功”分数进一步得1分 。
3. 需提供远程任意代码执行的利用程序源代码。

二、解题思路

攻击流程如下:

1.Android Intents with Chrome

其中题目中要求“Chrome浏览器点击链接”,Chrome的官方文档规定了如何从链接发intent启功app,官方文档链接:https://developer.chrome.com/multidevice/android/intents 。反汇编ExamPwn.apk文件发现AndroidManifest.xml中果然有接受相关intent的内容。如图:

类LoginActivity先接受这个intent解析出帐号密码并匹配,帐号密码直接以明文硬编码在类LoginActivity中,反汇编直接可以看见。匹配正确后将intent中的url丢给类MainActivity。也就是说攻击者的网页至少如下:

2.info leak

反汇编类MainActivity发现,它会把url指向的文件当作特定格式的json解析。根据json内容,它会执行上传文件和下载解析显示图片的任务。不难发现上传文件的路径是攻击者提供的,app没有检查是否合法,造成任意文件上传,信息泄漏的漏洞。此时构造如下json可以泄漏app的内存地址

3. code exec

想要拿到Android app远程代码执行权限,漏洞基本只能存在于Dex动态加载逻辑、访问远程数据的native代码中。用工具androguard扫描发现,没有dex动态加载问题,漏洞只可能在native代码中。App有native代码libHt5g.so用于解析和播放gif图片。漏洞很可能就在其中,反汇编libHt5g.so发现有很多函数都有FrameSequence关键词。实际上就是Google自己的gif显示库,2016年12月和2017年1月都曝出过漏洞。

详情见

https://source.android.com/intl/us_ALL/security/bulletin/2016-12-01.html

https://source.android.com/intl/us_ALL/security/bulletin/2017-01-01.html

但光看源代码基本不能利用。所以说出题者应该放了其他漏洞在里面。

反汇编看到private static native long nativeGetFrame(long j, int i, Bitmap bitmap, int i2);的时候可以发现,当gif一帧的大小小于等于1024字节的时候,buffer是分配在stack上然后再memcpy到原来的bitmap buffer中。不仅多此一举而且跟源代码不一致,基本确定出题者准备的是栈溢出。

到此为止如果还没有发现有源代码可以自己编译然后binary diff的话,可以自己构造小于1024字节的gif,然后逐个字节替换为0xff,最快几十字节改就会发现crash,分析后发现Gif格式中,一帧图片的Left变量被当成负数处理了,无符号整数被当作有符号整数处理。而知道用binary diff的同学基本直接可以定位到出题者修改的所有地方,包括解析Left出错的地方。

光看源代码基本不能利用是因为bitmap是RGBA格式,RGB可以控制,而Alpha在源代码里直接被0xff填充,意为不透明。这样的话溢出的数据基本很难控制。所以作为出题者的我们按照gif格式添加了tag为0x77的ExtentionBlock,里面存放的数据作为Alpha值。这样就能完全控制溢出的数据了。

由于Left变成了负数,造成了向低地址的任意数据的栈溢出。

受影响汇编代码

可以看到此函数在栈上申请了0x480大小的字节。其中处于高地址的0x400(1024)个字节是将被溢出的buffer,处于低地址的0x80个字节是可以作为掩盖目标。到此可以任意代码执行了。

4.rop

由于之前拿到/proc/self/maps,内存地址都泄露了,这里说一下我们的rop方法。

溢出后控制memcpy的dst参数,将准备好的数据拷贝到从/proc/self/maps里找到的暂时不用的一块内存。我们在linker64里找到两个gadget

1、修改sp地址到新地址

2、把所在内存修改为可执行

3、跳转到自定义的可执行内存

作者:蚂蚁金服巴斯光年实验室,更多关于阿里的安全技术文章,请访问阿里聚安全博客

阿里聚安全攻防挑战赛第三题Android PwnMe解题思路相关推荐

  1. 20万大奖等你拿!阿里聚安全攻防挑战赛报名开启!

    20万大奖等你拿!阿里聚安全攻防挑战赛报名开启! "阿里聚安全攻防挑战赛" 已成功举办过两届,并逐渐成为安全行业经典赛事品牌,本届更是推出史上最强权威导师助阵,是业界不可错过的年度 ...

  2. 巴斯光年探险阿里聚安全攻防挑战赛!决战12月28日!

    ​ 中文名:巴斯光年实验室 性格:果断,勇猛,随和,幽默,有责任心和正义感,关心伙伴! 技能:护航移动终端基础安全 产地:蚂蚁金服神盾局 职责:赋能安全生态伙伴,共建互联网安全新生态.! 此次任务:在 ...

  3. 你不知道的声纹识别,尽在阿里聚安全攻防挑战赛!

    由阿里巴巴安全部主办的"阿里聚安全攻防挑战赛"决战日12月28日即将到来,许多参赛的小伙伴都发现了此次比赛与以往的攻防大赛有很大的不同.就是参赛者可以尝试用声音攻击一套声纹验证系统 ...

  4. 当安全遇上AI 阿里聚安全算法挑战赛完美收官

    4月27日,在2017北京国际互联网科技博览会暨世界网络安全大会上,"阿里聚安全算法挑战赛"进行了现场答辩,并最终决出了优胜者.据了解,此次答辩赛总共有15名选手入围.在现场,每位 ...

  5. 30万奖金!还带你奔赴加拿大相约KDD!?阿里聚安全算法挑战赛带你飞起!

    KDD(Knowledge Discovery and Data Mining,知识发现与数据挖掘)会议,作为数据挖掘届的顶会,一直是算法爱好者心中的圣地麦加. 想去?有点难. ​ 给你奖金和差旅赞助 ...

  6. 算法开启的人工智能时代!阿里聚安全算法挑战赛公开报名!

    2017年01月16日 11:28  2180 这一年你有没有遇到过语音识别,图文识别.人脸识别安全,机器人服务员.无人机驾驶等等.在机器学习或者人工智能领域,人们首先会考虑算法的学习方式.在 Alp ...

  7. 当安全遇上AI 阿里聚安全算法挑战赛 队伍经验分享

      本届线上选拔赛赛题包括了<人机行为识别>.<SQL注入检测>和<社区反垃圾>,首次把风控.网络安全及内容安全的多维度数据结合的算法比赛.赛题紧贴业务,将实际存在 ...

  8. 阿里聚安全移动安全专家分享:APP渠道推广作弊攻防那些事儿

    移动互联网高速发展,要保持APP持续并且高速增长所需的成本也越来越高.美团网CEO在今年的一次公开会议上讲到:"2017年对移动互联网公司来说是非常恐的.".主要表现在三个方面,手 ...

  9. 阿里聚安全年终盘点|2017互联网安全领域十大话题

    导语:2017年即将过去,2018新年还有3天,回顾2017,看似很平淡地过去了,但总有一些印记让我们印象深刻.作为互联网安全领域的一份子,阿里聚安全时刻关注着互联网行业的安全事件,让我们一起来盘点2 ...

最新文章

  1. 《统一沟通-微软-实战》-6-部署-2-中介服务器-1-定义中介服务器
  2. mips j指令_计算机组成原理 指令
  3. Caffe SSD Ubuntu16 04 训练自己的数据集
  4. 判断回文(Python)
  5. android中开启线程处理,Android线程与消息处理
  6. SQL Azure Reporting CTP
  7. PDF文件如何转成markdown格式 1
  8. java-什么是实例初始化块?
  9. c# 多线程界面卡顿_优化electron客户端卡顿的几种方案
  10. LAMP的部署(一)
  11. java中方法体的作用
  12. Atitit table的读取解析from html by jsoup java html paresr 目录 1. atitit.gui控件的定位与选择器 1 2. 读取表格流程 遍历表格ta
  13. ssh的mysql分页查询_在SSH框架下按条件分页查询
  14. java二级 计算复杂利息_java 计算存款利息
  15. FlightGear命令行参数
  16. 合作、高效 -- 下一代汽车电子软件开发与测试论坛
  17. cleanmymac x激活码免费下载激活及使用教程
  18. c语言程序中文复制到word变乱码,怎么复制C程序代码到Word不会有乱码,不会有乱字等情况...
  19. 软件工程专业大学四年学什么
  20. 二分类图片标签从0-1改为0-255——将图片位深度从1改为8

热门文章

  1. SharePoint Designer (FrontPage) 2007 简体中文正式版
  2. 【数据结构】最小生成树的概念
  3. 股票的区分: 什么是 A股,B股,H股,N股?
  4. React 大数据可视化(大屏展示)解决方案
  5. PySide6 布局管理
  6. mysql 用法之 统计各地区注册人数
  7. git status的用法
  8. [知乎]为什么上知乎?
  9. mysql数据考试测试题
  10. 2.nodejs如何实现同步ldap组织架构,同步用户,用户认证