内容简介:----
Cross-site request forgery 简称为 “CSRF” ,在 CSRF 的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以 CSRF 攻击也成为 "one click" 攻击。 很多人搞不清楚 CSRF 的概念,甚至有时候会将其和 XSS 混淆 , 更有甚者会将其和越权问题混为一谈 , 这都是对原理没搞清楚导致的。
这里列举一个场景解释一下,希望能够帮助你理解。
场景需求:
小黑想要修改大白在购物网站 tianxiewww.xx.com 上填写的会员地址。
先看下大白是如何修改自己的密码的:
登录 --- 修改会员信息,提交请求 --- 修改成功。
所以小黑想要修改大白的信息,他需要拥有: 1 ,登录权限 2,修改个人信息的请求。
但是大白又不会把自己 xxx 网站的账号密码告诉小黑,那小黑怎么办?
于是他自己跑到 www.xx.com 上注册了一个自己的账号,然后修改了一下自己的个人信息(比如: E-mail 地址),他发现修改的请求是:
【 http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change 】
于是,他实施了这样一个操作:把这个链接伪装一下,在小白登录 xxx 网站后,欺骗他进行点击,小白点击这个链接后,个人信息就被修改了 ,小黑就完成了攻击目的。
为啥小黑的操作能够实现呢。有如下几个关键点:
1.www.xxx.com 这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造 ;
--- 因此,我们判断一个网站是否存在 CSRF 漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作 ( 增删改 ) 是否容易被伪造。
2. 小白点击了小黑发给的链接,并且这个时候小白刚好登录在购物网上 ;
--- 如果小白安全意识高,不点击不明链接,则攻击不会成功,又或者即使小白点击了链接,但小白此时并没有登录购物网站,也不会成功。
--- 因此,要成功实施一次 CSRF 攻击,需要 “ 天时,地利,人和 ” 的条件。
当然,如果小黑事先在 xxx 网的首页如果发现了一个 XSS 漏洞,则小黑可能会这样做: 欺骗小白访问埋伏了 XSS 脚本(盗取 cookie 的脚本)的页面,小白中招,小黑拿到小白的 cookie ,然后小黑顺利登录到小白的后台,小黑自己修改小白的相关信息。
--- 所以跟上面比一下,就可以看出 CSRF 与 XSS 的区别: CSRF 是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而 XSS是直接盗取到了用户的权限,然后实施破坏。
因此,网站如果要防止 CSRF 攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致 CSRF 。比如:
-- 对敏感信息的操作增加安全的 token ;
-- 对敏感信息的操作增加安全的验证码;
--
对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。
CSRF ( get )
1. 首先使用 vince的账号登陆进去
2. 点击修改信息,把住址修改成 chain123,并抓包下来
3.退出vince 的账号,使用 kobe账号登录,可以看到kobe的住址是nba lakes
4. 在登录上 kobe 账号的情况下,点击抓包下来的链接,使其可以修改 kobe 住址
5. 刷新过后发现个人信息已改变
CSRF ( post )
1. 如果是 POST 型的,所有参数在请求体中提交,我们不能通过伪造 URL 的方式进行攻击
2. 这里的攻击方式跟 XSS 中 POST 类型是一样的,攻击者可以搭建一个站点,在站点上做一个表单,诱导 lucy 点击这个链接,当用户点击时,就会自动向存在 CSRF 的服务器提交 POST 请求修改个人信息
编写一个 post.html 页面,代码如下所示,本文把此页面放到 Kali 的 /var/www/html/pikachu/doge_csrf 下,然后启动 apache 服务
<html> <head> <script> window.onload = function() { document.getElementById("postsubmit").click(); } </script> </head> <body> <form method="post" action="http://192.168.171.133/pikachu/vul/csrf/csrfpost/csrf_post_edit.php"> <input id="sex" type="text" name="sex" value="girl" /> <input id="phonenum" type="text" name="phonenum" value="12345678922" /> <input id="add" type="text" name="add" value="hacker" /> <input id="email" type="text" name="email" value="lucy@pikachu.com" /> <input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body> </html>
4. 把页面的 URL 发送给受害者,只要受害者一点击这个链接,就会自动往服务器发送 POST 请求,修改地址信息
CSRF ( token )
1.CSRF 的主要问题是敏感操作容易被伪造,我们可以加入 Token 让请求不容易被伪造
2. 每次请求,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证,抓包进行查看
跟前面比较,这里多了一个 Token ,如果后台对提交的 Token 进行了验证,由于 Token 是随机的,我们就无法伪造 URL 了。
以上所述就是小编给大家介绍的《Pikachu-CSRF(跨站请求伪造)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 跨站请求伪造已死!
- 跨站请求伪造 (CSRF) 攻击
- 跨站请求伪造已经死了!(译文)
- 跨站点请求伪造(CSRF)总结和防御
- php伪造Referer请求反盗链资源
- 跨站请求伪造与 Same-Site Cookie
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。