作者:雪诺凛冬实验室 · kitezzzGrim
前端的加解密是比较常见的,无论是 web 后台还是小程序,都常常存在加解密传输,签名防篡改等机制,会使很多渗透人员没有办法直接对参数的值进行更改,大大增加了攻击者的攻击成本。
本文将结合一些实践案例,总结一些常见的前端加密场景与大家分享。
MD5 案例
很常规的一个登录页面,抓包查看登录请求,可以发现 password
字段被加密处理
通过搜索登录路径,定位到加密函数,可以看出调用了 JS-MD5
库
对 password
字段的处理相当于 md5(md5())
,二次 md5
在控制台,对js中的函数和值进行输出,看是否可以得到我们需要的结果
接下来在 burp 中的 payload processing , hash 2 次即可
DES 案例
抓包查看登录请求
可以看到目标站点对 username
和 password
字段都进行了加密
查看调用的js代码
可以发现是 des 加密,调用 des.js
这个js文件
在控制台可以直接调用这个加密函数
DES.Encrypt("admin")
查看 des.js
文件
做了混淆,搜了下,是类似 eval(function(p,a,c,k,e,r){})
的加密,有在线还原的站点
得到 DES 的密钥值
AES 案例
抓包查看登录请求
可以看到目标站点对 username
和 password
字段都进行了加密
查看调用的 js 代码
从以上代码可以看出 userLogin()
函数中调用 encrypt()
函数对用户名和进行了加密,接下来全局追踪并查看 encrypt()
函数
可以看出使用了 AES 加密,ECB 模式,填充模式 pkcs7padding
,密钥 key=1234567887654321
同时,控制台也可调函数进行加密
encrypt('admin')
也可以结合 BurpCrypto
插件爆破账号密码
填写key,按指定的格式添加 processor
在加载 payload processing 时可选择 invoke burp extension 里添加的 processor
RSA 案例
抓包查看登录请求
可以看到目标站点对 username
和 password
字段都进行了加密, 并且结果很长,很大可能是 rsa 加密
查看调用的 js 代码
可以看到 publickey
和 encodeRSA
关键字,目标站点对用户和密码都进行了 rsa 加密
此时,控制台可调函数进行加密
var publicKey = 'xxxxx';
encodeRSA('admin', publicKey)
JSEncrypt 的默认 RSA 加密机制是 RSAES-PKCS1-V1_5
,而且还会进行 base64 编码
签名
在很多业务中,签名的作用是防止请求包被篡改
目标小程序存在签名,需要伪造进行越权测试
反编译审计代码,搜索 sign 签名算法
关键字:sign signature
a.data 判断有没有 post 内容,有就第一个表达式,没有则第二个表达式, i 是 xxxx123456 u 是 url.substr(1) 后面加 post 的内容 i 是时间 算个 md5 后面的表达式 xxxx 拼接 xxxx123456 url 以及时间戳
本地调用 js,生成任意手机号签名
通过伪造的签名,可具备任意用户权限,可查看、修改任意用户信息
总结
前端加密用 JSEncrypt 库的很多,为了节省时间,可以直接试试搜一些 jsencrypt 相关的方法名,如 setPublicKey
、encrypt
等, 定位加密函数
关键字:Crypto AES DES RSA key password encrypt
前端加密作为在用户侧的防御手段,既增加攻击成本,又不影响业务,可谓是一种符合所有场景的防御办法,但前端传递参数的加密也需要配合js代码的混淆,否则攻击者依然可以轻易的绕过。
雪诺凛冬实验室
雪诺凛冬实验室,隶属于北京雪诺科技,聚焦零信任赛道。主要职能包括红队技术、安全狩猎等前瞻攻防技术预研、工具平台孵化。团队成员曾多次参与大型攻防演练并获得优异名次,在渗透测试、红蓝对抗、应急响应等服务方向拥有丰富的实战经验。
发表评论
您还未登录,请先登录。
登录