我正在尝试理解理论上针对mtgox(众所周知的比特币交易所)描述的会话固定攻击:
我发现导致帐户接管的会话固定。很长的故事 简而言之,这是利用:
name ='document.cookie =“SESSION_ID = SID; Domain = .mtgox.com; 路径= /代码“'; 位置= '?HTTPS://payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91付款[取消] =取消';
创建结帐按钮https://www.mtgox.com/merchant/checkout并将取消网址设置为javascript:eval(name);
将您的有效负载放入window.name并重定向到“https://payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91?payment[cancel ] =取消” (GET可访问的行动)。 MtGox有X-Frame-Options,因此无法使用 iframe中。
用户应等待5秒,直到JS中的setTimeout将位置分配给我们的javascript:URL。
使用服务器端获取一些guest虚拟机SID并使用此XSS进行修复。它被称为Cookie折腾,我们的cookie会影响原始的SESSION_ID 因为首先发送更具体的Path-s document.cookie =“SESSION_ID = SID; Domain = .mtgox.com; Path = / code”
关闭窗口。
- 醇>
有一天用户登录,他的会话将保持相同的SID。您的服务器脚本应该每5分钟运行一次cron任务,检查SID是否正常 还是“客人”。一旦用户登录,您就可以使用固定的SID 代表他的帐户执行任何操作 - “会话骑行”。
我原本以为如果mtgox将他们的cookie设置为http,那么会阻止这种情况发生吗?
答案是什么?
答案 0 :(得分:0)
他们应该验证Cancel URL
是有效的HTTP绝对URL。
即。检查它是以http://
还是https://
任何不匹配的内容都应该被拒绝并向其举报警告。
这应该可以阻止输入JavaScript代码,因为协议将取消链接中的http
/ https
而不是javascript
:
<a href="http://www.example.com">Cancel</a>
Cancel URL
也必须进行正确的HTML编码,以防止href
属性值上下文中断。
我原本以为如果mtgox将他们的cookie设置为http,那么会阻止这种情况发生吗?
设置HttpOnly Cookie可以防止Cookie被盗,但如果存在XSS漏洞,则意味着其他漏洞可能会出现,例如您的方案中描述的漏洞。由于您的cookie是在JavaScript中设置的,因此会覆盖HttpOnly标志,因为路径更具体。服务器无法检查HTTP请求中此cookie是否为HttpOnly(或路径),因此该标志不会阻止此攻击发生。