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

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

环境准备

一、CSRF**(跨站请求伪造)**

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

攻击相关介绍:

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

原理:

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

使用方法:

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

使用前提:

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

防御方法:

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

攻击复现

1、打开DVWA的相关靶场

2、查看Burp Suite抓包情况

截取更改密码的请求

3、生成CSRF的PoC

然后更改请求参数

例如:

html 复制代码
<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://协议来查询字典服务上的单词定义或其他信息。

示例:

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 复制代码
<?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:// 协议
python 复制代码
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攻击的目标是访问服务器受限制的资源,可能导致服务器安全问题。
  • 针对这两种漏洞,有不同的防御机制可供开发人员采取,以保护应用程序和服务器的安全性。
相关推荐
叶落阁主18 小时前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954483 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机3 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机3 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954483 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star3 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954483 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher5 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行8 天前
网络安全总结
安全·web安全
DianSan_ERP8 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet