yakit使用热加载进行签名验证与加密,序列使用

1、通关yakit验签与数据加密

yakit靶场签名验证

image-20250901154425412

加密部分关键代码

function generateKey() {            // 固定密钥
return CryptoJS.enc.Utf8.parse("1234123412341234") // 十六位十六进制数作为密钥,将1234123412341234的十六进制数作为密钥
}


// 加密方法
function Encrypt(word) {
console.info(word);
// 进行SHA256加密并转化为十六进制
return CryptoJS.HmacSHA256(word, key.toString(CryptoJS.enc.Utf8)).toString();
}

yakit热加载代码

// 使用固定密钥和HMAC-SHA256算法生成签名
func sign(user, pass) {
return codec.EncodeToHex(codec.HmacSha256("1234123412341234", f`username=${user}&password=${pass}`)~)
}
// 处理请求并生成签名
signRequest = result => {
pairs := result.SplitN("|", 2) // 将输入按"|"分割成两部分
dump(pairs)
return sign(pairs[0], pairs[1]) // 使用第一部分作为用户名,第二部分作为密码
}

调用方式

{{yak(signRequest|admin|123)}}

image-20250901155457139

调用测试,热加载可正常使用

image-20250901155908420

结合模糊测试字典

image-20250901160205554

签名验证

image-20250901160236883

yakit靶场数据加密

加密关键代码

// 密钥生成函数(存在严重安全隐患)
function generateKey() {
// 硬编码密钥(1234123412341234)违反加密安全原则
return CryptoJS.enc.Utf8.parse("1234123412341234");
}

// 初始化密钥(应使用动态密钥交换机制)
const key = generateKey();

// 加密函数(存在日志泄露风险)
function Encrypt(word) {
console.info(word); // 明文日志记录敏感数据(高危漏洞)
// 加密结果默认返回Base64字符串
return CryptoJS.AES.encrypt(word, key, {iv: iv}).toString();
}

热加载部分代码

// {{base64({{yak(aescbc|{"username":"admin","password":"{{x(pass_top25)}}"})}})}}
aescbc = result => {
result = codec.AESCBCEncryptWithPKCS7Padding(
codec.DecodeHex(`31323334313233343132333431323334`)~, // 密钥
result, // 待加密的数据
codec.DecodeHex(`fc8d6ce962b937f9258f95a84725e567`)~, // 初始化向量(IV)
)~
return string(result)
}

调试方式

{{base64({{yak(aescbc|{"username":"admin","password":"123"})}})}}

调用测试,热加载可正常使用

image-20250901161113292

结合模糊测试字典,进行爆破

image-20250901161505733

2、尝试修改响应报文的数据,自选网站

image-20250901153142951

目标:中国民航大学

image-20250901153304662

image-20250901153345555

3、通关pikachu靶场csrf防爆破关卡

正常登录请求的回显

image-20250901163552212

若是进行数据包的重发,相同的token会触发token错误。因为在登录失败后服务器会返回一个新的token,后续请求只有附上新token才会生效

image-20250901163643478

新添加一个页面,将之前的数据包复制过来

image-20250901164707250

将两个包添加到同一个序列里面

image-20250901164742650

为第一个包(一号序列)添加一个数据提取器和一个变量

选择xpath
内容为
//input[@name='token']/@value

image-20250901173126212

第二个包中不设置任何数据提取器和变量,直接使用第一个序列定义好的变量和提取的数据

image-20250901173146425

最后进行测试

image-20250901173312566

Author: wickt42
Link: http://example.com/2025/09/01/yakit使用热加载进行签名验证与加密/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.