【SRC】SSRF (服务端请求伪造) 专项挖掘与实战笔记

📅 发布时间:2026/7/5 5:30:02 👁️ 浏览次数:
【SRC】SSRF (服务端请求伪造) 专项挖掘与实战笔记
本文仅用于技术研究禁止用于非法用途。Author:枷锁SSRF (服务端请求伪造) 专项挖掘与实战笔记核心定义SSRF (Server-Side Request Forgery) 是指攻击者构造恶意数据诱导服务端向内网或外部系统发起请求的漏洞。本质突破网络边界防火墙/NAT利用有权限的内网服务器作为跳板攻击内网其他服务。模块一核心原理与认知1.1 漏洞成因本质逻辑用户访问的是公网映射端口如80但后端服务器位于内网。攻击者通过控制服务器发起的请求跨越防火墙边界。攻击路径客户端 - 反向代理/防火墙 -Web服务器 (存在SSRF作为跳板)-内网目标 (Redis/Metadata/Database/Internal Web)。关键区别 (面试高频)SSRF服务端发起请求攻击内网资源。CSRF/XSS客户端/浏览器发起请求攻击用户身份。URL重定向 (302/301)服务端告诉浏览器去访问某地实际上还是浏览器在跑无法访问内网。1.2 漏洞危害分级高危有回显 (Full Response)可以看到请求返回的包内容如内网Web源码、文件内容。支持危险协议支持file://(任意文件读取)、gopher://(构造万能包打Redis/FastCGI)。云环境可读取元数据 (Metadata)获取 AK/SK 接管云账号。中低危无回显 (Blind SSRF)看不到内容仅能通过响应时间或状态码判断端口是否开放内网扫描。模块二漏洞挖掘与探测2.1 漏洞发现敏感触发点与参数特征SSRF 往往隐藏在任何涉及“服务器去请求外部资源”的功能中。实战中不能只盯着 URL要全方位狙击。1. 敏感参数“狙击表”遇见以下参数名应立即联想并测试 SSRF 风险资源定位类url,link,src,source,target,u,domain,path,uri业务预览类share,wap,display,sourceURL,imageURL,preview,callback移动端/特定版本3g,wap,api,proxy,site2. 典型业务场景与隐蔽位置远程预览与抓取在线网页翻译、转码服务、网页截图预览。多媒体处理富文本编辑器如 UEditor的远程图片抓取、头像 URL 导入。文件处理组件HTML 转 PDF (wkhtmltopdf)、在线 Office 预览、简历解析。服务连接/测试设备后台管理中的“存活测试”、“网络连通性检查”。【实战技巧】隐蔽的上传包课件提到SSRF 不仅存在于 GET 参数中文件上传 (Multipart) 的表单字段里若包含 URL 地址也是极易被忽略的高危点。2.2 确认漏洞深度探测与判定技巧探测的目的是确认参数是否真正可控并判断服务端请求的深度是否有回显、能否访问内网。A. DNSLog 探测 (初步出网验证)用于确认服务器是否能够向外发起请求。操作将参数改为http://[uuid].dnslog.cn或dig.pm等平台。避坑指南黑名单机制大型厂商常将公开 DNSLog 平台加入黑名单。若无回连不代表没漏洞。自建平台实战建议使用自建 DNSLog 以绕过拦截。B. 资源回显探测 (判定“全回显”SSRF)操作请求服务器自身资源或内网已知 Web 页面。示例?urlhttp://127.0.0.1/robots.txt。判定若页面直接嵌入或返回了目标页面的 HTML 源码或二进制流则为“有回显 SSRF”危害极大可直接读取源码或进行指纹识别。C. 时间差探测 (针对“无回显/盲”SSRF)这是应对防御严密系统的核心技能。通过响应时间的“量级差异”判断内网存活情况。建立响应基准线 (Baseline)存活 IP/端口如127.0.0.1:80响应通常极快 100ms可能提示Connection Refused。不存活 IP/端口如128.0.0.1:80会触发服务端尝试连接直到超时响应可能长达20000ms。判定逻辑时间极短目标存活。时间极长 (Timeout)目标 IP 不存活或防火墙策略拦截。Intruder 扫描实战将 IP 末位设为变量使用 Burp Intruder 进行 C 段爆破。观察列重点观察Response Received列将时间排序毫秒级响应的通常即为内网存活主机。2.3 挖掘利器Burp Suite 配置优化在挖掘 SSRF 时一个小小的配置决定了你是“挖到高危”还是“直接错过”。1. 开启“隐藏”的请求记录操作路径Proxy-HTTP history-Filter- 勾选“Show images”取消勾选 Hide images。实战理由许多 SSRF 请求的后缀是.jpg或.png例如远程加载头像。Burp 默认会过滤图片包以保持流畅。如果关闭该显示你将无法在历史记录中观察到关键的 SSRF 参数请求导致“灯下黑”。2. 状态码与响应体微小差异观察响应中的Content-Length和Message。即使是盲打有些服务器也会提示Connect Time Out或No Route to Host这些都是判定内网结构的重要指纹。模块三后端语言与协议差异 (面试重点)SSRF 漏洞的威胁程度攻击面高度依赖于后端代码所调用的函数及其底层库支持的协议。在面试和实战中准确判定后端环境是制定后续渗透方案如读文件、打 Redis的关键。3.1 核心支持差异表语言危险函数/类库支持协议 (Protocol Schemes)风险等级实战/面试要点PHPcurl_exec()http, https, ftp,gopher,file, dict, telnet极高Gopher 协议是 SSRF 的“天花板”可构造任意 TCP 报文模拟 POST直接打内网 Redis、FastCGI。PHPfile_get_contents()http, https, ftp,file, php://, data://高封装协议极其灵活。常用file://读取/etc/passwd或php://filter读取源码。Javajava.net.URL/URLConnectionhttp, https, ftp,file,jar中/高默认不支持 Gopher。注意高版本 JDK如 JDK 21开始对file协议进行严格限制。JavaHttpClient(Apache)http, https低默认仅支持 Web 协议通常无法直接读取本地文件或利用复杂伪协议。Pythonurllib.request.urlopen()http, https, ftp,file中/高默认支持file协议读取系统配置。requests库则相对安全主要支持 http/https。3.2 重点协议利用场景file:// 协议 (任意文件读取)目标/etc/passwd(Linux 用户信息)、C:\Windows\win.ini(Windows 特征文件)、数据库配置文件、Web 源码。面试点如果无法出网file协议是获取服务器立足点的核心手段。gopher:// 协议 (万能攻击手段)原理可以封装任何 TCP 请求。实战通过 Gopher 封装 Redis 命令在内网 Redis 未授权访问的情况下实现写 Webshell、写 SSH 公钥或计划任务反弹 Shell。dict:// 协议 (指纹识别)利用探测内网端口开放情况获取服务版本指纹信息。3.3 协议支持判定逻辑 (实战技巧)在不看代码的情况下可以通过尝试不同的Payload 前缀来反向推导出后端环境尝试file:///etc/passwd若返回文件内容说明后端支持file协议。尝试dict://127.0.0.1:22若返回 SSH 版本信息说明后端支持dict协议。尝试gopher://127.0.0.1:6379若 DNSLog 或监听端口收到复杂格式请求说明支持gopher。模块四攻击实战手法SSRF 的核心价值在于其“上限极高”——它不仅能探测网页更能作为突破网络隔离、操纵内网服务的关键跳板。本模块详述三种核心攻击路径。4.1 任意文件读取 (File Protocol)当确认后端支持file协议后这是获取服务器本地敏感信息的最直接手段。Linux 系统目标file:///etc/passwd读取系统用户信息确认系统环境。file:///etc/hosts获取内网 IP 与域名的映射关系辅助内网渗透。file:///var/www/html/config.php读取 Web 源码或数据库配置文件需配合回显。Windows 系统目标file:///C:/Windows/win.iniWindows 系统特征文件。Java 环境特有绕过netdoc:///etc/passwd在某些 Java 环境中若file协议被黑名单拦截netdoc协议常能作为替代方案实现相同效果。4.2 内网资产扫描与指纹识别针对Blind SSRF (无回显)利用响应时间的“量级差异”进行内网“大保健”式扫描。探测思路存活 IP 爆破利用 Burp Intruder 遍历内网常用网段10.x.x.x,172.16.x.x,192.168.x.x。敏感端口探测重点扫描22(SSH)、80/8080(Web)、3306(MySQL)、6379(Redis)、27017(MongoDB)。服务指纹识别特征文件尝试请求/favicon.ico、/phpinfo.php或/README.md。报错信息根据返回的Server头或特定的 HTTP 响应体判断内网应用类型。4.3 操纵内网服务与攻击 (Gopher 协议)gopher://是 SSRF 攻击的终极武器它允许攻击者将复杂的 TCP 数据包如 POST 请求或 Redis 指令封装进一个 URL 中。1. 攻击 Redis (最经典利用)在内网 Redis 存在未授权访问或弱口令时可通过 Gopher 协议执行写入 Webshell修改 Redis 配置将数据保存路径设为 Web 目录写入 PHP 木马。Crontab 反弹 Shell向/var/spool/cron/root写入计划任务适用于部分 Linux 发行版。写入 SSH 公钥将攻击者的公钥覆盖至/root/.ssh/authorized_keys实现直接 SSH 免密登录。2. 攻击 FastCGI通过 Gopher 构造特定格式的 FastCGI 数据包发送给 PHP-FPM通常在内网 9000 端口从而实现 RCE (远程命令执行)。3. 操纵内网 API许多内网管理接口因认为处于“安全区”而未做鉴权。利用通过 SSRF 伪造服务端身份调用内网 API。例如http://internal-api/delete_user?id1。4. 工具与技巧Gopherus推荐工具Gopherus(自动化生成 Redis、FastCGI 等多种服务的攻击 Payload)。【关键注意】二次编码由于 Payload 是通过 HTTP 参数传输的生成的 Gopher 链接通常需要进行二次 URL 编码才能确保在后端解析时保持原始格式。模块五云主机元数据攻击在云原生时代SSRF 的威力被无限放大。攻击者不再仅仅局限于扫描内网而是直接通过 SSRF 窃取云主机的“身份凭证”实现对整个云账户资产的接管。5.1 什么是元数据 (Metadata)元数据是云厂商为每一台云主机ECS/EC2内置的一个特殊信息库。本质它是实例的“身份证”和“配置手册”。特性只能在云主机内部访问外部无法直接访问。通常绑定在一个固定的、特殊的内部 IP 上。包含内容主机名、内网 IP、安全组、镜像 ID以及最关键的RAM/IAM 临时安全凭证 (AK/SK)。5.2 各大云厂商元数据访问地址实战中首先需要通过 SSRF 探测目标主机的公网出口 IP判定其所属云厂商然后尝试对应的路径。云厂商核心访问地址典型路径示例阿里云/京东云http://100.100.100.200/latest/meta-data/AWS / 腾讯云 / 华为云http://169.254.169.254/latest/meta-data/谷歌云 (GCP)http://metadata.google.internal需要 Header:Metadata-Flavor: Google5.3 攻击实战窃取 AK/SK 流程 (以阿里云为例)如果云主机绑定了 RAM 角色管理角色攻击者可以通过以下三步实现“云接管”探测 RAM 角色名称Payload:http://100.100.100.200/latest/meta-data/ram/security-credentials/返回结果: 返回一个字符串如AliyunTestRole这就是该主机的角色名。获取临时访问凭证 (AK/SK)Payload:http://100.100.100.200/latest/meta-data/ram/security-credentials/AliyunTestRole返回内容: 一个包含AccessKeyId,AccessKeySecret,SecurityToken和Expiration的 JSON 包。接管云资源操作: 将拿到的凭证配置到云厂商的命令行工具如aliyun-cli中。后果: 根据角色权限攻击者可能获得该账号下所有 ECS 的控制权、OSS 存储桶的读写权甚至直接修改账号密码成为该云环境的“皇帝”。5.4 进阶技巧PDF 导出与元数据结合在一些 HTML 转 PDF 的功能点中如果后端使用了脆弱组件如 wkhtmltopdfPayload:iframe srchttp://100.100.100.200/latest/meta-data/ram/security-credentials/[角色名]/iframe利用: 即使 SSRF 没有直接回显在 Web 页面PDF 渲染器也会将请求到的 AK/SK 内容直接“打印”在生成的 PDF 文件中。5.5 风险判定与建议判定依据只要能通过 SSRF 访问到元数据路径无论是否拿到了 AK/SK都属于严重配置风险。防御核心最小权限原则不要给云主机绑定不必要的 RAM/IAM 高权角色。IMDSv2 升级对于 AWS 等平台开启强制 Token 校验模式使简单的 GET 请求无法获取元数据。模块六特殊场景与Bypass技巧SSRF 不仅仅存在于简单的 URL 参数中在复杂的文件转换功能以及严密的防御过滤下需要通过深层的底层原理进行突破。6.1 HTML转PDF (wkhtmltopdf 深度利用)1. 漏洞成因核心组件后端常使用wkhtmltopdf命令行工具将用户提交的 HTML 数据渲染为 PDF。脆弱配置该工具内置了基于 WebKit 的浏览器引擎且默认开启了--enable-local-file-access参数。渲染逻辑后端服务器会像浏览器一样解析 HTML其中的iframe、img或script标签会被服务器执行。2. 实战 Payload如果页面允许你输入 HTML 标签如简历预览、发票生成任意文件读取 (Iframe法)iframe srcfile:///etc/passwd width600 height400/iframe读取云元数据iframe src[http://100.100.100.200/latest/meta-data/ram/security-credentials/](http://100.100.100.200/latest/meta-data/ram/security-credentials/) width600 height400/iframeJavaScript 动态读取 (更隐蔽)script var x new XMLHttpRequest(); x.onload function(){ document.write(this.responseText); }; x.open(GET, file:///etc/passwd); x.send(); /script3. 判定现象生成的 PDF 文件中直接嵌入了/etc/passwd的文本内容或 AK/SK 的 JSON 数据。6.2 绕过过滤 (Bypass 字典)当服务端存在黑名单禁止 127.0.0.1、10.x.x.x 等时需要利用协议解析和 IP 表达方式的差异进行绕过。1. IP 表达方式转换将127.0.0.1转换为不同格式规避正则匹配十进制整数2130706433(计算方法12724 | 016 | 08 | 1)十六进制0x7f000001或0x7f.0x0.0x0.0x1八进制0177.0.0.1省略写法127.1(Linux 系统会自动补全为 127.0.0.1)2. 特殊 IP 与域名解析替代地址0.0.0.0、localhost、[::1](IPv6 环回地址)。利用公共解析服务nip.io127.0.0.1.nip.io会直接解析为 127.0.0.1。sslip.io127.0.0.1.sslip.io同理。自建 A 记录购买域名在 DNS 管理后台将 A 记录指向127.0.0.1或内网 IP。3. DNS 重绑定 (DNS Rebinding) - 高级绕过原理利用目标服务器“检查 IP”与“发送请求”之间的时间差。流程第一次解析返回合法公网 IP通过后端校验。TTL 设为 0。第二次请求真正的业务操作时域名重新解析为内网 IP成功绕过校验并打入内网。4. URL 语法与跳转技巧利用 符号http://www.baidu.com127.0.0.1部分库会解析为访问 127.0.0.1。利用跳转 (Redirect)将恶意请求指向你的 VPS。你的 VPS 返回302 FoundLocation头指向http://127.0.0.1/admin。如果后端开启了FOLLOWLOCATION则会跟随跳转到内网。6.3 挖掘建议对症下药如果后端是PHP (cURL)重点尝试Gopher/Dict/Redirect。如果后端是Java重点尝试Bypass 十进制/IPv6/DNS RebindingJava 对协议限制较死但对 IP 解析有缺陷。如果是云环境首选100.100.100.200及其各类编码变形。模块七实战挖掘Tips (经验总结)在掌握了原理与协议后实战中的“细心程度”和“验证逻辑”决定了你能否从成百上千个数据包中精准锁定 SSRF 漏洞。以下是结合实战经验总结的挖掘技巧。7.1 Burp Suite 关键设置别让漏洞“隐身”1. 开启图片记录过滤操作路径Proxy-HTTP history-Filter- 找到“Hide images”并取消勾选即勾选 “Show images”。实战理由许多高危 SSRF 发生在加载头像、获取远程缩略图的功能中参数如image_urlxxx.jpg。Burp 默认会隐藏.jpg、.png、.gif等请求以节省空间。如果不开启你将彻底错过这些包含 URL 参数的关键数据包。7.2 文件上传中的“隐形”SSRF不要认为 SSRF 只存在于输入框或 URL 参数中文件上传功能也是重灾区SVG 文件上传原理SVG 本质是 XML 格式。通过在 SVG 中嵌入恶意代码可以让后端在解析或预览图片时触发请求。Payload:image hrefhttp://169.254.169.254/latest/meta-data/ /。HTML/XML 文件许多业务允许上传 HTML 片段或 XML 配置文件。利用iframe或外部实体注入XXE往往能转化为 SSRF。PDF/Word 预览如果上传文件后系统会自动生成缩略图或在线预览后端在渲染文档内容时可能发起 SSRF 请求。7.3 严谨的验证逻辑如何提交一份高质量报告在 SRC 提交漏洞时盲目打 Exp 往往会被审核判定为“行为异常”或“未证明危害”。请遵循以下验证阶梯第一步探测出网 (DNSLog)填入 DNSLog 域名。如果收到请求证明服务器能向外发包。第二步确认请求可控 (127.0.0.1)尝试请求http://127.0.0.1:80或http://localhost。如果响应极快或返回了本地 Web 页面内容证明请求目标完全受控。第三步证明内网渗透能力 (Bypass Metadata)尝试请求内网其他网段或云元数据地址100.100.100.200。禁忌不要在未授权的情况下直接尝试对内网 Redis 进行删除等破坏性操作。7.4 区分“业务功能”与“漏洞危害”远程翻译、网页预览、远程附件下载这些功能天生就是要向外发请求的。误区发现请求了你的 VPS 或 DNSLog 就觉得是漏洞。判定核心能否访问到“原本不该访问”的内容如果它能访问百度正常业务但不能访问127.0.0.1防御生效则不是漏洞。如果它能带回内网 Web 系统的敏感信息或通过时间差探测出内网存活主机则实锤 SSRF。7.5 专家经验实战避坑指南盲打参数不要只改值有时后端会校验协议。试着将http://改为https://或尝试//开头的协议绕过前端正则。关注大包/超长包有些特殊格式的请求如 PDF 导出因为数据包很大容易在历史记录中被漏掉要学会使用Sort功能关注Length异常的包。不要轻言“无法利用”即使是 Blind SSRF无回显只要能配合时间差扫描出内网拓扑在很多厂商那里也能评到“中危”。模块八防御修复建议网络层服务器开启出站限制白名单机制禁止访问内网IP段。代码层禁用高危协议仅允许http/https禁用file/gopher。统一错误信息防止通过时间/错误回显进行盲打。对URL进行解析严格校验IP地址防DNS重绑定校验解析后的IP。禁用302重定向跳转。宇宙级免责声明​​ 重要声明本文仅供合法授权下的安全研究与教育目的1.合法授权本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法可能导致法律后果包括但不限于刑事指控、民事诉讼及巨额赔偿。2.道德约束黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范仅用于提升系统安全性而非恶意入侵、数据窃取或服务干扰。3.风险自担使用本文所述工具和技术时你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。4.合规性确保你的测试符合当地及国际法律法规如《计算机欺诈与滥用法案》CFAA、《通用数据保护条例》GDPR等。必要时咨询法律顾问。5.最小影响原则测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。6.数据保护不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息应立即报告相关方并删除。7.免责范围作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。 安全研究的正确姿势✅ 先授权再测试✅ 只针对自己拥有或有权测试的系统✅ 发现漏洞后及时报告并协助修复✅ 尊重隐私不越界⚠️ 警告技术无善恶人心有黑白。请明智选择你的道路。希望这个教程对你有所帮助记得负责任地进行安全测试。