在上一篇文章中,我向大家介绍了有关利用iOS DeveloperImage中一些特性的方法,其中包括在已越狱设备上启动带有自定义环境变量的App。说实话,我的最初动机是为了寻找沙箱逻辑问题,但失败了。值得庆幸的是我发现了另一个非常实用的技巧,即通过利用其中的一些特性来提取SQLite数据库。该方案需要屏幕解锁和可信USB连接。
为了运行完整的实验,你需要安装以下工具:
https://github.com/libimobiledevice/libimobiledevice
https://github.com/libimobiledevice/ideviceinstaller
https://github.com/emonti/afcclient(可选。如果你不想自己编写libimobiledevice的代码,就用这个)
SQLite日志记录
iOS上当前内置的SQLite支持调试选项:如果设置了SQLITE_SQLLOG_DIR环境,则每个数据库在给定目录中都会有一个副本,且sql查询为纯文本形式。
sqlite文档:https://www.sqlite.org/src/doc/trunk/src/test_sqllog.c
我们的实验从一个越狱设备开始。只需启动带有SQLITE_SQLLOG_DIR的Gmail应用程序,指向它有权写入的位置:
修改上一篇文章中的脚本,向环境添加一个新密钥:
以下是为目录生成的内容:
文件名中的05860是pid,格式化为固定的5位数。idx文件是原始数据库的映射索引。
例如,所有 /var/mobile/Containers/Data/Application/E89CEF28–30BA-41F8-BDB3-BD05E0598D32/Library/Application Support/data/johnsmith@outlook.com/sqlitedb 的查询被记录在了sqllog_05860_00000.sql文件中。
sqllog_05860_00.db是其副本。
未越狱设备
现在问题是,iOS上的应用程序被“监禁”在容器中,如果没有完整备份将仍然无法访问这些容器。每个规则都有一个例外,沙箱配置文件也不例外。
某些内置应用程序有写入权限到 /var/mobile/Media/iTunes_Control/iTunes 目录。
以及一些应用程序还拥有 com.apple.security.exception.files.absolute-path.read-write 或 com.apple.security.exception.files.home-relative-path.read-write 权限。
你可以通过以下命令读取这些权限。
VioceMemo:
MobileSafari:
iOS允许在 /var/mobile/Media 中进行沙箱文件访问。许多第三方iPhone管理工具允许你直接操作此位置,甚至还会提供一个GUI界面。
另一个可读的位置是CrashReporter。你可以使用idevicecrashreport获取文件。
但需要提醒大家的是,并非所有内置的应用程序都有这些例外,更别说是那些第三方应用了。
Demo
在测试期间启动Instruments,并使用上一篇文章中的frida脚本将bundle ID更改为目标。
com.apple.mobilesafari
这里有Safari浏览器状态,书签,历史记录,每个站点首选项,HTML5本地存储甚至缓存。请注意,通常Cache.db不会包含在备份中,并且它是以纯文本格式存储http请求的。
com.apple.mobilemail
com.apple.mobilephone
地址簿和通话记录:
但你无法提取sms.db,因为它属于xpc服务IMDPersistenceAgent。消息应用com.apple.MobileSMS通过XPC与其通信,而不是打开数据库。
*参考来源:medium,FB小编secist编译,转载请注明来自FreeBuf.COM
领取专属 10元无门槛券
私享最新 技术干货