文章总结: 文档记录了对某小程序登录接口的渗透测试过程,发现personalid参数可能存在越权漏洞但实际采用Hawk认证机制。通过反编译源码分析出mac参数由ts、nonce等字段经HMAC算法加密生成,最终在配置文件中找到密钥成功绕过鉴权,实现批量遍历敏感信息。 综合评分: 85 文章分类: 渗透测试,WEB安全,漏洞分析,实战经验,移动安全
攻防实战案例(一)
尘佑不尘 尘佑不尘
尘宇安全
2026年4月7日 16:37 湖南
在小说阅读器读本章
去阅读
某天对小程序进行登录时发现登录进去这个接口有个personalid参数,发现也是返回了个人信息,一开始还以为是一个改id进行越权的简单漏洞,但是当我再次发包以后显示时间ts有问题,改了ts以后又说nonce有问题,到最后改了nonce,发现mac又有问题,这里就大概了解了大概的一个鉴权(ts,nonce要变化)
到这里就可以发现是mac参数进行的鉴权,由于是小程序,所以反编译一下源码
这里全局搜一下mac
代码如下:
var o = {
ts: a,
nonce: i.nonce || e.utils.randomString(6),
method: n,
resource: r.resource,
host: r.host,
port: r.port,
hash: i.hash,
ext: i.ext,
app: i.app,
dlg: i.dlg
},
c = e.crypto.calculateMac("header", s, o),
h = 'Hawk id="' + s.id + '",ts="' + o.ts + '",nonce="' + o.nonce + '",mac="' + c + '"';
这里的o是ts,nonce,method,resource,host,port这些组合起来的
可以看见mac是等于c的,其实就是请求方式和url及认证头里面的东西组合起来进行了一个加密
跟进一下e.crypto.calculateMac
全局搜索
加密逻辑
e.crypto = {
headerVersion: "1",
algorithms: ["sha1", "sha256"],
calculateMac: function(t, r, n) {
var i = e.crypto.generateNormalizedString(t, n);
return s["Hmac" + r.algorithm.toUpperCase()](i, r.key).toString(s.enc.Base64)
}
这里对calculateMac 函数分析,这个函数是该对象的核心,它接受三个参数:
t: 原始数据。r: 包含算法和密钥的对象。这个对象内部有r.algorithm(指定哈希算法,例如"sha1"或"sha256") 和r.key(用于HMAC计算的密钥)。n: 也就是o。
var i = e.crypto.generateNormalizedString(t, n);
- 首先,调用
e.crypto.generateNormalizedString函数,传入t和n参数。 - 这个函数将上一步准备好的
o对象(以及其他输入,如t)按照 Hawk 协议的特定规则进行排序和拼接,生成一个唯一的、标准化的字符串。这样的话就确保不管数据在原始对象中的顺序如何,只要内容不变,生成的标准化字符串就始终一致。这对于防止因数据顺序不一致而导致的签名验证失败
return s["Hmac" + r.algorithm.toUpperCase()](i, r.key).toString(s.enc.Base64)
- 这行代码是实际进行HMAC计算和格式化的部分。
r.algorithm.toUpperCase(): 将传入的算法名称转换为大写,例如sha1变为SHA1。"Hmac" + r.algorithm.toUpperCase(): 动态构建HMAC算法名称,例如"HmacSHA1"或"HmacSHA256"。s["Hmac..."](i, r.key): 使用标准化字符串i和密钥r.key来调用 HMACC 算法进行计算,返回一个HMAC结果。.toString(s.enc.Base64): 将计算出的HMAC结果转换为Base64编码的字符串,并作为函数的最终返回值。
这里就需要找到key了
一开始全局搜索key但是太多了
然后联想到一般key都会放在配置文件里面
搜了一下config
写个脚本试一下能不能使用 发现可以使用,后续也是遍历了7w+的sfz信息
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:尘宇安全 尘佑不尘 尘佑不尘《攻防实战案例(一)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论