阿里聚安全攻防挑战赛第三题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. 30万奖金!还带你奔赴加拿大相约KDD!?阿里聚安全算法挑战赛带你飞起!

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

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

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

  3. 阿里聚安全受邀参加SFDC安全大会,分享互联网业务面临问题和安全创新实践

    现今,技术引领的商业变革已无缝渗透入我们的日常生活,「技术改变生活」的开发者们被推向了创新浪潮的顶端.国内知名的开发者技术社区 SegmentFault 至今已有四年多了,自技术问答开始,他们已经发展 ...

  4. 【阿里聚安全·安全周刊】500万台Android设备受感染|YouTube封杀枪支组装视频

    本周的七个关键词:  500万Android 设备受感染丨 黑客将矛头指向无线传输协议 丨  YouTube封杀枪支视频 丨 AMD将发布补丁 丨 Gooligan Android 僵尸网络 丨  N ...

  5. 阿里聚安全·安全周刊】一种秘密窃取数据的新型 Android 木马|iOS 11相机惊现BUG

    本周的七个关键词:  新型 Android 木马丨 TLS 1.3 丨  阿里安全图灵实验室 丨 漏洞感染 Linux 服务器 丨 CPU曝极危漏洞 丨   iOS 11相机BUG 丨R2D2技术 - ...

  6. 【阿里聚安全·安全周刊】 全美警局已普遍拥有破解 iPhone 的能力 | 女黑客破解任天堂Switch,称硬件漏洞无法修复

    本周的七个关键词: 破解 iPhone丨 女黑客破解任天堂丨假的身份证 丨 扫黄打非丨华盛顿特区发现手机间谍设备 丨 Telegram被俄罗斯监管机构告上法庭丨价值5万美金的Firefox浏览器漏洞 ...

  7. 【阿里聚安全·安全周刊】女主换脸人工合成小电影|伊朗间谍APP苹果安卓皆中招

    本周的七个关键词: 人工智能 丨 HTTP链接=不安全链接 丨  滑动验证码 丨 伊朗间谍APP 丨 加密挖矿 丨  Android应用测试速查表 丨 黑客销售签名证书 -1-   [人工智能]女主换 ...

  8. 【阿里聚安全·安全周刊】阿里双11技术十二讲直播预约|AWS S3配置错误曝光NSA陆军机密文件

    关键词:阿里双11技术十二讲直播丨雪人计划丨亚马逊AWS S3配置错误丨2018威胁预测丨MacOS漏洞丨智能风控平台MTEE3丨黑客窃取<权利的游戏>剧本|Android 8.1   本 ...

  9. 【阿里聚安全·安全周刊】双十一背后的“霸下-七层流量清洗”系统| 大疆 VS “白帽子”,到底谁威胁了谁?

    关键词:霸下-七层流量清洗系统丨大疆 VS "白帽子"丨抢购软件 "第一案"丨企业安全建设丨Aadhaar 数据泄漏丨朝鲜APT组织Lazarus丨31款违规A ...

随机推荐

  1. Mysql管理工具SQLyog

    SQLyog_Enterprise 用户名:yunjian 注册码:81f43d3dd20872b6   http://download.csdn.net/detail/shel_lee/585361 ...

  2. 用Python抓网页的注意事项

    用Python编一个抓网页的程序是非常快的,下面就是一个例子: import urllib2 html = urllib2.urlopen('http://blog.raphaelzhang.com' ...

  3. JBPM4入门——5.流程定义的发布、查询、删除

    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...

  4. POI取消科学计数法

    前台输入手机号13777777777,如果是为Double类型接收,就会自动转为科学计数法 找了下,一般是Double转String,方法一般有两种: 1.利用String.format() sale ...

  5. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...

  6. Nodejs_day02

    Nodejs的事件模块 var events = require('events'); var eventEmitter = new events.EventEmitter();//创建EventEm ...

  7. 一.JSP开发的工具下载与环境搭建

    JSP技术的强势: (1)一次编写,到处运行.在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改. (2)系统的多平台支持.基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统 ...

  8. PHPCMS V9实现硬件地址MAC绑定访问技术实现

    目的:会员登录需要 用户名.密码.身份识别码(新增字段) 效果:  解决方法: 目前数据库中macaddress字段已经添加,修改了phpcms\modules\member\index.php 63 ...

  9. Context3D 不可用

    打开项目文件夹中的html-template,并找到index.template.html,右键使用TextEditor编辑,在params.allowfullscreen=”true”:后面加上pa ...

  10. 怎么利用C#中的 webclient 创建cookie

    Cookies are not limited only to web browsers. any http-aware client that supports cookies can deal w ...