在使用 4.0 框架的 asp.net webforms 应用程序中,我们将 ViewStateUserKey 设置为唯一值以阻止跨站点请求伪造漏洞。

我们最近在漏洞测试中失败了,因为测试人员说他无法“观察”到 html 源代码中这个的存在。我希望我可以简单地解码 ViewState 并看到 ViewStateUserKey,但是唉,当我解码 View 状态(使用 Fiddler2 ViewState 检查器,或在线解码器站点之一,例如 http://ignatu.co.uk/ViewStateDecoder.aspx )时,我看不到 ViewStateUserKey。我可以看到 viewstate 中的值,夹杂着一堆乱码,但 ViewStateUserKey 本身似乎是在乱码中编码的。

例如,这是一个页面的解码 View 状态(使用 Fiddler2 ViewState 检查器),该页面具有一个具有 4 个值(Text1、Text2、Text3、Text4)的 DropDownList 控件,您可以看到这些值与乱码混合在一起:

�-1665646599dfddddfText11gText22gText33gText44gddd?"H~E* =91��;��O!��;�O�B�g

这是同一个页面,将 ViewStateUserKey 设置为静态值“cat”(我意识到设置为静态值时 ViewStateUserKey 没有用)。
�-1665646599dfddddfText11gText22gText33gText44gddd�Gpb����c��uy�l����F3��>�h�~

View 状态结束时的胡言乱语发生了变化;看来 ViewStateUserKey 隐藏在胡言乱语中。但是有什么方法可以向漏洞测试人员证明这一点吗?

请注意,如果我将 enableViewStateMAC 设置为“false”(这当然在生产中永远不会这样做),我会得到不同的胡言乱语,但我仍然看不到 html 源中的 ViewStateUserKey。

最佳答案

ViewStateUserKey 值通常不作为有效负载本身的一部分包含在内。相反,它是一个特殊的修饰符,在计算加密 MAC 时与有效负载混合(有效负载末尾的乱码)。但由于 MAC 函数是不可逆的,因此无法推断出给定 MAC 的 ViewStateUserKey 是什么。

关于asp.net - 我可以在 html 源代码中看到 ViewStateUserKey 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21288299/

10-12 06:34