技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
前端加密对抗常见场景突破之进阶
1398133550745333
WEB安全
139浏览 · 2025-03-01 08:39
返回文档
前端加密对抗常见场景突破之进阶
前言
前面分析了几种最基础的,但是现在的前端加密往往都比较复杂,下面是几种更复杂的场景如何破局
AES+RSA 加密
这种加密方法说实话很难破局,所以我们的思路就得更换了
首先看前端的代码
PHP
复制代码
首先一大难点就是
PHP
复制代码
我们的 key 和 iv 是随机数了
而且更重量级的是
还会 RSA 去加密 AES 密钥和 IV
我们看看包
可以看见很复杂
这里有两个思路,直接改之后的逻辑,和修改加密的逻辑
修改加密逻辑
我们直接把 key 和 iv 固定,或者更容易的是直接把第一关的代码直接覆盖掉
把这串代码
直接覆盖
图片加载失败
然后我们再抓一个包
可以看到就和第一关一模一样了
图片加载失败
一样可以解码成功
但是后来发现不行
似乎后端会校验我们的参数,这里我再该了一下
尝试只修改 key 和 iv
图片加载失败
然后
图片加载失败
需要改一下正则
图片加载失败
任然可以解码成功
图片加载失败
成功
修改返回逻辑
经过前些管卡的尝试,我们自动了成功返回的是
{"success":true}
失败的并不重要
我们尝试直接修改前端的返回逻辑
拦截响应改为
发送就登录成功
图片加载失败
DES 规律 key
DES 加密,这个可以说是 AES 的前人吧
DES(Data Encryption Standard) 是一种对称加密算法,用于加密和解密数据。它被广泛用于商业和政府领域,但由于其密钥长度较短(56 位),如今已经被认为是不够安全的,并逐渐被更强大的加密算法(如 AES)所取代。
前端逻辑
这里的 key 和 iv 生成是有规律的
密钥(key)生成规律
从用户名中提取前 8 个字符(username.slice(0, 8))。
如果用户名长度不足 8 个字符,使用 '6' 填充直到达到 8 字节。
假设用户输入的用户名是 "admin123":
slice(0, 8) 提取的是 "admin123"(这个用户名恰好是 8 个字符,所以不需要填充)。
因此,key 就是 "admin123"。
如果用户名是 "alice"(只有 5 个字符),则:
slice(0, 8) 提取的是 "alice"。
使用 padEnd(8, '6') 填充,得到 "alice666",因此密钥是 "alice666"。
初始化向量(IV)生成规律
使用 "9999" 开头。
从用户名中提取前 4 个字符(username.slice(0, 4))。
如果用户名的长度不足 4 个字符,使用 '9' 填充。
首先 admin 是固定的
而且 admin 是明文传输的,我们只需要关注 password
而且 key 和 iv 都是根据 admin 来的
按照这个规律
key 就是
admin666
iv 是
9999admi
图片加载失败
图片加载失败
也是可以成功解码的
图片加载失败
成功
明文加签
首先需要了解 HMAC
HMAC(Hash-based Message Authentication Code)是一种基于哈希算法的消息认证码,用于验证数据的完整性和身份验证。它结合了一个密钥和消息的哈希值,使得即便消息被篡改,也无法计算出正确的签名。
原理
消息和密钥:HMAC 使用一个密钥(secret_key)和消息(data_to_sign)来生成签名。消息通常包含请求的参数或内容(如用户名、密码等),而密钥通常由服务器保管,不公开。
哈希算法:HMAC 使用一种哈希算法(通常是 SHA256)对消息和密钥进行加密运算。生成的签名确保了消息的完整性和不可篡改性。
签名校验:客户端将请求和生成的签名一起发送给服务器,服务器会根据相同的密钥和数据重新计算签名,如果计算出的签名与传递过来的签名一致,说明数据未被篡改。
抓一个包
这次的特点很明显,有签名,然后传输的是明文
我们看看 js 代码
首先生成了 nonce
nonce 是一个随机数,用于防止重放攻击。重放攻击是指攻击者截取有效的请求,并在之后重新发送该请求。使用 nonce 可以确保每次请求都有一个独一无二的标识,从而防止重放攻击。
然后生成时间戳
timestamp 是当前时间的秒级时间戳,它可以确保请求在一定的时间窗口内有效,防止因请求过期而被重放
然后就是签名的生成了
漏洞产生点
假设后台并没有对 timestamp 做有效的超时校验。这意味着服务器并不会检查 timestamp 是否过期。
我们就攻击思路如下
首先修改我们需要修改的数据,比如 password 字段等,然后保留原 nonce 和 timestamp:可以将原来的 nonce 和 timestamp 保持不变。这是关键,nonce 是唯一的标识,而 timestamp 如果没有有效的时间限制,就可以被一直使用
两个关键点
nonce 是唯一的,但没有时间限制:nonce 是为了防止重放攻击而设计的,理论上每个 nonce 都只能使用一次。如果服务器保存已经使用的 nonce 并拒绝重复的 nonce,攻击者就无法利用这个 nonce 再发送请求。
timestamp 没有超时限制:如果服务器没有对 timestamp 做超时校验(比如,时间戳与当前时间差超过了 30 秒就会被拒绝),那么攻击者就可以绕过这个机制。攻击者只需要在修改密码后,保持原始的 timestamp,并重新计算签名,就能伪造一个有效的请求。
参考
https://mp.weixin.qq.com/s/ZgD7qAQAsNlZgLtdZVCoFw
由于插件没有对应的解密算法,我们可以使用本地的算法
参考
https://github.com/SwagXz/encrypt-labs
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
没有评论
发布投稿
热门文章
1
2025ISCC练武区域赛和决赛pwn以及擂台pwn合集
2
通过Elastic EDR看smbexec并进行二次开发Bypass
3
php代码审计篇 - 信呼OA 前台注入分析一
4
D3CTF-d3kshrm(预期&非预期)题解
5
Tomcat解析XML引入的新颖webshell构造方式
近期热点
一周
月份
季度
1
2025ISCC练武区域赛和决赛pwn以及擂台pwn合集
2
通过Elastic EDR看smbexec并进行二次开发Bypass
3
php代码审计篇 - 信呼OA 前台注入分析一
4
D3CTF-d3kshrm(预期&非预期)题解
5
Tomcat解析XML引入的新颖webshell构造方式
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:28700
2
一天
贡献值:24800
3
1674701160110592
贡献值:18000
4
1174735059082055
贡献值:15000
5
Yale
贡献值:14000
6
LeeH
贡献值:10000
7
MeteorKai
贡献值:9000
8
姓*户
贡献值:8600
9
Arcueid
贡献值:8000
10
熊猫正正
贡献值:8000
目录
前端加密对抗常见场景突破之进阶
前言
AES+RSA 加密
修改加密逻辑
修改返回逻辑
DES 规律 key
明文加签
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板
没有评论