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

Pet*_*ric 7 asp.net security viewstate penetration-testing

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)我想我可以对该值进行64位解码并搜索一个总是在未加密的VIEWSTATE中找到的字符串."第一:"?别的什么?

背景

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

编辑1:稍微澄清问题1.

编辑2:斜体添加文本.

vcs*_*nes 4

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

当然。它只是一个 Base64 编码值。现在,自 ASP.NET 2.0 以来,出现了一个可以通过机器密钥对视图状态进行加密的选项,但这是一个可选功能。一般来说,您一开始就不希望在视图状态中放置任何私有内容。

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

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

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

这就是所谓的重放攻击

对的,这是可能的。这是一篇博客文章演示了它。

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

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