在研究了rails指南和其他一些资源后,我想知道用户会话的会话固定攻击是如何实际发生的。至少我怀疑它在指南中是如此简单as depicted here,攻击者......
1)...通过登录
创建有效会话2)...让会话保持活力
3)...然后强制用户使用他的会话ID,例如使用一些XSS漏洞
一切都很好,但是......攻击者如何能够收集他自己的会话ID值?默认情况下,Cookie在Rails4 +中加密。那么,如果攻击者假设我不有权访问secret_key_base
或用于生成加密和签名密钥的任何内容,该怎么办?根据我的理解,我无法在不使其失效的情况下篡改cookie(签名错误),因此以某种方式将自创cookie传递给可能的受害者既不是一种选择。
secu指南是不是最新的还是我在这里错过了一点?如果后者那么......
a)[作为攻击者]如何读取加密的cookie信息
b)漏洞必须如何让我[攻击者]将该会话ID注入另一个客户端上同样加密的cookie?这会是XSS攻击吗?该指南指出,如果攻击者使用类似
的代码<script>document.cookie="_session_id=16d5b78abb28e3d6206b60f22a03c8d9";</script>
他可能能够修复那个会话。但同样,为什么rails会向客户端显示它的简单会话,使其可以通过客户端处理的javascript访问?它没有,这就是为什么我的所有cookie值都是Javascript无法访问的简单乱码(可以通过控制台测试),对吗?
感谢您的任何建议!
答案 0 :(得分:0)
与cookie加密(或签名)无关。无需签名和/或加密,攻击者就无需对将会话数据存储在cookie中的站点求助于会话固定。他们可以自己制作Cookie。
假设攻击者可以将Cookie设置JavaScript注入受害者将访问的页面上,即an XSS vulnerability。攻击发生的方式如下:
攻击者制作了恶意JavaScript,利用XSS漏洞,并等待用户访问(或诱使用户)包含恶意JavaScript有效负载的页面。
<script>document.cookie="_appname_session=(...attacker's session cookie...)";</script>
通常,您将在会话中设置一些值以指示用户已通过身份验证。即使它像session[:logged_in] = true
一样简单,它也会更改cookie的值,并且即使session_id相同,攻击者也将无法访问该站点,因为攻击者的cookie不包含指示经过身份验证的会话的其他数据。
在此攻击更可行。其他会话存储区仍使用cookie来保存session_id,但它们将会话 data 存储在其他位置,例如cache,database,memcached等在这种情况下,当攻击者在受害者进行身份验证之后访问该站点时,攻击者的cookie(具有相同的session_id)将导致该会话被加载。
但是,此攻击还有另一个主要障碍-HttpOnly cookies。
Set-Cookie: _appname_session=v%2Ba...; path=/; HttpOnly
当一个cookie被指定为HttpOnly时,就像Rack / Rails会话cookie一样,浏览器不会通过document.cookies公开它。它不能被JavaScript读取或覆盖。我尝试通过document.cookie设置已知的会话cookie,但除非先清除现有的cookie,否则这是不可能的。这意味着,攻击者将需要没有会话cookie的用户在登录之前使用XSS漏洞访问该页面(该会话必须在没有会话cookie的页面上)。