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

时间:2012-06-18 20:09:30

标签: 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中找到的字符串。 “第一:”?还有别的吗?

背景

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

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

修改2:斜体中添加了文字。

1 个答案:

答案 0 :(得分:4)

  

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

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

  

或者它总是可以被遗忘?

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

  

特定表单的旧VIEWSTATE是否可以在以后的同一表单调用中重用,或者只要运气好的话会不会有运气?

这称为replay attack

是的,有可能。这是展示它的blog post

  

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

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