首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
Android安全
发新帖
2
0
阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
发表于: 2017-1-9 14:18
4262
阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
阿里安全
1
2017-1-9 14:18
4262
阿里聚安全攻防挑战赛第三题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,官方文档链接:
b2cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2U0K9s2u0G2L8h3g2Q4x3X3g2U0L8$3#2Q4x3V1k6E0N6h3I4@1K9h3c8W2N6X3W2U0k6g2)9J5c8X3q4F1k6s2u0G2K9h3c8Q4x3V1k6A6L8Y4c8W2L8Y4c8K6i4K6t1$3L8X3u0K6M7q4)9K6b7W2!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4g2)9^5c8W2)9^5c8q4!0q4y4W2!0n7x3g2)9^5y4#2!0q4y4#2!0n7b7#2)9&6y4V1g2^5j5h3#2b7N6$3&6Q4x3X3g2S2M7r3E0Q4c8e0k6Q4z5e0k6Q4z5o6N6Q4c8e0c8Q4b7V1u0Q4b7U0k6Q4c8e0g2Q4z5p5k6Q4z5e0q4Q4c8e0N6Q4z5p5g2Q4b7U0m8m8L8X3c8J5L8$3W2V1e0h3q4F1K9h3k6W2M7%4c8Q4x3X3g2^5L8h3I4Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8e0k6Q4z5f1g2Q4z5f1y4Q4c8e0N6Q4z5o6c8Q4b7U0k6Q4c8e0k6Q4z5f1y4Q4z5o6W2Q4c8e0k6Q4z5p5g2Q4b7e0g2Q4c8e0g2Q4z5p5k6Q4z5e0N6Q4c8e0N6Q4z5f1u0Q4b7U0S2Q4c8e0g2Q4z5o6g2Q4b7U0y4A6L8Y4c8W2L8Y4c8Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4z5o6k6Q4z5o6g2Q4c8e0g2Q4b7f1g2Q4b7U0W2Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0g2Q4b7e0k6Q4z5o6u0Q4c8e0g2Q4z5f1u0Q4b7V1g2Q4c8f1k6Q4b7V1y4Q4z5f1p5`.
类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月都曝出过漏洞。
详情见:
a9cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6L8%4g2J5j5$3g2Q4x3X3g2S2L8X3c8J5L8$3W2V1i4K6u0W2j5$3!0E0i4K6u0r3K9h3&6@1L8q4)9J5c8Y4g2K6i4K6g2X3b7f1I4x3i4K6u0r3M7$3g2U0N6i4u0A6N6s2W2Q4x3V1k6T1N6h3I4D9k6i4c8A6L8W2)9J5c8U0t1H3x3e0k6Q4x3X3b7I4x3W2)9J5k6o6l9I4i4K6u0W2K9s2c8E0L8l9`.`.
ab6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6L8%4g2J5j5$3g2Q4x3X3g2S2L8X3c8J5L8$3W2V1i4K6u0W2j5$3!0E0i4K6u0r3K9h3&6@1L8q4)9J5c8Y4g2K6i4K6g2X3b7f1I4x3i4K6u0r3M7$3g2U0N6i4u0A6N6s2W2Q4x3V1k6T1N6h3I4D9k6i4c8A6L8W2)9J5c8U0t1H3x3e0N6Q4x3X3b7H3x3g2)9J5k6o6l9I4i4K6u0W2K9s2c8E0L8l9`.`.
但光看源代码基本不能利用。所以说出题者应该放了其他漏洞在里面。
反汇编看到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、跳转到自定义的可执行内存
作者:蚂蚁金服巴斯光年实验室,更多关于阿里的安全技术文章,请访问
阿里聚安全博客
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
收藏
・
2
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
7
)
AqCxBoM
雪 币:
63
活跃值:
(464)
能力值:
( LV3,RANK:20 )
在线值:
发帖
2
回帖
53
粉丝
0
关注
私信
AqCxBoM
2
楼
厉害了我的哥!
2017-1-9 14:21
0
lynnux
雪 币:
3974
活跃值:
(2307)
能力值:
( LV6,RANK:93 )
在线值:
发帖
25
回帖
384
粉丝
19
关注
私信
lynnux
3
楼
其他题呢
2017-1-9 14:27
0
青涩
雪 币:
68
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
17
粉丝
0
关注
私信
青涩
4
楼
前排广告位出售(>▽<)
2017-1-9 14:27
0
Zkeleven
雪 币:
53
活跃值:
(136)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
124
粉丝
0
关注
私信
Zkeleven
5
楼
不错,期待其他题解。
2017-1-9 14:45
0
hqdvista
雪 币:
8
活跃值:
(61)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
14
粉丝
0
关注
私信
hqdvista
6
楼
哈哈,引用了我报的几个framesequence漏洞,是不是要credit下。其实那几个里有的不考虑ASLR还是以以利用的。
2017-1-9 16:54
0
trackway
雪 币:
38
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
23
粉丝
1
关注
私信
trackway
7
楼
能不能来个一二题讲解
2017-1-10 13:19
0
riusksk
雪 币:
433
活跃值:
(1895)
能力值:
( LV17,RANK:1820 )
在线值:
发帖
169
回帖
2648
粉丝
279
关注
私信
riusksk
41
8
楼
这题目出得不错!
2017-1-12 15:34
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
阿里安全
1
108
发帖
123
回帖
70
RANK
关注
私信
他的文章
[推荐]阿里90后工程师利用ARM MMU硬件特性开启安卓8终端的上帝模式
11054
[分享] RSAC 2018:人工智能成为驱动网络安全的新 “引擎”
2715
[分享]阿里安全X实验室最新黑科技:“人脸识别”3.0版可毫秒识破假人脸
2658
[分享]前沿 | 抗击黑产 阿里安全八大实验室首秀技术实力
3340
[分享]阿里云在RSAC 2018上宣布 将在西雅图建立安全实验室
3210
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部