签名对抗技术:实战案例与分析

admin 2025年3月18日21:39:52签名对抗技术:实战案例与分析已关闭评论5 views字数 1977阅读6分35秒阅读模式

现在的网站业务越来越不好测了,不是加密就是签名,所以咱们的技术水平也要慢慢提升,本文主要分享几个自己签名绕过的真实案例,并配合autodecoder插件进行绕过测试

0x01 第一个案例

 一个通用的系统框架,在绕过签名后测试找到了通杀的越权漏洞,目前漏洞也已修复

首先改数据包会提示签名错误

签名对抗技术:实战案例与分析

通过js代码中搜索X-Scf-Sign找到签名生成的逻辑,可以看到Sign调用了g()函数

签名对抗技术:实战案例与分析

继续跟进调试跟踪g()函数

可以看到最终他是由a+c+d+w然后进行了md5的加密

从调试的结果分析

a是接口地址

c是X-SCF-NONCE=随机数&X-SCF-TV=毫秒级时间戳

d是传递的数据data 

w是认证的token,在header中

签名对抗技术:实战案例与分析

之后写个py脚本进行签名绕过,把时间戳timestamp和sign的header替换掉

签名对抗技术:实战案例与分析

之后我们就可以愉快的改包测试了

签名对抗技术:实战案例与分析

这里是py打印的日志,也就是我们改过的内容

签名对抗技术:实战案例与分析

0x02 第二个案例

这个系统跟第一个案例的逻辑差不多,签名也是在header中,该数据也会提示签名错误

签名对抗技术:实战案例与分析

通过搜索X-Ves-Signture定位带签名逻辑处,分析签名逻辑

wn是签名后的值,使用的是hmacCn进行签名,pnsalt,然后又进行了一次base64编码 

继续分析Cn怎么来的

Cn=fn+gn+yn+dn+ln,调试的时候打断点分析值的来源

fn是header中的appid的值

gn是请求的方法get

yn是去掉特殊字符后进行url编码,然后进行base64编码

ln是时间戳

签名对抗技术:实战案例与分析

分析出所有的值后,就可以去编写脚本进行绕过了

改包发送,提示不允许,说明签名已经绕过了(之前这个接口是有越权的,目前也已经修复了)

签名对抗技术:实战案例与分析

py输出的日志窗口

签名对抗技术:实战案例与分析

0x03 第三个案例

这个系统是一个get型的签名,我们直接改数据也是会报签名错误

签名对抗技术:实战案例与分析

继续分析js代码找签名生成的逻辑,这个就比较简单了,字符串拼接时间戳在拼接字符串,然后进行一个md5加密

签名对抗技术:实战案例与分析

然后去写py脚本进行处理

签名对抗技术:实战案例与分析

再次改包发送会提示水印错误,这个接口之前有短信轰炸,目前也已经修复了

签名对抗技术:实战案例与分析

py的日志输出记录

签名对抗技术:实战案例与分析

0x04 第四个案例

是一个小程序的,改数据重新发包提示签名错误

签名对抗技术:实战案例与分析

我们先反编译出来代码,现粗略的找一下签名函数生成的地方,然后再去hook小程序进行打断点调试

签名对抗技术:实战案例与分析签名对抗技术:实战案例与分析

小程序调试会有点卡,确认函数是vscode的之后就没再继续调试了,直接分析代码

这个断点没继续跟下去确认是md5还是hmac的,当时找到o的值后进行md5验证了下sign是否和md5后的o一样

分析代码

o=base64(时间戳)+token+salt+做过处理的data

主要分享做过处理的data

我们传递的是一个json数据,处理之后为custmerid98261387241318这样的形式

笔者代码不好直接丢给ai帮我分析,转换成一个py函数

签名对抗技术:实战案例与分析
Object.keys(e).sort().forEach((function(t) {  "object" == r(e[t]) && (e[t] = ""),    "undefined" != e[t] && (s += t + e[t])})),  (s = s.toString()) && (s = s.replace(new RegExp("\\[""g"), "").replace(new RegExp("]""g"), "").replace(new RegExp('"'"g"), ""));

最后生成了这个么一个函数,也就是处理data的,因为数据包到burp是str需要先做一次转换

def process_e_object(e_str):    """    处理 e 对象生成签名参数 s     参数:        e_str (str): JSON 格式的 e 对象字符串     返回:        str: 处理后的拼接字符串 s     """    # 解析 JSON 字符串为字典     e = json.loads(e_str)     e_copy = e.copy()  if e else {}    s = ""    # 按键名排序并遍历处理     for key in sorted(e_copy.keys()):         value = e_copy[key]        # 对象类型(字典或列表)替换为空字符串         if isinstance(value, (dictlist)):            value = ""        # 拼接非空值         if value is not None:            s += f"{key}{value}"    # 替换特殊字符 [ ] "    s = s.replace("[",  "").replace("]""").replace('"'"")    return s

写成py脚本进行处理

签名对抗技术:实战案例与分析

继续改包重放即可成功,这个站也有漏洞,但是重复了- .- 

签名对抗技术:实战案例与分析

控制台的日志输出记录

签名对抗技术:实战案例与分析

最后,希望师傅们多多进步,天天出货

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月18日21:39:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   签名对抗技术:实战案例与分析https://cn-sec.com/archives/3836482.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.