【问题标题】:FormsAuthenticationTicket cannot be invalidated server side. Causing cookie reply attacksFormsAuthenticationTicket 不能在服务器端失效。导致cookie回复攻击
【发布时间】:2013-05-20 00:13:53
【问题描述】:

我有一个使用表单成员身份验证的 ASP.NET Web 应用程序。我们最近进行了渗透测试,其中一个被标记的问题是窃取用户帐户的能力。如果在注销之前从用户那里复制了 .ASPXAUTH cookie 值,则用户可以以其他用户身份登录,编辑他们的 cookie 以匹配复制的值并获得他们的所有特权。

退出时我尝试过:

删除 cookie。我可以成功地做到这一点,但它不会使 FormsAuthenticationTicket 无效。

使用FormsAuthentication.SignOut()却发现并不能阻止攻击

我个人不认为这是一个问题,我认为它可能被盗的唯一方法是如果用户设法获得对经过身份验证的用户的访问权限,这表示我需要解决这个问题以安抚渗透测试人员。

任何想法将不胜感激! 谢谢

【问题讨论】:

  • 嗯,你可以做很多事情:使用 SSL 并禁用滑动过期,或者更好的是,不要让它们持久化。看看这里MSDN

标签: c# asp.net asp.net-membership security


【解决方案1】:

您实际上可以使令牌服务器端无效。基本上,ASP.NET 提供了一种简单的方法来“使早于 DATE-X 的令牌无效”,您只需在用户数据库中存储一些日期。例如,它可以是“最后一次密码更改日期”。

在这里查看我的答案:Form Authentication - Cookie replay attack - protection

【讨论】:

    【解决方案2】:

    我认为解决这个问题的唯一真正方法是使用 SSL 来保护 cookie。

    即使您在注销时采取措施使 cookie 服务器端无效,也不会阻止某人在合法用户仍登录时重放 cookie。这意味着任何其他解决方案都会让您容易受到攻击。可能不会持续太久,但会持续一段时间。

    【讨论】:

      【解决方案3】:

      注销时我尝试过:删除 cookie。
      我可以成功地做到这一点,但它不会使 FormsAuthenticationTicket 无效。

      实际上,当您删除 cookie 时,您将其从您的用户中删除 - 您无法取消激活它,因此如果有人得到它,他仍然可以使用它。

      解决方案可以是:

      • 将身份验证 cookie 的状态也保存在服务器上。
      • 将登录用户的状态与其会话联系起来。

      在此处了解更多信息:Can some hacker steal the cookie from a user and login with that name on a web site?

      Form Authentication - Cookie replay attack - protection

      http://support.microsoft.com/default.aspx?scid=kb;en-us;900111

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2018-12-22
      • 2019-05-07
      相关资源
      最近更新 更多