文章总结: 文档分析了某管理系统前端一次性Sign签名的逆向方法,该签名含防重放、时效性及完整性校验。签名逻辑为对请求体参数排序拼接后进行SM3哈希并追加时间戳。作者利用Yakit配合PythonFlask服务在beforeRequest钩子中动态计算并替换签名,实现了对签名机制的自动化绕过,有效降低了渗透测试难度。 综合评分: 88 文章分类: 渗透测试,WEB安全,安全工具,逆向分析
Yakit + flask 模拟签名过程
因为涉及到数据排序的情况,Yak在这一块是继承的golang,也就是要自己实现。对此,我表示,能写,但没必要。有这个时间,用python调用库不香吗?
Python的国密库gmssl
pip install gmssl
流程如下: Yakit webfuzzer ——》热加载 beforeRequest ——》Python flask ——》 热加载 beforeRequest ——》后端
在beforeRequest中,我们要先从req中获取请求体,然后构造http请求,发送给flask。 flask接收到请求体,对其进行分割、排序、拼接,然后进行SM3算法,将结果返回给beforeRequest。
Yakit beforeRequest
beforeRequest = func(https, originReq, req) {
// 获取请求体
body_post = poc.GetHTTPPacketBody(req)
// 发送到flask的数据包
flask_sign = `POST /sign HTTP/1.1
Host: 127.0.0.1:5000
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
a=1`
// 发送http请求到flask,将请求中的请求体替换为req中的请求体
rsq_body, _, _ = poc.HTTP(
flask_sign,
poc.https(false),
poc.replaceBody(body_post, false),
)
// 得到签名
sign = poc.GetHTTPPacketBody(rsq_body)
// 替换到请求头中
req = poc.ReplaceHTTPPacketHeader(req, "X-Request-SIGN", sign)
/*
一个替换请求参数a的例子
poc.ReplaceHTTPPacketQueryParam(req, "a", "bbb")
*/
// 将修改后的请求返回
return []byte(req)
}
flask
@app.route('/sign', methods=['POST'])
def sign():
body = request.get_data().decode("utf-8")
body_list = body.lower().split("&")
body_list.sort()
body_sort = "&".join(body_list)
return sm3_hash(body_sort) + datetime.now().strftime("%Y%m%d%H%M%S%f")[:15]
SM3算法
from gmssl import sm3
import binascii
def sm3_hash(message: str) -> str:
"""
使用 SM3 算法计算输入消息的哈希值
参数:
message: 待计算哈希的字符串
返回:
计算结果的十六进制字符串
"""
# 将输入字符串转换为字节
message_bytes = message.encode('utf-8')
# 计算 SM3 哈希
hash_bytes = sm3.sm3_hash(list(message_bytes))
# 将字节结果转换为十六进制字符串
return binascii.hexlify(bytes.fromhex(hash_bytes)).decode('ascii')
结果
开启共用热加载代码
总结
梳理了前端sign签名的分析过程,积累了相关的脚本。
sign校验增加了渗透测试的难度,但通过热加载构造sign,能够让其过程对测试人员透明,降低测试难度。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:进击的HACK 进击的hack《记一次前端一次性sign签名的分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论