CSRF(跨站请求伪造)和SSRF(服务端请求伪造)漏洞复现:风险与防护方法

这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 

环境准备

一、CSRF(跨站请求伪造)

示例:假设用户在银行网站A上登录并保持会话活动,同时他也在浏览其他网站。攻击者在一个不可信任的网站B上创建了一个恶意链接,当用户点击该链接时,会自动向银行网站A发送一个恶意请求,导致执行未经授权的操作,例如转账或更改密码。

攻击相关介绍:

CSRF漏洞指的是攻击者利用受害者的身份,在其不知情的情况下发送恶意请求给目标网站。由于目标网站无法区分恶意请求和正常请求,因此会执行该请求。这使得攻击者能够以受害者的名义执行一些不被授权的操作,例如更改密码、发表言论、转账等。

原理:

        CSRF漏洞的原理在于浏览器的自动提交机制。当用户在目标网站登录后,并保持了有效的身份认证信息(如Cookie),在不退出登录的情况下访问其他网站时,浏览器会自动发送与目标网站相关的请求,而这些请求是由攻击者精心构造的。由于浏览器会自动携带受害者的身份认证信息,目标网站无法区分请求的真伪。

使用方法:

        攻击者通常通过诱导受害者点击恶意链接、访问恶意网站或打开包含恶意代码的邮件等方式来利用CSRF漏洞。一旦受害者在浏览器中执行了攻击者精心构造的请求,攻击就会生效。

使用前提:

  • 受害者必须已经登录并且在目标网站上保持有效的身份认证。
  • 目标网站的请求没有采取预防CSRF攻击的措施。

防御方法:

  • 使用CSRF Token:为每个用户生成一个唯一的令牌,并将其嵌入到表单中,请求验证时校验该令牌。
  • 检查Referer头:服务器端检查请求头中的Referer字段,确保请求来源于合法的网站。
  • 使用验证码:在进行敏感操作之前,要求用户进行验证码验证。
  • 添加随机请求参数:向请求中添加随机生成的参数,使攻击者无法预测和构造合法的请求。
  • 限制用户权限:根据用户的权限级别限制其操作范围,减少潜在危害。

攻击复现

1、打开DVWA的相关靶场

2、查看Burp Suite抓包情况

截取更改密码的请求

3、生成CSRF的PoC

然后更改请求参数

例如:

<html>
<!-- CSRF PoC - generated by Burp Suite Professional --><body><script>history.pushState('', '', '/')</script><form action="http://192.168.1.91/dvwa/vulnerabilities/csrf/"><input type="hidden" name="password&#95;new" value="aaaa" /><input type="hidden" name="password&#95;conf" value="aaaa" /><input type="hidden" name="Change" value="æ&#148;&#185;å&#143;&#152;" /><input type="submit" value="Submit request" /></form>
</body></html>

4、最后就是诱导受害者点击打开我们的攻击脚本的链接

不过我这里是测试就直接在浏览器打开脚本

复现成功,其他类型的攻击方式操作也是这样。 

二、SSRF(服务端请求伪造)

示例:攻击者通过在受害服务器上构造恶意请求,使其尝试访问内部资源或第三方服务。例如,攻击者可以构造一个请求,要求目标服务器读取敏感文件并将其内容返回给攻击者,从而获取敏感信息。

攻击相关介绍

介绍:

        SSRF漏洞指的是攻击者通过操纵目标Web应用程序中的请求来发起伪造请求。攻击者利用这种漏洞可以访问应用程序所在服务器上的本地资源,或者攻击内部网络中的其他系统,并执行恶意操作。

原理:

        SSRF漏洞的原理在于目标Web应用程序对外部资源的访问没有进行充分的过滤和验证。攻击者通过构造特定的请求,可以控制目标服务器向任意的内部或外部资源发起请求。这使得攻击者能够访问未授权的资源、窃取数据或发起其他恶意操作。

使用方法:

        攻击者通常通过向目标Web应用程序提交包含特殊URL的请求来利用SSRF漏洞。这些URL可能指向内部系统的地址、本地文件、外部服务器等。一旦目标应用程序未能正确过滤或验证这些URL,并将其用于发送请求,攻击就会生效。

使用前提:

  • 目标Web应用程序存在SSRF漏洞,未对外部资源的访问进行充分的验证和过滤。
  • 攻击者能够向目标应用程序提交恶意请求,并控制或影响请求中的参数。

防御方法:

  • 输入验证和过滤:对用户输入的URL进行严格的验证和过滤,确保请求的目标是合法的。
  • 白名单限制:限制目标URL只能访问特定的合法域名或IP地址,避免访问不受信任的资源。
  • 特权分离:降低应用程序对内部资源的访问权限,仅允许访问必要的资源。
  • 使用代理服务:通过使用代理服务器来隔离应用程序与外部资源之间的联系,限制请求的范围。
  • 加强访问控制:对敏感资源进行严格的访问控制,确保只有授权用户才能访问。

造成SSRF漏洞的常见函数

fsockopen():

  • fsockopen()函数用于打开一个网络连接,并返回一个文件指针。它可以用于与远程服务器进行通信,包括发起请求和获取响应。 

file_get_contents()

  • file_get_contents()函数用于读取文件的内容,并将其作为字符串返回。它可以用于获取远程文件的内容,包括通过URL获取内容。

curl_exec():

  • curl_exec()函数用于执行一个CURL会话,并返回执行结果。它可以用于发送HTTP请求,并获取响应。

在SSRF漏洞中,以下协议有不同的作用: 

dict://协议:

  • dict://协议用于访问字典服务(DICT)。
  • 攻击者可以使用dict://协议来查询字典服务上的单词定义或其他信息。

示例:

  • attacker.com/ssrf.php?url=dict://dict.org:2628/define:test
  • 上述请求将在dict.org字典服务上查询单词"test"的定义。
  • 如果没有对URL参数进行适当的验证和过滤,攻击者可以构造恶意请求并通过应用程序执行不受信任的操作。

file://协议:

  • file://协议用于访问本地文件系统。
  • 攻击者可以使用file://协议来读取服务器上的文件,包括敏感文件或配置文件。

示例:

  • attacker.com/ssrf.php?url=file:///etc/passwd
  • 上述请求将尝试读取位于目标服务器上的/etc/passwd文件。
  • 如果应用程序没有正确限制文件协议的使用,攻击者可以访问和下载任意文件,导致信息泄露或系统安全受到威胁。

gopher://协议:

  • gopher://协议是一个早期的互联网协议,用于在客户端和服务器之间传输文本数据。
  • 攻击者可以使用gopher://协议来执行各种操作,如查询目录、读取文件等。

示例:

  • attacker.com/ssrf.php?url=gopher://example.com:70/_
  • 上述请求将尝试使用gopher协议连接到example.com的70端口。
  • 如果应用程序不对协议进行正确过滤和验证,攻击者可以利用gopher协议在目标服务器上执行未经授权的操作。

攻击复现

存在SSRF的脚本

将脚本存放在本地的phpStudy下的WWW目录下

<?php
$url = $_GET['url'];
$response = file_get_contents($url);
echo $response;
?>

解释:

这个脚本存在SSRF漏洞。原因在于它没有充分验证和过滤用户输入的URL参数$_GET['url'],攻击者可以通过构造恶意的URL参数,将请求发送到应用程序不受信任的目标地址上。

具体来说,攻击者可以通过向URL参数中添加如下payload,来进行SSRF攻击:

  • 添加错误的IP地址,以绕过IP地址验证
  • 添加危险的协议,如file://,以访问本地文件系统
  • 添加内网主机的IP地址或域名,以访问内部的敏感资源
  • 指定重定向URL,以执行钓鱼等攻击

举例来说,如果攻击者向URL参数中注入如下payload,就可以将请求发送到不受信任的目标地址上,进而发起一次SSRF攻击: Example Domain

为了防止这种攻击,开发人员必须对用户输入的URL参数进行严格的验证和过滤,确保只允许访问合法、安全可信任的URL。例如,可以使用白名单限制目标URL只能指向安全可信任的域名或IP地址,规避潜在的恶意资源。

file:// 协议
http://127.0.0.1/SSRF.php?url=file:///F:1.txt

复现成功

三、CSRF(跨站请求伪造)与SSRF(服务端请求伪造)漏洞主要区别

攻击对象:

  • CSRF攻击针对的是用户,利用用户已经身份验证的会话来执行未经授权的操作。
  • SSRF攻击针对的是服务器,通过欺骗服务器发起请求来访问内部资源或第三方服务。

目标:

  • CSRF攻击的目标是利用用户的身份和权限执行未经授权的操作,可能导致数据泄露、账户劫持、信息篡改等后果。
  • SSRF攻击的目标是访问服务器受限制的资源,可能导致内部系统暴露、敏感信息泄露、甚至远程命令执行等后果。

攻击方式:

  • CSRF攻击利用受信任用户的会话信息,诱使用户在已验证的网站上执行恶意请求,通过构造特殊的请求来执行攻击
  • SSRF攻击通过构造恶意请求,欺骗服务器发起请求到攻击者指定的目标,利用服务器信任的能力来获取敏感数据或执行其他操作

防御机制:

  • 针对CSRF攻击,常用的防御机制包括使用CSRF令牌验证、验证请求来源(Referer、Origin等)以及双重确认等措施。
  • 针对SSRF攻击,常用的防御机制包括使用白名单验证输入URL、限制访问服务器的网络连接和端口等。

总结:

  • CSRF攻击利用用户身份和会话执行未经授权的操作,而SSRF攻击利用服务器发起请求访问内部资源或第三方服务。
  • CSRF攻击的目标是利用用户权限,可能导致用户账户问题,而SSRF攻击的目标是访问服务器受限制的资源,可能导致服务器安全问题。
  • 针对这两种漏洞,有不同的防御机制可供开发人员采取,以保护应用程序和服务器的安全性。

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

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

相关文章

聊聊Http服务化改造实践

在微服务架构体系中远程RPC调用主要包括Dubbo与Http调用两个大类&#xff0c;由于Dubbo拥有服务注册中心&#xff0c;并且起服务的命名非常规范&#xff0c;使用包名.类名.方法名进行描述。 而http调用通常都是使用httpclient等相关类库&#xff0c;这些在使用上并没有问题&am…

18.2 【Linux】rsylog.service:记录登录文件的服务

rsyslogd 可以负责主机产生的各个信息的登录&#xff0c;而这些信息本身是有“严重等级”之分的。每个 Linux distributions 放置的登录文件文件名可能会有所差异。 基本上&#xff0c; rsyslogd 针对各种服务与讯息记录在某些文件的配置文件就是 /etc/rsyslog.conf&#xff0…

工厂人员作业行为动作识别检测算法

工厂人员作业行为动作识别检测算法通过yolov7python深度学习算法框架模型&#xff0c;工厂人员作业行为动作识别检测算法实时识别并分析现场人员操作动作行为是否符合SOP安全规范流程作业标准&#xff0c;如果不符合则立即抓拍告警提醒。Python是一种由Guido van Rossum开发的通…

【Docker】网络

文章目录 Docker 网络基础Docker网络管理Docker网络架构CNMLibnetwork驱动 常见的网络类型 Docker 网络管理命令docker network createdocker network inspectdocker network connectdocker network disconnectdocker network prunedocker network rmdocker network ls docker …

机器学习和数据挖掘02-Gaussian Naive Bayes

概念 贝叶斯定理&#xff1a; 贝叶斯定理是概率中的基本定理&#xff0c;描述了如何根据更多证据或信息更新假设的概率。在分类的上下文中&#xff0c;它用于计算给定特征集的类别的后验概率。 特征独立性假设&#xff1a; 高斯朴素贝叶斯中的“朴素”假设是&#xff0c;给定…

一个简单的vim例子

一.欢迎来到我的酒馆 在本章节介绍vim工具。 目录 一.欢迎来到我的酒馆二.什么是vim三.开始使用vim 二.什么是vim 2.1什么是vim vim是一种Linux命令行类型的文本编辑器。vim指的是"vi improved"&#xff0c;意思是vi工具的升级版。vim是基于vi实现的&#x…

Redis问题集合(三)在Redis容器里设置键值对

前言 前提是已经拉取了Redis镜像并创建了对应的容器做个记录&#xff0c;方便后续查看 步骤 查看Redis容器的ID&#xff1a;docker ps -a 进入容器&#xff1a;docker exec -it 容器ID /bin/bash进入redis命令行&#xff1a;redis-cli输入密码&#xff1a;auth 配置密码 查看…

(笔记六)利用opencv进行图像滤波

&#xff08;1&#xff09;自定义卷积核图像滤波 import numpy as np import matplotlib.pyplot as plt import cv2 as cvimg_path r"D:\data\test6-6.png" img cv.imread(img_path)# 图像滤波 ker np.ones((6, 6), np.float32)/36 # 构建滤波器&#xff08;卷积…

jq插件:jqgrid和validform的二次封装

做久了vue和react框架项目&#xff0c;偶尔也需要做做原生的项目。不可否认vue的双向绑定机制确实很香&#xff0c;但是也是建立在原生js基础上。所以&#xff0c;只有做更多的原生js项目&#xff0c;才能更加了解vue框架的底层原理。在日常开发中&#xff0c;也会不可避免的会…

postgresql-日期函数

postgresql-日期函数 日期时间函数计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间CURRENT_DATE当前事务开始时间 时区转换 日期时间函数 PostgreSQL 提供了以下日期和时间运算的算术运算符。 计算时间间隔 age(timestamp, timestamp)函数用于计算两…

正中优配:A股早盘三大股指微涨 华为概念表现活跃

周三&#xff08;8月30日&#xff09;&#xff0c;到上午收盘&#xff0c;三大股指团体收涨。其间上证指数涨0.06%&#xff0c;报3137.72点&#xff1b;深证成指和创业板指别离涨0.33%、0.12%&#xff1b;沪深两市合计成交额6423.91亿元&#xff0c;总体来看&#xff0c;两市个…

博睿数据当选粤港澳大湾区金融创新研究院理事会单位,助力金融科技创新发展

近日&#xff0c;博睿数据当选粤港澳大湾区金融创新研究院理事会单位。这是对博睿数据在金融科技领域所取得成绩的高度认可&#xff0c;也是对其创新能力和发展潜力的充分肯定。 粤港澳大湾区金融创新研究院由粤港澳三地金融行业、高等院校高层和专家学者共同发起&#xff0c;经…