是否可以欺骗或重用 VIEWSTATE 或检测它是否受到修改保护



问题

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这样的隐藏输入没有被篡改。

最新更新