7

问题

ASP 和 ASP.NET Web 应用程序在表单中使用称为 VIEWSTATE 的值。据我了解,这用于在对 Web 服务器的请求之间在客户端上保持某种状态。

我从未使用过 ASP 或 ASP.NET,需要帮助解决两个问题(和一些子问题):

1) 是否可以以编程方式欺骗/构造表单的 VIEWSTATE?澄清:程序可以查看表单并从中构造 base64 编码的 VIEWSTATE 值的内容吗?

1 a) 或者它可以总是被忽略吗?

1 b) 特定表单的旧 VIEWSTATE 是否可以在以后调用相同表单时重用,或者如果这行得通,那只是运气?

2)我从http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic12收集到可以打开安全性,以便 VIEWSTATE 免受欺骗。程序是否可以检测到 VIEWSTATE 以这种方式受到保护?

2 a) EVENTVALIDATION 值的出现与安全 VIEWSTATE 之间是否存在一对一的映射?

关于 1) 和 2),如果是,我可以提示我将如何做到这一点吗?对于 2) 我想我可以对该值进行 base64 解码并搜索始终在未加密的 VIEWSTATE 中找到的字符串。“第一的:”?还有什么?

背景

我制作了一个小工具来检测和利用所谓的 CSRF 漏洞。我使用它来快速证明我发送给受影响网站所有者的此类漏洞的概念。我经常遇到这些带有 VIEWSTATE 的表单,而这些我不知道它们是否安全。

编辑1:稍微澄清了问题1。

编辑 2:添加了斜体文本。

4

1 回答 1

4

是否可以以编程方式欺骗/构造表单的 VIEWSTATE?

当然。它只是一个 Base64 编码的值。现在,从 ASP.NET 2.0 开始,有一个选项可以通过机器密钥加密视图状态,但这是一个可选功能。通常,您首先不想将任何私有内容放在视图状态中。

或者它可以总是被排除在外吗?

一些 ASP.NET 的管道需要 ViewState,如果您仍想使用 ASP.NET 服务器控件,则完全关闭它是相当困难的。

特定表单的旧 VIEWSTATE 是否可以在以后调用相同表单时重用,或者如果这有效,那只是运气?

这称为重放攻击

是的,有可能。这是一篇展示它的博客文章。

EVENTVALIDATION 值的出现与安全 VIEWSTATE 之间是否存在一对一的映射关系?

并不真地。事件验证基本上用于确保客户端事件匹配服务器上可能发生的“可能”事件。它主要保护并确保隐藏的输入,__EVENTTARGET如未被篡改。

于 2012-06-18T20:17:12.167 回答