赞
踩
在数字世界的探索旅程中,我们经常会遇到各种技术挑战和安全问题。作为一名热爱技术的实践者,我一直在寻找那些能够提升我们工作效率和安全性的“奇技淫巧”。
在这个过程中,我发现,很多宝贵的知识和经验往往散落在网络的各个角落,等待着我们去发现和整理。
这次,我想和大家分享的,是我在前端JS中使用SM2加密处理密码的一次实践。这不仅是一个技术实验,更是一次对网络安全世界的深入探索。
通过这个案例,我希望能够为同行们提供一些新的视角和思路,无论是在渗透测试还是安全防护方面。
在这篇文章中,我将详细记录下我是如何一步步分析和破解这个加密过程的。从最初的困惑和无从下手,到最终找到解决方案的喜悦,这个过程充满了挑战,也充满了乐趣。
我相信,通过这次分享,我们不仅能够学习到SM2加密的技术细节,还能够体会到在技术探索中不断进步的快乐。
所以,如果你也对前端安全、密码学或是渗透测试感兴趣,那就请跟随我的步伐,一起走进这个充满技术魅力的世界吧!
前一段时间,出去参加某个活动,偶然遇到一个感兴趣的站点,我开始了常规的信息收集:域名WHOIS查询、子域名枚举、端口扫描,甚至还尝试了一些常见的漏洞利用,但结果却让我有些失望——这个站点就像是一个没有破绽的数字堡垒,坚不可摧。。
就在我准备放弃的时候,我注意到了它的登录入口。我心想,这或许是我唯一能够突破的地方。我迅速在我的“柜子”里面翻出了各种字典,准备对登录接口发起一次暴力破解。然而,当我开始捕获登录请求时,一个意想不到的情况发生了。
我输入了一个简单的密码“123456”,但传输到服务器的竟然不是这串数字,而是一段长得离谱、充满了各种字符的字符串。我愣住了,这是什么魔法?。
形如:
0439f4fbc41f315bcfd624662fc2cd2cb46883c61dc947bc9
a4ee2fe113efca452db2b066d01d6933bd84fc4a15d768323
eb849a17fdf7fd669223afca1239497748f68454e9f6ce1fb
bc6c91d87b356cb35c2bd66ebda8bb368d90312354ca70ca7
fa47
然后开始分析登录接口,顺着混淆的稀里哗啦的JS,一点一点往回捋顺,发现它使用了 SM2。
然后我就接着瞪大眼睛,找相关内容,最后成功找到了它的公钥。
遗憾的是,有很多截图我在过程中并没有去截取,后来报告了相关问题后,这个系统就被关闭了,我现在写文章,想分享怎么一步一步分析的,也没办法提供图片了。
在揭开了SM2加密的神秘面纱后,我决定是时候让Python这个多才多艺的小伙伴出马了。就像一位魔术师准备展示他的招牌魔术一样,我开始在键盘上敲打出一段段神奇的代码,准备让这个加密算法的秘密无处遁形。
首先,我需要一把锋利的剑——一个可靠的SM2加密库。在网络的海洋中寻寻觅觅,我终于找到了一个由清华大学开发的宝藏:gmssl库。这个库就像是一把锋利无比的瑞士军刀,不仅功能全面,而且性能卓越。
import base64
from gmssl import sm2, func
# 公钥和私钥应该是16进制的字符串
public_key_hex = '04ac0c6afcbf31f******************************'
private_key_hex = '' # 替换为实际的私钥16进制字符串,本文的过程不涉及私钥,主要你也搞不到人家的私钥
因为我们的需求只是模拟本地JS对参数进行SM2加密,从而把我们想要传出去的参数正确的传递出去,所以我们压根也不用操心私钥的问题,我们只要加密,不需要解密。
# 初始化SM2加密对象
sm2_crypt = sm2.CryptSM2(public_key=public_key_hex, private_key=private_key_hex, mode=0)
# 这里所涉及的mode怎么回事,你可以看看官网文档,如果看不懂,私信我也行
# 将文本数据编码为UTF-8格式的字节串
data = password.strip().replace('\n','').encode('utf-8')
# 加密数据
enc_data = sm2_crypt.encrypt(data)
# 将加密后的数据转换为十六进制字符串
hex_enc_data = enc_data.hex()
# 更新POST数据中的用户名和密码
post_data['Password'] = '04'+hex_enc_data
为什么加04的话:
在SM2加密的世界里,公钥有两种表现形式:压缩和未压缩。而04前缀就像是一张名片,告诉别人这是一个未压缩的公钥。
它的作用就是用来区分那些看起来有点“胖”的公钥和那些“瘦身成功”的压缩公钥。
一些有用或无用的玩意儿,提供在这里,希望能帮到你。
gmssl库官网:点击访问gmssl库,你可以找到我们演出中使用的SM2算法的秘密武器。
Python文档:点击访问Python文档,这里是学习Python的宝库,无论你是初学者还是老手,都能在这里找到宝贵的知识。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。