攻防实战案例(一)

admin 2026-04-16 05:53:11 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档记录了对某小程序登录接口的渗透测试过程,发现personalid参数可能存在越权漏洞但实际采用Hawk认证机制。通过反编译源码分析出mac参数由ts、nonce等字段经HMAC算法加密生成,最终在配置文件中找到密钥成功绕过鉴权,实现批量遍历敏感信息。 综合评分: 85 文章分类: 渗透测试,WEB安全,漏洞分析,实战经验,移动安全


cover_image

攻防实战案例(一)

尘佑不尘 尘佑不尘

尘宇安全

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信息


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:尘宇安全 尘佑不尘 尘佑不尘《攻防实战案例(一)》

攻防实战案例(一) 网络安全文章

攻防实战案例(一)

文章总结: 文档记录了对某小程序登录接口的渗透测试过程,发现personalid参数可能存在越权漏洞但实际采用Hawk认证机制。通过反编译源码分析出mac参数由
评论:0   参与:  0