iOS客户端hack的两种姿势

标签: 移动安全 | 发表时间:2016-01-27 02:24 | 作者:titan
分享到:
出处:http://drops.wooyun.org

分析某商城漏洞,在漏洞验证时采用了两种iOS上的hack工具:cycript和reveal,各有风情,均能攻城拔寨,实乃我辈日常居家、杀人越货之利刃,现与诸君共享之。

0x00 漏洞缘起


该商城的iOS版app为用户提供了找回密码的功能,用户需通过三个步骤找回密码:

  1. 输入一个本地的图形辨识验证码(多余?)
  2. 提供用户手机号,输入一个短信验证码
  3. 输入新的密码、确认密码,然后Bingo

要找漏洞,先抓包看看,先易后难,实在不行再做逆向分析。burp架起先,开代理、关闭intercept、ssl协议算法全勾上(免得碰上奇葩ssl协商参数,以前遭过冤枉)。iPhone上在wifi选项中配置代理,指向burp。然后开app,burp报错。

enter description here

难道客户端对证书进行了pin?冷笑三声,开启我的ssl kill switch。再开程序,登录,进商城,一切顺利。ok,现在进入正题,找漏洞。进入找回密码功能,按步骤进行提交,重设了密码,然后到burp中查看抓到的数据包,下面是重置密码第三步发出的post数据包。

enter description here

仔细分析这个数据包,发现除了一个签名,其它跟第二步获得的手机短信验证码没有一毛钱的关系,难道这个“你妈是你妈”问题的验证是在客户端做的?那我们是不是改改电话号码就能重置任意用户密码了?在burp中改包试了试,不行的,服务器返回错误。看来在Sign中有文章,看来需要从客户端想办法了。

丢到ida中跑,找到如下关键函数:

enter description here

然后再初略的溜了一下该函数涉及到的各种参数。

enter description here

好像没有涉及到第二步中的短信验证码,应该只是把电话号码、新口令作为签名的可变输入。不错,省得逆向签名算法了,人生苦短,可以节约一堆脑细胞了。基本思路出来了,就是正常执行前两步,然后在第三步中将界面电话号码(用户账号)改为其它被攻击的账号。

0x01 cycript大法


先介绍一下cycript,官方解释:

Cycript allows developers to explore and modify running applications on either iOS or Mac OS X using a hybrid of Objective-C++ and JavaScript syntax through an interactive console that features syntax highlighting and tab completion.

简而言之:插入进程,想改就改。不过这货是命令行模式,混合了ObjectC和JS,官方帮助写的精简了点,还是稍微有点烦。不过自带了tab键补全功能,略感欣慰。下面一步步来使用。

实现目标的先决条件是要找到找回密码过程第三步界面对应的对象,然后对该对象中与注册手机号码相关的属性进行操作。

先要将app运行到我们要攻击的第三步,也就是输入新口令和确认新口令的界面,我们的目标是使用hack方法修改不可编辑的注册手机号。

enter description here

当然,我们也要先将app使用classdump将app的类信息获取,发现了其中与口令重置相关的信息如下,可以辅助下一步的攻击工作。

enter description here

使用ps命令获得被注入的进程信息,然后使用如下命令启动cycript,涂红部分为进程名称,当然,使用pid也可以。

enter description here

然后获得当前app的UI句柄。

enter description here

获得app的keyWindow。

enter description here

获得keyWindow的rootViewController。

enter description here

获得当前可视的ViewController。做界面hack,前几步基本是一样的,目的就是找到当前显示界面对应的对象。

enter description here

各位看官发现没的,这个FindPwdViewController正是我们使用classdump发现的密码重置类,看来接近问题答案了。

enter description here

接下来可以直接根据classdump出的类信息敲入如下命令:

enter description here

看到text没得,就是界面显示的注册手机号,改改改!

再看手机上,注册手机号已经修改成了目标手机号。点击完成,成功!

0x02 reveal大法


reveal工具其实应该被奉为界面hack的第一利器,无它,太好用了。各位可能还在纠结上面敲入的各种烦人命令,如果对ObjectC和面向对象思想以及各类砸壳、dump工具不熟的化,要完成cycript大法,还真不是一件容易活。但reveal不同,在安装好后,就是轻轻的点点鼠标,敲个电话号码的事。

不过还是有石头要挡道,就是reveal在手机端的安装。下面是笔者的安装经验:

reveal原本是作为xcode的辅助工具,为app开发者使用的,本不具备插入任意程序的功能,但在越狱的iphone上借助cydia substrate可以插入任意app,包括springboard,安装方法参见 参考1。笔者是在iOS9上装的,一定要按这篇文章说得,把framework搞到手机端,另外,plist文件要用plisteditor等专用工具编写,还有就是Filter一定要写,要不然就是iPhone6S Plus也会慢的无法忍受!如果出现这种窘境,立即home+power硬关机,按音量+开机跳过substrate,重新进行Filter配置。最后提醒一句,reveal所在的主机和被调试手机要在同一局域网。

reveal安装好之后,需要找到被注入程序的bundle id,就在app的ipa包的info.plist文件中,使用plisteditor等工具打开,搜CFBundleIdentifier就能找到,下面涂红的部分即是。

enter description here

找到bundle id后将其填到Filter中即可。启动程序,在reveal的connect目标中会发现目标app,直接connect,reveal中会出现手机端app的界面。借一张上面文章的图,各位感受一下,各种界面元素一览无余,而且可以3d显示层级关系,酷。

enter description here

更酷的是,它可以直接修改界面元素的内容,不管在原手机端该元素是否可编辑,并且编辑后直接反应到手机端界面。

有了这种功能,要应付我们本漏洞验证的目标就太容易了,啪啪啪走到第三步,刷新reveal段界面,在如下图中直接编辑注册手机号内容,回车,再在手机端点击完成,ok。

enter description here

0x03 总结


cycript和reveal其实都根植于cydia substrate这棵大树,不过风格迥异罢了。一个是玲珑剑,需要舞者精心驾驭,一个是大砍刀,直接快意杀伐。不过爽的是我可以左手玲珑剑,右手大砍刀,仰天长啸,快意恩仇,不亦乐乎!

0x04 参考


相关 [ios 客户端 hack] 推荐:

iOS客户端hack的两种姿势

- - WooYun知识库
分析某商城漏洞,在漏洞验证时采用了两种iOS上的hack工具:cycript和reveal,各有风情,均能攻城拔寨,实乃我辈日常居家、杀人越货之利刃,现与诸君共享之. 该商城的iOS版app为用户提供了找回密码的功能,用户需通过三个步骤找回密码:. 输入一个本地的图形辨识验证码(多余. 提供用户手机号,输入一个短信验证码.

Tweetbot:iOS 平台上最高效的 Twitter 客户端

- Xuyang - 爱范儿 · Beats of Bits
虽然 Twitter 官方不鼓励第三方再开发 Twitter 客户端,但是似乎无法阻挡开发者的步伐,最新上架的 Tweetbot 获得了媒体和用户一致的好评,现在得分是四星半,总共有 520 次评分. Daring Fireball 的 John Gruber 最喜欢 Tweetbot 的两点是:第一,当你点击一条 Tweet 的时候,这条 Tweet 下面会出现操作按钮,大量第三方客户端则是进入单独页面,回到时间线需再按“退出”按钮;第二,在 Tweet 上自左向右滑动会出现对话界面,大量第三方客户端都有这个功能,但只有 Tweetbot 的最高效.

iOS客户端开发与Web前端开发

- - bang's blog
不知不觉做iOS客户端开发已经半年多了,了解到iOS客户端开发与Web前端开发的一些异同,写一下. 用户角度上看,客户端升级必须让用户手动下载整个新的安装包覆盖安装,而web的升级无需用户做任何事情. 开发角度上看,如果客户端有个小bug需要紧急修复,需要修复完后打包一个完成的安装包,给一个版本号,发布给用户升级.

朋游风景网推出iOS、Android 客户端,瞄准智能旅游市场

- Draven - 36氪
以前外出旅行,跟团的话,总是觉着被牵着走特别不爽;自己玩又不知道按照什么路线,又不知道各个景点背后有什么故事. 这时候就会想,有没有一个手机App,去一个景点时,它可以为你自动规划参观路线,同时还为你介绍每个景点的相关信息呢. 广州创业公司朋游风景网 就打算解决这个问题. 朋游风景于8月1日正式上线了其网站,并同期发布了iOS 应用、Android 应用.

QQ邮箱iPhone客户端强势登场:经过iOS 4.0 测试

- 洞箫 - cnBeta.COM
新版iOS5总算是千呼万唤始出来,其中,内置QQ邮箱这一点更是吸引了众多中国果粉的眼球. 同样值得关注的是,QQ邮箱的官方iPhone客户端近日强势登陆App Store,已经过 iOS 4.0 测试,只需要iOS 3.0 或更高版本即可下载使用.

从简书iOS客户端,来谈谈Hybrid方案细节设计 - 简书

- -
作为一位 iOS 开发人员,你应该已经敏感地发现,自己的工作涉及内容已经不止于 Native 的部分,因为 Hybrid App 和 ReactNative 等技术方案已经不仅仅是概念,越来越多的公司开始着手自己的 Hybrid 方案以及 ReactNative 本地化工作. 介绍相关概念的优秀文章已经有许多,方案的实现原理你也应该已经或多或少有了一些理解.

CSS的Hack大搜集

- - CSDN博客Web前端推荐文章
  Hack在CSS的编写中是经常被用到的一种技术. 之所以出现了Hack,是因为各个浏览器的解析有专属于自己的写法的. 不过,Hack虽然是如此的好用,作为前端写代码的我们来说,用它绝对是快准狠的解决了问题,但是不太推荐大家用Hack.   Hack的技术是针对不同浏览器写不同的样式,让浏览器达到不同的渲染效果.

继Android版后,成都公交手机二维码iOS客户端正式推出

- - 雷锋网
还记得去年11月23号雷锋网的那条微博么. 成都公交手机二维码终端亮相:推出Android系统客户端,下载后手机扫描站台二维码可直接查询公交位置、线路信息、换乘方式等信息. 在继Android客户端之后,支持iPhone的iOS客户端测试版正式亮相. 手机登陆www.10628106.com即可下载安装.

推送通知iOS客户端编写实现及推送服务器端编写

- - CSDN博客移动开发推荐文章
推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主要介绍iOS客户端编程,推送通知的编程比较简单,编程的关键是获得令牌,这是从APNS返回的,然后还有把提交给内容提供商. 下面我们看看开发之前的一些准备工作. 编写iOS推送应用需要在Xcode工程中进行一些配置,这些配置是主要是设置代码签名标识,代码签名标识的前提要有配置概要文件(Provisioning Profiles).

为什么 Facebook 发明新语言“Hack”

- - 开源中国社区最新新闻
为什么Facebook发明新语言“Hack”.  (注:Hack是一种PHP的派生语言). 为了替换掉那些有年头的老代码,Facebook创建了一个新的语言. 这个故事来自Facebook工程师Julien Verlaguet和Ed Smith的一次访谈. 2004年2月,扎克伯格(Mark Zuckerberg)的哈佛同学们第一次登陆Facebook,服务器里运行着PHP.