SSRF:服务端请求伪造

SSRF漏洞原理

SSRF漏洞通常是因为服务端应用程序提供了从其他服务器获取数据的功能,但未对目标地址或协议进行适当的过滤和限制。攻击者可以通过这个漏洞发送构造好的恶意请求,让服务器以自己的身份去访问其他资源,与文件包含漏洞有些许相似

SSRF漏洞利用

SSRF漏洞包括危害:

  • 获取内部系统信息
  • 攻击内网资源
  • 伪造身份进行非法操作
  • 利用特定协议(如dict、file、http等)进行更深入的攻击

易受影响的函数

函数名称 描述 用途 易受SSRF影响的原因 防御措施
curl cURL库的PHP接口 发送HTTP请求 用户可以输入URL,可能被用来访问内部网络 验证输入,使用白名单,限制协议
file_get_contents 获取文件内容 从URL或文件路径读取数据 允许用户输入文件路径,可能被用来访问本地文件 验证输入,限制访问路径,使用白名单

外部资源引用流程图【AI】

复制代码
+----------------+     +----------------+     +----------------+
|               |     |                |     |                |
|  用户输入     +---->+  验证输入      +---->+  发送请求      |
|               |     |  (检查URL/IP)  |     |  (使用curl或   |
+----------------+     +----------------+     |  file_get_contents)|
                             |                |                |
                             |  (使用白名单)  |                |
                             +----------------+                |
                                                            |
                                                            v
                                      +----------------+     +----------------+
                                      |                |     |                |
                                      |  访问外部资源  +---->+  返回结果      |
                                      |                |     |                |
                                      +----------------+     +----------------+

SSRF实例【pikachu】

前端直接引用服务器资源

后端代码

php 复制代码
if(isset($_GET['url']) && $_GET['url'] != null){

    //接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF
    $URL = $_GET['url'];
    $CH = curl_init($URL);
    curl_setopt($CH, CURLOPT_HEADER, FALSE);
    curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
    $RES = curl_exec($CH);
    curl_close($CH) ;
    echo $RES;
}

运行逻辑

1.检查前端传递参数是否存在且不为空。存在且不为空的情况下执行if语句

if(isset(_GET\['url'\]) \&\& _GET['url'] != null)

2.创建变量URL接收前端url参数的值

URL = _GET['url'];

3.初始化curl会话,用于设置其他选项和执行请求

CH = curl_init(URL);

4.设置curl选项,关闭http头部信息的返回,只返回主体内容

curl_setopt($CH, CURLOPT_HEADER, FALSE);

5.设置curl选项,在请求时不验证目标网站的ssl证书信息

curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);

6.执行curl会话,发起请求并将响应内容赋值给变量&RES

RES = curl_exec(CH);

6.关闭会话

curl_close($CH) ;

7.输出响应内容

echo $RES;

ssrf利用流程

根据源码分析,发现网站后台对请求并没有进行限制,且用户前端可对参数进行控制,产生了ssrf漏洞,

1.访问内网文件

payload:http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/xxe.php

  1. 伪协议读取本地文件

payload: http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c://windows//system.ini

  1. 端口扫描

payload:?url=127.0.0.1:[端口号]

页面加载时间正常端口开启,异常端口关闭

相关推荐
csdn_aspnet13 分钟前
如何保护您的 .NET Web API 免受常见安全威胁
安全·xss·csrf·.net core·cors
广州灵眸科技有限公司23 分钟前
瑞芯微(EASY EAI)RV1126B QT GUI例程方案
linux·服务器·开发语言·网络·人工智能·qt·物联网
枫叶丹427 分钟前
【HarmonyOS 6.0】ArkWeb 私有网络访问控制接口详解
开发语言·网络·华为·harmonyos
聊点儿技术32 分钟前
大促期间IP代理识别API频频超时怎么办?——高并发场景下离线库选型与本地部署实战
网络·tcp/ip·游戏·ip离线库·电商风控·识别代理ip·代理ip识别api
CV-杨帆32 分钟前
EACL 2026 大模型安全相关论文整理
安全
hughnz41 分钟前
自动化控压钻井系统的挑战与风险
linux·服务器·网络
wanhengidc41 分钟前
云服务器和物理服务器的不同之处
运维·服务器·网络·网络协议·智能手机
曼岛_1 小时前
[网络安全] Linux权限维持-隐藏篇
linux·安全·web安全·安全威胁分析
恋恋风尘hhh1 小时前
文字点选验证码前端安全研究:以网易易盾(dun.163)为例
前端·安全
czxyvX1 小时前
主从Reactor模型实现并发服务器
linux·网络·epoll