概述

跨站请求伪造(Cross-site request forgery,CSRF)是一种攻击,它强制终端用户在当前对其进行身份验证后的web应用程序上执行非本意的操作。

CSRF攻击的主要目的在伪造更改状态(修改密码、转账等)的请求,而不是盗取数据,因为攻击者无法查看对伪造请求的响应。借助社工的一些帮助(例如通过电子邮件或聊天发送链接),攻击者可以诱骗用户执行攻击者选择的操作。

CSRF也被称为One Click Attack 或者 Session Riding ,通常缩写为 CSRF或者XSRF,是一种欺骗受害者提交恶意请求的攻击。它继承了受害者的身份和特权,代表受害者执行非本意、恶意的操作。

危害:

  • 如果受害者是普通用户,则成功的CSRF攻击可以强制用户执行状态更改的请求,例如转义资金,更改其电子邮件地址等。

  • 如果受害者是管理账户,CSRF可能会危及整个web应用程序。

  • 利用CSRF(常存在于密码修改、账号添加等处),攻击者可以盗用你的身份,以你的名义发送恶意请求。 你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

原理

CSRF(跨站请求伪造) 是一种欺骗用户在当前对其通过了身份验证的web服务器上执行非本意操作的一种攻击手法。攻击者借助用户的身份,向服务器发送恶意请求。

简单来说,攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作。

例如:用户用浏览器访问受信任网站A,输入用户名及密码进行登录,用户的用户信息验证通过后,网站A会返回一个cookie信息到浏览器。用户没有退出在当前浏览器的登录,并用当前浏览器访问了攻击者提前写好的假网站B,网站B在收到请求后返回攻击性代码,要求访问网站A,而浏览器携带用户cookie信息则会向网站A发出请求,此时网站A并不知道请求是由恶意网站B发出的,所以网站A会根据用户的cookie信息以用户的身份进行处理,导致网站B的恶意代码被执行。

攻击成功的前提:

  1. 用户已经登录了网站A,并记录了cookie信息

  1. 用户在没有退出登录网站A的前提下,也就是cookie信息生效的情况下,用同一浏览器访问了攻击者提供的恶意网站B,而网站B则要求访问网站A

  1. 网站A未做任何CSRF防御

与XSS漏洞的区别:

CSRF看起来像跨站脚本XSS,但与XSS不一样,XSS利用的是站点内的信任用户,而CSRF则是伪装成收信任用户请求受信任的网站进行利用。与XSS漏洞相比,CSRF不太常见,也比较难以防范,所以CSRF被认为比XSS更具危险性。

靶场环境:pikachu靶场之CSRF

GET型CSRF

  • 使用a标签定义超链接。例如攻击者在恶意网页中,某个a标签语句源代码是<a href="目标站点网页+相关参数">兼职</a>,当受害者点击该网页时,就会向目标站点发送攻击者伪造的请求。

  • 使用img标签插入图像。例如攻击者在恶意网页中,某个img标签语句源代码是<img src="目标站点网页+相关参数">,当受害者刷到该网页的时候,就会向目标站点发送攻击者伪造的请求,由于src不是一个图片的远程地址,所以此时图片显示出错。

  • 其他一些可以触发攻击者伪造URL的标签。

如图所示,页面提示我们进行登录,并提供了用户名及密码

这是登录之后的界面,这设为网站A

点击修改个人信息,然后点击提交抓取数据包,观察数据包可知,该身份认证信息只有个cookie,且修改数据的请求参数都通过get进行发送,而这一系列是很容易进行伪造的

此时,我们右键点击Engagement tools选择Generate CSRF PoC,发现页面显示的是HTML架构

<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><script>history.pushState('', '', '/')</script><form action="http://127.0.0.1/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php"><input type="hidden" name="sex" value="boy" /><input type="hidden" name="phonenum" value="1234567" /><input type="hidden" name="add" value="nba 76" /><input type="hidden" name="email" value="allen@pikachu.com" /><input type="hidden" name="submit" value="submit" /><input type="submit" value="Submit request" /></form></body>
</html>

我们直接修改phonenum的值,修改为111111,如下图所示

将复制的链接在同一浏览器中打开,用户在没有退出浏览器登录的情况下,点击了攻击者网站构造的链接并请求目标网站,即设为网站B

因为用户在网站A已经通过了身份验证,在用户没退出的情况下,只要用户继续请求该站点就会自动携带用户的cookie信息,只要有这cookie信息,就代表"我"是那个身份。所以当用户点击攻击者构造的链接,该链接也是请求目标网站A服务器,由于是用户自己点击的,这一操作也是在用户的浏览器完成的,则会自动携带用户的cookie信息,所以服务器以为这个请求是来自于用户。携不携带cookie和请求来自哪个服务器没有关系。但是我们也可以看到referer(指这个请求来自哪)指向攻击者的服务器,因为请求是从攻击者这个网站发出的。

如下图所示,信息被修改成功!

当用户退出,或者在别的浏览器访问攻击者构造的链接上,则携带的不是有效的cookie信息,就无法修改信息。

所以说CSRF,它是一种欺骗用户在当前对其进行身份验证后的Web应用程序上 执行非本意的操作。

POST型CSRF

即使网站相关操作采用的是POST方法,攻击者也可以通过构造表单的方式来伪造请求

这是登录之后的界面,这设为网站A

登录之后点击修改个人信息,然后点击submit提交抓取数据包,所有参数在请求体中提交,我们不能通过伪造URL的方式进行攻击。

此时,我们右键点击Engagement tools选择Generate CSRF PoC,发现页面显示的是HTML架构,这里我们通过构造表单的方式进行攻击。

<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><script>history.pushState('', '', '/')</script><form action="http://127.0.0.1/pikachu-master/vul/csrf/csrfpost/csrf_post_edit.php" method="POST"><input type="hidden" name="sex" value="girl" /><input type="hidden" name="phonenum" value="1234567" /><input type="hidden" name="add" value="china" /><input type="hidden" name="email" value="lucy@pikachu.com" /><input type="hidden" name="submit" value="submit" /><input type="submit" value="Submit request" /></form></body>
</html>

将复制的链接在同一浏览器中打开,用户在没有退出浏览器登录的情况下,点击了攻击者网站构造的链接并请求目标网站,,即设为网站B

因为用户在网站A已经通过了身份验证,在用户没退出的情况下,只要用户继续请求该站点就会自动携带用户的cookie信息,只要有这cookie信息,就代表"我"是那个身份。所以当用户点击攻击者构造的链接,该链接也是请求目标网站A服务器,由于是用户自己点击的,这一操作也是在用户的浏览器完成的,则会自动携带用户的cookie信息,所以服务器以为这个请求是来自于用户。携不携带cookie和请求来自哪个服务器没有关系。但是我们也可以看到referer(指这个请求来自哪)指向攻击者的服务器,因为请求是从攻击者这个网站发出的。

如下图所示,信息被修改成功!

实际上来说,GET型CSRF与POST型CSRF是一模一样的!

防御

验证 Referer 字段

Referer记录了HTTP请求的来源地址,CSRF攻击,由于攻击者必须在他自己的网站构造请求包,然后请求受害者的服务器,所以请求数据源是攻击者的服务器。所以Refer值也是指向他自己的网站,通过验证Referer的值是否是目标域名,一定程度可以防御该漏洞,但不是万无一失。referer值可以伪造吗?

如上面的实验中,referer中的值是指向的攻击者自己搭建的网站。

添加token并验证

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

二次验证

二次验证,就是在转账等关键操作之前提供当前用户的密码或者验证码。二次验证可以有效防御CSRF 攻击

CSRF漏洞容易存在的地方

  • 修改密码的地方无需验证旧密码

  • 添加账号或修改敏感信息的地方

【CSRF漏洞-01】跨站请求伪造漏洞靶场实战相关推荐

  1. 漏洞解决方案-跨站请求伪造漏洞

    跨站请求伪造漏洞CSRF 跨站请求伪造漏洞CSRF 一.问题描述: 二.整改建议: 三.案例: 1. 客户端进行CSRF防御 2. 服务端进行CSRF防御 跨站请求伪造漏洞CSRF 一.问题描述: C ...

  2. Weblogic服务端请求伪造漏洞(SSRF)和反射型跨站请求伪造漏洞(CSS)修复教程...

    一.服务端请求伪造漏洞 服务端请求伪造(Server-Side Request Forgery),是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助 ...

  3. 【安全牛学习笔记】CSRF跨站请求伪造***漏洞的原理及解决办法

    CSRF跨站请求伪造***漏洞的原理及解决办法 CSRF,夸张请求伪造漏洞 漏洞的原理及修复方法 1.常见的触发场景 2.漏洞原理:浏览器同源策略 3.DEMO 4.漏洞危害 5.如何避免&修 ...

  4. Cisco跨站请求伪造漏洞

    Cisco于11月2日发布了安全更新,修复其部分产品中的多个漏洞.其中最严重的是跨站请求伪造漏洞(CVE-2022-20961),它影响了身份服务引擎(ISE),根本原因是基于Web的管理界面的CSR ...

  5. WordPress qTranslate插件跨站请求伪造漏洞

    漏洞名称: WordPress qTranslate插件跨站请求伪造漏洞 CNNVD编号: CNNVD-201306-058 发布时间: 2013-06-07 更新时间: 2013-06-07 危害等 ...

  6. WordPress Event Easy Calendar插件多个跨站请求伪造漏洞

    漏洞名称: WordPress Event Easy Calendar插件多个跨站请求伪造漏洞 CNNVD编号: CNNVD-201309-083 发布时间: 2013-09-11 更新时间: 201 ...

  7. WordPress Citizen Space插件跨站请求伪造漏洞

    漏洞名称: WordPress Citizen Space插件跨站请求伪造漏洞 CNNVD编号: CNNVD-201307-463 发布时间: 2013-07-23 更新时间: 2013-07-23 ...

  8. WordPress WP cleanfix插件‘eval()’函数跨站请求伪造漏洞

    漏洞名称: WordPress WP cleanfix插件'eval()'函数跨站请求伪造漏洞 CNNVD编号: CNNVD-201305-381 发布时间: 2013-05-20 更新时间: 201 ...

  9. 【CSRF02】跨站请求伪造——DVWA靶场实操(含CSRF+XSS协同攻击实验)

    目录 1 实验简介 1.1 实验目的 1.2 实验环境 2 Low难度 2.1 前戏 2.2 实验步骤 2.3 代码审计 3 Medium难度 3.1 前戏 3.2 实验思路 3.3 方法一:诱导点击 ...

最新文章

  1. 使用GDAL创建Erdas格式的金字塔
  2. Android调用浏览器打开网址遇到的问题
  3. 滤镜应用——制作彩虹效果
  4. STM32L152RC 在keil4中使用printf()和scanf() 函数
  5. 测试用例设计方法(五)路径覆盖
  6. 网页加载的不同的方式、点击按钮显示一句话、jQuery中获取元素的方法
  7. Docker系列之AspNetCore Runtime VS .NetCore Runtime VS SDK(四)
  8. 【云栖大会】创无止境 YunOS云栖大会诠释万物互联
  9. android开发练习:天气应用
  10. 数据库无限层级分类设计
  11. synchronize偏向锁底层实现原理
  12. 电脑开机计算机配置,电脑开机显示配置更新怎么办
  13. 【C学习】全通纸笔王网上阅卷系统 APMS_Setup.exe IP修改程序 - 附C/C#/Delphi源码
  14. 清华大学软件工程教授透露,一本可以让小白变大神的python书籍已经出世
  15. ArcGIS中令栅格数据研究区中水体的DN值为零
  16. div 中img 居中
  17. 安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息
  18. ORA-01790 expression must have same datatype as corresponding expression 问题解决
  19. “知识共享”扎根中国,前景无量
  20. 录音一小时成稿五分钟,这样的智能录音笔你想要吗

热门文章

  1. 转载:使用expdp/impdp进行数据库迁移
  2. 菜鸟学exchange之五:监控exchange 邮件系统和队列查看器
  3. 数据库中的 【行式存储】和【列式存储】
  4. 『力扣刷题』5275_找出井字棋的获胜者 解题代码
  5. 文科生也能看懂,什么是熵
  6. 华硕ASUS VM591U内存条固态拆机安装教程
  7. linux下Oracle常用命令
  8. linux如何查看ip
  9. eemd优缺点_一种改进的EEMD方法及其应用研究
  10. matlab bmp rgb如何转换,RGB到XYZ转化