尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Viewgen --guess 完全指南:如何盲猜 ViewState 的签名与加密算法

Viewgen --guess 完全指南:如何盲猜 ViewState 的签名与加密算法 Viewgen --guess 完全指南如何盲猜 ViewState 的签名与加密算法【免费下载链接】viewgenViewgen is a ViewState tool capable of generating both signed and encrypted payloads with leaked validation keys项目地址: https://gitcode.com/gh_mirrors/vi/viewgenViewgen 是一款专业的 ASP.NET ViewState 安全测试工具能够利用泄露的验证密钥validation key或 web.config 配置文件生成经过签名与加密的 ViewState payload。本篇文章将带你彻底掌握 viewgen --guess 参数在不掌握任何密钥的情况下如何盲猜 ViewState 的签名算法与加密模式快速判断目标站点是否存在可被利用的安全风险。Viewgen 是什么专为 ViewState 签名与加密而生的安全工具ASP.NET 站点会把页面状态序列化后写入隐藏字段__VIEWSTATE再经过签名Sign或加密Encrypt保护最终以 base64 形式呈现在 HTML 中。这些保护依赖 web.config 中配置的验证密钥validationKey与解密密钥decryptionKey。Viewgen 就是针对这一机制的专用工具它的核心能力有两个方向解析方向解码 ViewState读取其中序列化的对象与签名生成方向利用泄露的密钥重新生成合法、可被服务端接受的签名/加密 payload。而--guess正是连接一无所知与窥见门径的桥梁。整个项目只有一个主程序文件 viewgen依赖极少非常适合安全研究者阅读与二次开发。为什么要盲猜 ViewState 的签名与加密算法在实际测试中你通常只会拿到一个孤零零的 ViewState 字符串此时面临三个未知数它是否被加密——直接决定了解析路径的起点它是否被签名——没有签名则无需密钥即可篡改用了哪种算法——不同算法的密钥长度与摘要长度完全不同。只有先回答这三个问题你才能判断目标是否值得投入精力寻找密钥拿到密钥后应该按什么算法组合去生成 payload。换句话说盲猜是整条测试链路的第一公里。快速安装 Viewgen三条安装路径任你选Viewgen 基于 Python 3 开发依赖极少见 requirements.txt安装非常轻量方式一一键脚本./install.sh脚本会自动安装依赖并把viewgen复制到/usr/local/bin/见 install.sh。方式二pip 手动安装pip3 install --user --upgrade -r requirements.txt方式三Docker 容器docker build -t viewgen .采用多阶段构建的 Dockerfile 体积控制得很好适合不想污染本地 Python 环境的用户。 提示项目代码托管于 https://gitcode.com/gh_mirrors/vi/viewgen你也可以先 clone 到本地再阅读源码。viewgen --guess 用法一条命令识别加密状态--guess的用法极其简单只需要把 base64 编码的 ViewState 作为参数传入viewgen --guess PAYLOAD它的输出通常有两种形态对应两种结论[] ViewState is not encrypted [] Signature algorithm: SHA1或者[!] ViewState is encrypted [] Algorithm candidates: AES SHA1 DES/3DES SHA1前者告诉你未加密、已签名、签名算法是 SHA1后者告诉你已加密并给出加密算法与签名算法的可能组合。一条命令结论立现。盲猜原理Viewgen 是如何推断签名与加密算法的--guess的聪明之处在于不做任何密钥尝试只依赖格式特征。其核心逻辑位于 viewgen分两步走第一步尝试当作未加密 ViewState 解码如果解码成功说明 payload 没有加密。此时工具从 payload 尾部截取签名并通过签名长度反推算法。因为不同哈希算法的摘要长度是固定的见 hash_sizes 表签名算法摘要长度MD516 字节SHA120 字节SHA25632 字节SHA38448 字节SHA51264 字节第二步解码失败则判定为加密改用长度取模筛选候选加密 ViewState 的结构是「IV 密文 签名」而所有对称加密都有固定的分组块大小AES 是 16 字节DES/3DES 是 8 字节。于是 guess_algorithms 遍历所有哈希算法计算(payload长度 - 摘要长度) % 分组块大小余数为 0 的组合即为候选。这背后的数学关系是凡是合法的组合除去签名后密文长度必然恰好是分组块的整数倍。这就是盲猜的全部奥秘——不需要密钥只需要一点点排列组合和取模运算。实战一盲猜未加密 ViewState 的签名算法来看一个真实例子假设我们从某页面抓到了这样一段 ViewStateviewgen --guess /wEPDwUKMTYyODkyNTEzMw9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkuVmqYhhtcnJl6Nfet5ERqNHMADI输出结果[] ViewState is not encrypted [] Signature algorithm: SHA1解读该 payload 共 77 字节末尾 20 字节是签名前 57 字节是实际数据。工具先成功解码出序列化内容再通过 20 字节的签名长度锁定SHA1 签名算法。结论是目标 ViewState未加密但已签名这意味着想要篡改它就必须拿到用于 HMAC-SHA1 的验证密钥。实战二盲猜加密 ViewState 的算法候选再换一个难啃的 payloadviewgen --guess zUylqfbpWnWHwPqet3cH5Prypl94LtUPcoC7ujm9JJdLm8V7Ng4tlnGPEWUXlyCDxBWmtOit2HY314LI8ypNOJuaLdRfxUK7mGsgLDvZsMg/MXN31lcDsiAnPTYUYYcdEH27rT6taXzDWupmQjAjraDueY输出结果[!] ViewState is encrypted [] Algorithm candidates: AES SHA1 DES/3DES SHA1解读解码失败 → 判定为加密状态。该 payload 解码后为 116 字节工具遍历算法表后发现116 - 20 96恰好同时能被 16 和 8 整除于是给出了两组候选AES SHA1与DES/3DES SHA1。虽然此时还不能确定是哪一组但搜索范围已经从全盲收窄到两种组合后续结合 web.config 的密钥长度即可进一步区分例如 32 字节解密密钥对应 AES16 字节对应 DES 或 3DES。用 --check 验证盲猜结果从猜测到确证盲猜只是第一步真正确认算法与密钥是否正确要交给--check。它会在目标服务器使用的密钥与 modifier 已知的前提下重算签名并比对viewgen --decode --check --webconfig web.config --modifier CA0B0334 PAYLOAD输出中的[] Signature match即代表密钥、算法、modifier 三者全部正确而[] Signature fail则说明组合有误需要调整。这里的--webconfig会自动从配置文件中读取验证密钥、算法与加密模式对应解析逻辑见 read_webconfig。从盲猜到利用密钥在手如何生成签名与加密 payload当 web.config 或验证密钥成功泄露后配合已知的__VIEWSTATEGENERATOR值即 modifier就可以让 Viewgen 帮你生成合法的签名/加密 payloadviewgen --webconfig web.config --modifier CA0B0334 /wEPDwUKMTYyODkyNTEzMw9k...更进一步的场景是远程代码执行ViewState 使用 ObjectStateFormatter 反序列化若密钥泄露即可构造恶意序列化数据。内置的-c命令参数基于 ysoserial.net 思路见 generate_shell_payload可以直接生成包含命令执行的 payloadviewgen --webconfig web.config -m CA0B0334 -c ping yourdomain.tld⚠️ 需要特别强调上述利用手法仅限在获得授权的渗透测试与 CTF 竞赛中使用。未经授权的攻击行为属于违法请务必遵守 README 中的法律声明。常见问题速查FAQQ--guess 需要联网吗不需要。所有判断都基于 payload 自身的长度与结构特征完全离线运行。Q为什么我的 payload 输出 No candidates found说明该 payload 长度不符合任何已知算法的整除规律可能是非标准配置或自定义算法需要结合目标指纹人工分析。Q候选结果有好几组怎么进一步缩小范围结合密钥长度判断32 字节解密密钥对应 AES16 字节对应 DES24 字节对应 3DES签名侧则用摘要长度20 字节→SHA1反向排除。Q报错 Please provide validation key and algorithm 怎么办这是--check或生成模式下缺少密钥的提示改用--webconfig传入配置文件或手动补充--vkey、--valg验证侧与--dkey、--dalg解密侧。写在最后合法使用与免责声明Viewgen --guess 的价值在于用极低的成本摸清目标的加密家底一条命令判断加密状态一组候选缩小算法范围再用 --check 完成最终确证。无论你是安全研究者、CTF 选手还是渗透测试工程师掌握这套盲猜 → 验证 → 生成的完整流程都能让 ASP.NET ViewState 相关的测试工作事半功倍。最后再次提醒本项目仅用于教育与授权测试场景请在使用前确保你拥有明确的书面授权。安全测试的边界永远在于知道为何而测。【免费下载链接】viewgenViewgen is a ViewState tool capable of generating both signed and encrypted payloads with leaked validation keys项目地址: https://gitcode.com/gh_mirrors/vi/viewgen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表