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

举报
亿人安全 发表于 2024/11/30 21:36:33 2024/11/30
【摘要】 原文首发在:Freebuf社区https://www.freebuf.com/articles/mobile/413935.html文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!0x01 加解密的意义相信大部分测试过app的好兄弟都被这个问题困扰过,app数据包部分字段被加密,又或者是整个数据包被加密,这种大部分是json的数据你...

原文首发在:Freebuf社区

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

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

0x01 加解密的意义

图片

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

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

AAAAA+AAAAA/AAA=

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

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

0x02 先说解密实战与结果

一次项目中遇到的

图片

密码字段加密

图片

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

图片

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

图片


图片

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博客

图片

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

{
  /**
   * 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 数据包的定义

图片

此处hook到了密钥和iv

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

以下是参考

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

填充模式的参考如下

0x1 是pkcs7padding
0x2 是ecb 密钥

因为aes128他密钥是16字节

图片


iv也是16字节

图片


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

密钥:30313032303330343035303630373038

iv:30313032303330343035303630373038

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

0x05 总结

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

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

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

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

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

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

图片

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。