问题
ASP 和 ASP.NET Web 应用程序在窗体中使用名为 VIEWSTATE 的值。据我了解,这用于在对 Web 服务器的请求之间在客户端上保持某种状态。
我从未使用过ASP或 ASP.NET,需要两个问题(和一些子问题)的帮助:
1) 是否可以以编程方式欺骗/构造表单的视图状态?澄清:程序是否可以查看表单并从中构造 base64 编码的 VIEWSTATE 值的内容?
1 a)还是总是被排除在外?
1 b)特定表单的旧 VIEWSTATE 是否可以在以后对同一表单的调用中重用,或者如果这样做只是运气
?2)我从 http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic12 那里收集到可以打开安全性,以便VIEWSTATE变得安全,免受欺骗。程序是否有可能检测到 VIEWSTATE 是否以这种方式受到保护?
2 a)事件验证值的出现和安全视图状态之间是否存在一对一的映射?
关于 1) 和 2),如果是,我可以提示一下我将如何做到这一点吗?对于 2) 我想我可以对值进行 base64 解码并搜索始终在未加密的 VIEWSTATE 中找到的字符串。"第一:"?别的?
背景
我做了一个小工具来检测和利用所谓的CSRF漏洞。我使用它来快速证明我发送给受影响网站所有者的此类漏洞的概念。我经常遇到这些带有 VIEWSTATE 的表单,而这些表单我不知道它们是否安全。
编辑1:稍微澄清了问题1。
编辑 2:添加了斜体文本。
是否可以以编程方式欺骗/构造表单的视图状态?
确定。它只是一个 Base64 编码值。现在,自 ASP.NET 2.0 以来,有一个选项可以通过计算机密钥加密视图状态,但这是一项选择加入功能。通常,您不希望首先将任何私有内容放在视图状态中。
还是总是被排除在外?
一些ASP。NET 的管道需要 ViewState,如果您仍想使用 ASP.NET 服务器控件,则完全关闭它是相当困难的。
特定表单的旧 VIEWSTATE 是否可以在以后对同一表单的调用中重用,或者如果这样做只是运气
?
这就是所谓的重放攻击
是的,这是可能的。这是一篇演示它的博客文章。
事件验证值的出现和安全视图状态之间是否存在一对一的映射?
没有。事件验证基本上用于确保客户端事件与服务器上可能发生的"可能"事件匹配。它主要保护并确保像__EVENTTARGET
这样的隐藏输入没有被篡改。