文档章节

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

阿里聚安全
 阿里聚安全
发布于 2017/01/09 11:27
字数 1456
阅读 12
收藏 0

#阿里聚安全攻防挑战赛第三题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、跳转到自定义的可执行内存

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

© 著作权归作者所有

共有 人打赏支持
阿里聚安全
粉丝 29
博文 89
码字总数 191047
作品 0
杭州
私信 提问
20万大奖等你拿!阿里聚安全攻防挑战赛报名开启!

“阿里聚安全攻防挑战赛” 已成功举办过两届,并逐渐成为安全行业经典赛事品牌,本届更是推出史上最强权威导师助阵,是业界不可错过的年度盛事!挑战赛主要让参赛选手真实的挑战阿里巴巴移动...

阿里聚安全
2016/12/12
91
0
20万大奖等你拿!阿里聚安全攻防挑战赛报名开启!

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

阿里聚安全
2016/12/02
6
0
ISCC2018 (比赛通知)

这个比赛是在今年的5月份举办的,当时没有写这个关于比赛的通道,今天补上吧,希望各位小伙伴不要介意哦! 第15届(2018)全国大学生信息安全与对抗技术竞赛(ISCC2018)通知 1 竞赛简介 信息安全...

落花四月
2018/06/04
0
0
浅谈Android应用保护(零):出发点和背景

浅谈Android应用保护(零):出发点和背景 作者:纳池@阿里移动安全 近几年来,无线平台特别是Android平台的安全逐渐成为各厂商关注的重点。各种新的思路和玩法层出不穷。所以,笔者基于前一...

阿里聚安全
2016/04/12
172
0
面对面传功丨ISC 2018安全训练营大师班招生开启

  9月4日-6日,亚太地区规格最高、规模最大、最具影响力的安全盛会——互联网安全大会(ISC2018)即将召开。作为每届大会的特色项目,被称为互联网安全界猎人学校的安全训练营将于9月6日再...

FreeBuf
2018/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx反向代理配置去除前缀

使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法: 方法一:...

架构师springboot
19分钟前
1
0
QianBill API 开发笔记

JWT

BeanHo
30分钟前
2
0
Elasticsearch实战篇——Spring Boot整合ElasticSearch

当前Spring Boot很是流行,包括我自己,也是在用Spring Boot集成其他框架进行项目开发,所以这一节,我们一起来探讨Spring Boot整合ElasticSearch的问题。 本文主要讲以下内容: 第一部分,通...

JAVA_冯文议
40分钟前
3
0
不错的linux下通用的java程序启动脚本

#!/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7...

sprouting
今天
3
0
Linux manjaro系统安装后无法连接wifi,解决方案

笔记本为联想 thinkpad E480 首先通过命令lspci -k看一下原因是否为缺少wifi驱动,如下,如果没有Kernel driver in use,说明缺少驱动。 05:00.0 Network controller: Realtek Semiconducto...

bluecoffee
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部