JavaScript 异或加密解密实现与 XSS 利用示例

作者:白帽猫时间:2026-10-22 18:42:21浏览:414

本文展示了使用 JavaScript 实现基于异或(XOR)运算的字符串加密与解密函数。通过固定密钥 0x12 对字符编码进行转换,代码演示了如何将明文转换为点分隔的数字串,以及反向还原过程。示例中包含使用 WScript 执行解密并触发弹窗的测试代码,揭示了该加密方式在 XSS 攻击中用于绕过过滤的潜在风险。

JavaScript 异或解密函数实现

定义名为 MyDecode 的解密函数,接收一个字符串参数 str。


{

初始化局部变量 i 和 k,并将结果字符串 str2 设为空字符串。



使用点号(.)作为分隔符,将输入的字符串 str 分割为数组 k。



启动一个 for 循环,索引 i 从 0 开始,遍历数组 k 的所有元素。


{

在循环体内,获取数组元素 k[i],将其与十六进制值 0x12 进行异或(^)运算,并通过 String.fromCharCode 将结果转换回字符,追加到 str2 中。


}

循环结束后,返回拼接好的解密字符串 str2。


}

定义变量 myrand,赋值为加密后的字符串 "46.97.115"。




调用 WScript 对象的 echo 方法,输出调用 MyDecode 函数解密 myrand 的结果。




JavaScript 异或加密函数实现

定义名为 Encrypt 的加密函数,接收一个字符串参数 str。


{

初始化一个数组 monyer 用于存储处理后的数据。


声明局部变量 i、s 和 str,其中 str 为函数参数。



启动一个 for 循环,索引 i 从 0 开始,遍历字符串 str 的每个字符。


{

在循环体内,获取字符 str[i] 的 Unicode 编码(charCodeAt),与十六进制值 0x12 进行异或运算,并将结果累加到 monyer 数组中。


每次迭代后,在 monyer 末尾追加一个点号(.)作为分隔符。


}

返回拼接完成的加密字符串 monyer。


}


调用 Encrypt 函数对包含脚本标签的字符串 "<script>alert('ok')</script>" 进行加密,使用正则表达式 /.$/ 替换掉末尾多余的字符(实际为移除最后一个点号),并通过 WScript.Echo 输出最终结果。


作者最新文章

相关标签: