文章插图
前言H5移动应用作为个人生活、办公和业务支撑的重要部分,也面临着来自移动平台的安全风险,不仅仅来自于病毒,更多的是恶意的攻击行为、篡改行为和钓鱼攻击 。关于H5页面的安全测试,业务逻辑功能测试基本和WEB渗透测试是通用的 。
从业务安全角度考虑,一般客户端与服务端通信会进行加密,防止被刷单、薅羊毛等攻击,需要对数据加密加密处理 。所以我们必须了解各种加密方式 。开发者常会用到AES(Advanced Encryption Standard)加密算法,在此对H5页面的漏洞挖掘案例分享给大家 。
前置知识AES加密模式介绍AES加密的模式主要有五种:ECB (电子密码本模式)、CBC(密码分组连接模式)、CTR(计算器模式)、CFB(密码反馈模式)、OFB (输出反馈模式) 。这五种工作模式主要是在加密器的使用上有所区别 。在这里主要介绍下ECB和CBC这两种开发者最常用的两种加密方式 。
ECB模式
其使用方式是一个明文分组加密成一个密文分组,相同的明文分组永远被加密成相同的密文分组 。直接利用加密算法分别对每个64位明文分组使用相同的64位密钥进行加密 。每个明文分组的处理是相互独立的 。
优点:
简单 。
有利于并行计算 。
缺点:
相同的明文块会加密成相同的密文块,安全性低 。
CBC模式
引入一个初始向量IV,它的作用跟MD5加盐有些类似,可以防止相同的明文块加密成同样的密文块 。IV是初始向量,参与第一个明文块的异或,后续的每一个明文块,都与它前一个密文块相异或 。这样就能保证相同的明文块不会被加密为相同的密文块 。优点:能隐蔽明文的数据模式,在某种程度上能防止数据篡改, 诸如明文组的重放,嵌入和删除等,安全性高 。缺点:无法并行计算,性能相对ECB低,会出现错误传播(errorpropagation) 。
案例在一次金融行业的漏洞挖掘过程中,从发现请求和返回数据包全程加密 。我们该如何突破数据包加密,并自动化暴力破解登陆 。继续深度挖掘发现存在越权漏洞,最终获取大量账户敏感信息 。
发现加密浏览器访问H5页面登录接口 。
文章插图
随意输入一个手机号和密码,点击登陆 。利用Burp抓包查看,发现请求和响应数据包全过程加密 。
文章插图
破解加密算法右键查看登陆网页源代码寻找加密方法:
点击登录调用前端onLoginBtnClick方法,获取用户请求数据requestData,在调用ajax请求中发送未加密的数据内容 。
文章插图
ajax请求函数postData:全局搜索postData函数,最终在common.js找到 。在发送请求中发现加解密函数:加密函数encrypt和解码函数decrypt 。
文章插图
因为一般插件的js文件都是非格式化存储的,调试时非格式化文件不能直观显示,我们格式化代码后再调试查看 。发现使用AES加密ECB模式PKCS7Padding填充,密钥key硬编码在js代码中 。
文章插图
我们编写Python脚本解密登录请求数据包,成功拿到明文请求数据包 。
文章插图
由于登录没有验证码机制 。我们可以利用登陆接口和服务端返回的提示信息,可以批量枚举平台用户手机号,而且发现登陆密码是纯6位数字,首选密码是123456,进行尝试自动化暴力破解 。
在执行Python脚本的时候,发现不允许重放请求数据包,那肯定是存在签名校验,用于防止攻击者重放请求数据包 。
通过diff请求数据包,确认是校验请求头中的replayId值 。我们去代码中定位replayId值是如何生成的 。
文章插图
在JS文件中搜索replayId,发现replayId变量是调用guid函数赋值的 。
文章插图
继续定位guid函数,到这里我们已经成功拿到请求和响应数据包的加解密过程,和guid生成的过程 。
推荐阅读
- 蒙特卡洛方法分析Web页面浏览量
- js浏览器打印指定div
- 为啥盗墓贼总比考古学家先找到墓 挖掘兵马俑那盗墓老头
- H5页面性能指标解读
- 【网络安全】关于OracleWeblogic远程代码执行高危漏洞的预警通报
- 汉代以前墓葬形制普遍为 挖掘了三座西汉时期墓葬被命名为
- 漏洞扫描工具整理
- Web缓存欺骗攻击
- 文件上传绕过
- 漏洞分析之thinkPHP反序列化:这就是黑客的世界吗