漏洞挖掘|遇到APP数据加密如何解密测试

admin 2024年11月26日23:26:58评论18 views字数 2439阅读8分7秒阅读模式

原文首发在:Freebuf社区

https://www.freebuf.com/articles/mobile/413935.html

文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!

0x01 加解密的意义

漏洞挖掘|遇到APP数据加密如何解密测试

相信大部分测试过app的好兄弟都被这个问题困扰过,app数据包部分字段被加密,又或者是整个数据包被加密,这种大部分是json的数据你不解开根本就没法测试。于是乎本教程就出来了,本篇主要针对ios-app做一个初步的解析。

首先如图所示,类似这样的大概率是aes加密

AAAAA+AAAAA/AAA=

对初级加密还有不懂的朋友可以看我上篇文章,本文就不过多赘述了

经验分享 | WEB渗透测试中遇到加密内容的数据包该如何测试 - FreeBuf网络安全行业门户

0x02 先说解密实战与结果

一次项目中遇到的

漏洞挖掘|遇到APP数据加密如何解密测试

密码字段加密

漏洞挖掘|遇到APP数据加密如何解密测试

使用frida-trace -i “CCCrypt” hook ios成功拉取到了key与iv

漏洞挖掘|遇到APP数据加密如何解密测试

可以看到也是成功的还原了加解密数据

漏洞挖掘|遇到APP数据加密如何解密测试

漏洞挖掘|遇到APP数据加密如何解密测试

0x03 基础概念与准备

首先你需要有一个越狱的苹果手机+你准备测试的app

在pc端与苹果端部署好frida环境,可参考网上写好的文章

【iOS安全】越狱iOS安装Frida | Frida使用 | 修改Frida-trace源码_ios frida-CSDN博客

frida-trace -UF -i “CCCrypt”

然后这条命令是在你开启app时候使用的 意思是

frida-trace = 你的frida工具

-UF = 指定当前打开正在运行的app

-i = 选择模式

“CCCrypt” = 这是一个苹果默认的加密框架,你可以看到很多加密都是从这个框架里走的,因为苹果app商店审核机制非常的严格,你用一些自研的加密方式可能会上不了商店,这就是你为啥要钩这个的原因。

frida和burp抓包其实差不多也是在特定时间点触发特定事件的时候去捕获数据,这个CCCrypt就是执行加解密操作的时候,应该很好理解。

感兴趣的可移步

CCCrypt函数——iOS加解密必知-CSDN博客

漏洞挖掘|遇到APP数据加密如何解密测试

在你执行完成这一步的时候本地会生成钩取该函数的脚本,打开并修改成如下提供的脚本

{
/**
* Called synchronously when about to call CCCrypt.
*
* @this {object} - Object allowing you to store state for use in onLeave.
* @param {function} log - Call this function with a string to be presented to the user.
* @param {array} args - Function arguments represented as an array of NativePointer objects.
* @param {object} state - Object allowing you to keep state across function calls.
*/
onEnter(log, args, state) {
log('CCCrypt() → 操作类型→', args[0]);
log('CCCrypt() → 算法类型→', args[1]);
log('CCCrypt() → 填充模式→', args[2]);
log('CCCrypt() → 算法密钥→', hexdump(args[3]));
log('CCCrypt() → 密钥长度→', args[4]);
log('CCCrypt() → 算法 IV→', hexdump(args[5]));
log('CCCrypt() → 加密/解密内容→', hexdump(args[6]));
log('CCCrypt() → 加密/解密结果→', hexdump(args[8]));
},

/**
* Called synchronously when about to return from CCCrypt.
*
* See onEnter for details.
*
* @this {object} - Object allowing you to access state stored in onEnter.
* @param {function} log - Call this function with a string to be presented to the user.
* @param {NativePointer} retval - Return value represented as a NativePointer object.
* @param {object} state - Object allowing you to keep state across function calls.
*/
onLeave(log, retval, state) {
}
}

这个是为了方便回显我们查看。

0x04 数据包的定义

漏洞挖掘|遇到APP数据加密如何解密测试

此处hook到了密钥和iv

从算法类型判断0x0为aes128 加密算法

以下是参考

0x0 aes128
0x1 des
0x2 3des
0x3 cast
0x4 rc4
0x5 rc2

填充模式的参考如下

0x1 是pkcs7padding
0x2 是ecb 密钥

因为aes128他密钥是16字节

漏洞挖掘|遇到APP数据加密如何解密测试

iv也是16字节

漏洞挖掘|遇到APP数据加密如何解密测试

所以我们这里得到他的密钥和iv

密钥:30313032303330343035303630373038

iv:30313032303330343035303630373038

然后就可以愉快的加解密去继续渗透了

0x05 总结

此处的最难点在于,你得买个苹果手机hhh。

本文用到的加解密网站推荐

加密:http://tool.chacuo.net/cryptaes

解密:https://www.ddosi.org/code/#recipe=Generate_all_hashes('All',true)

因为aes会有不同的填充类型 有时候会踩坑

也可以用utools的加解密 也是用起来很顺手

漏洞挖掘|遇到APP数据加密如何解密测试

最后的最后 如果你对本篇有不懂的或者想要交流技术的可以私信我 回见~~

原文始发于微信公众号(亿人安全):漏洞挖掘|遇到APP数据加密如何解密测试

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月26日23:26:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞挖掘|遇到APP数据加密如何解密测试https://cn-sec.com/archives/3436918.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息