绕过CSRF防御的一种方法

date 2010年03月05日 | category 学习笔记| 坏人咖啡

作者:xisigr

CSRF产生的本质在于,WEB主要依赖于使用cookie来传递令牌。只要WEB应用程序依赖于HTTPcookie来传递会话令牌,那么本身就存在攻击的可能性。所以,Monyer着手从cookie上面来防御CSRF的思路还是很赞的。
Monyer的两篇文章:
http://hi.baidu.com/monyer/blog/item/6097347a958babe62e73b3bf.html
http://hi.baidu.com/monyer/blog/item/00427989bbf8edb80e244420.html

防御CSRF现在最普遍的方法是使用token。通常,在第一阶段应用程序在一个隐藏的表单字段中放入一个token;在第二个阶段,程序确认这个 token是否被提交。由于CRSF是单向性的,因此实施攻击的WEB站点无法从第一个阶段获取到token,然后再第二阶段提交。如果程序使用这两个步骤,但并不保证token安全,那么这种防御就是形同虚设,因此CSRF攻击者只需轮流提出两个必要的请求,或是直接进入第二个求情。

现在例举在JSP和ASP.NET平台下,绕过CSRF保护的一种方法。

一个简单的升级Email ID的例子,服务端程序使用了token来防止csrf攻击:

客户端:

服务端:

然后使用ClickJacking发送到服务器请求。请求提交内容为:

在POST数据中email的参数是空。

现在我们请求了两个“email”参数,一个在POST中,一个在QueryString中。当服务端request.parameter(“email”)时,取出的将是QueryString中的数据,而不是POST中的。这样我们就更新了攻击者的Email。

相关资料:http://blog.andlabs.org/2010/03/bypassing-csrf-protections- with.html (在这篇文章中,作者是想通过ClickJacking和HPP这两种攻击方式的组合来绕过CSRF防御,但我们不要陷入ClickJacking和 HPP这两概念上,只要看到过程和结果都是正确的就好。)

所属分类: 学习笔记
Tags: ,


没有评论

暂无评论

RSS feed for comments on this post.

对不起,该文章的评论被关闭了!