路由到端点。这意味着反向代理在一个路径()上接收扑克之星手机版官网,但将扑克之星手机版官网转发到后端的一个完全不同的扑克之星手机版官网()。或者,它根据主机标头值将扑克之星手机版官网转发到特定的后端。

最初,我想分析反向代理和Web服务器如何解析扑克之星手机版官网,找出它们之间的过程不一致,并将这些知识用于某种绕过。不幸的是,由于太多的变化,我被困在分析Web服务器和应用程序服务器上。例如,Apache Web服务器的行为会有所不同,具体取决于将其与PHP连接的方式。同样,Web应用程序,Web应用程序使用的框架或中间件的实现也可能影响扑克之星手机版官网解析过程。最后,我意识到有些攻击仍然鲜为人知或完全未知。

emt发行-技术发行商,端点安全,SIEM,WAF,防火墙,虚拟化,用于MSSP的SIEM,云解决方案,MSP,补丁管理,漏洞智能,Web漏洞扫描程序,BlackStratus,学院,卡巴斯基实验室,Avira,ESET,AlienVault,Secunia ,Flexera,Parallels,网络监控,Whtasup Gold,IPSWITCH 供应商软件漏洞管理 在准备这项研究时,我发现了其他几种类似的研究,包括–

杜塔

实际上,该研究不仅涉及反向代理,还涉及负载均衡器,缓存代理,WAF和用户与解析和转发扑克之星手机版官网的Web应用程序之间的其他中间服务器。但是,我找不到合适的术语来正确描述这样的服务器,并且在社区中广为人知,因此即使我谈论负载平衡器或缓存代理,也将使用“反向代理”。我将反向代理后面的Web应用程序称为后端服务器。请注意,后端服务器就是所谓的原始服务器(当我们开始谈论缓存时,这将很有意义)。

URL解码

绕过限制

2019年九月

让我们考虑一下缓存中毒攻击。攻击依赖于从扑克之星手机版官网中找到可以显着(从安全性角度来看)影响响应的非键值,但是与此同时,此响应必须由反向代理缓存,因此Cache-Control标头必须是允许的。如果我们将所有内容混合在一起,我们将能够找到更多利用缓存中毒攻击的方法。

当然,采用类似的方法,其他与安全性相关的标头(例如CORS,CSP等)也可能被滥用。

b)对扑克之星手机版官网应用规则并执行操作

  1. 伊卡鲁斯
    When a reverse proxy receives a request, it must parse it: to get a verb, a path, a HTTP version, host header and other headers and body.GET /path HTTP/1.1 Host: example.com Header: somethingEverything may look quite simple, but if you dive into details, you will see implementations are different.Some examples:
    – If a reverse supports Absolute-URI, how will it parse it? Does Absolute-URI have a higher priority than Host header?:GET http://other_host_header/path HTTP/1.1 Host: example.com– URL consists of `scheme:[//authority]path[?query][#fragment]可以通过API在网络应用中进行访问。 browsers don’t send #fragment一条规则 #fragment?
    在路径中),其他一些则将其作为常用符号来处理。–它如何处理必须经过URL编码的符号? # 作为攻击者,我们可以滥用此规则来执行Web缓存欺骗攻击。我们需要做的就是强迫受害用户打开下一个URL(例如,使用img):GET /index.php[0x01].jsp HTTP/1.1
  2. 取消回复
    Due to standards, symbols with a special meaning in the URL must be URL-encoded (%-encoding), like the double quote (") or “greater than” sign (>). But practically, any symbol can be URL-encoded and sent in a path part. Many web servers perform URL-decoding while processing a request, so next requests will be treated in the same way by them.GET /index.php HTTP/1.1GET %2f%69%6e%64%65%78%2e%70%68%70 HTTP/1.1
  3. 扑克之星手机版官网错误处理
    Many web servers support path normalization. Main cases are well-known:/long/../path/here -> /path/here /long/./path/here -> /long/path/hereBut what about /..?对于Apache,相当于   /../, but for Nginx it means nothing./long/path/here/.. -> /long/path/ - Apache /long/path/here/.. -> /long/path/here/.. - NginxThe same with // (“空”目录)。 Nginx将其转换为仅一个斜杠 /, but, if it’s not the first slash, Apache treats it as a directory.//long//path//here -> /long/path/here - Nginx //long/path/here -> /long/path/here - Apache /long//path/here -> /long//path/here - Apache和 are some additional (weird) features which are supported by some web servers. For example: support of path parameters – /..;/ is valid for Tomcat and Jetty or traversal with backslash (\..\).

MDM(移动设备管理)

,做一件事,如果 pathA–再做一次。 pathB – do another.

关于防止此类攻击的保护措施,我在这里看不到“银弹”(直到我们对如何处理扑克之星手机版官网/路径有了非常好的标准/规范),但我认为该项目也可以为防御者提供帮助。如果您知道代理及其限制,则可以相应地更改其配置。

/path1/ == /Path1/ == /p%61th1/ == /lala/../path1/

使用PAM保护备份

反向代理处理了一个扑克之星手机版官网,找到了相应的规则并执行了必要的操作。现在,它必须将其发送(转发)到后端。它会发送已处理的扑克之星手机版官网还是初始扑克之星手机版官网?显然,如果它已经修改了扑克之星手机版官网,那么它将发送修改后的版本,但是在这种情况下,它必须执行所有必要的步骤,例如,执行特殊符号的URL编码。但是,如果反向代理仅将所有扑克之星手机版官网转发到一个后端怎么办,也许转发初始扑克之星手机版官网是一个好主意?

假设有Nginx作为反向代理,而Weblogic作为后端服务器。 Nginx阻止访问Weblogic的管理界面(所有以

因此,下面描述的所有攻击的想法是,反向代理处理扑克之星手机版官网,找到并应用规则并将其转发到后端。如果我们发现反向代理处理扑克之星手机版官网的方式与后端服务器处理扑克之星手机版官网的方式不一致,那么我们就可以创建这样的扑克之星手机版官网(路径),该扑克之星手机版官网被反向代理解释为一条路径,而路径则完全不同在后端。因此,我们将能够绕过或强制应用反向代理的某些规则。

什么是反向代理?

阿维拉

转发所有扑克之星手机版官网到`backend_server`。它将处理后的扑克之星手机版官网发送到后端,这意味着Nginx必须对必要的符号进行URL编码。对于攻击者而言,有趣的事情是Nginx不会编码浏览器通常会编码的所有符号。例如,它没有URL编码

例如,Chrome和IE不会解码“%2f”,因此这样的路径

  • With trailing slashlocation / { proxy_pass http://backend_server/; }In this configuration, 阿维拉 当我从事这项研究时,分析了反向代理的各种配置,我得出的结论是,我们既可以绕过反向代理规则,也可以应用反向代理规则。因此,要了解反向代理相关攻击的真正潜力,我们必须了解它们的能力。  ' " < >.
    即使有一个Web应用程序(后端服务器)从路径获取参数并且容易受到XSS的攻击,攻击者也无法利用它,因为现代浏览器(带有IE的肮脏技巧除外)对这些符号进行URL编码。但是,如果有Nginx作为反向代理,则攻击者可以强迫用户在路径中发送URL编码的XSS有效负载。 Nginx对其进行解码,并将解码后的版本发送到后端服务器,该服务器利用 的RSS possible.Browser -> http://victim.com/path/%3C%22xss_here%22%3E/ -> Nginx -> http://backend_server/path/<"xss_here">/ -> WebApp
  • Without trailing slashlocation / { proxy_pass http://backend_server; }The only difference between this config and the previous one is the lack of the trailing slash. Although seemingly insignificant, it forces Nginx to forward an unprocessed request to the backend. So if you send /any_path/../to_%61pp#/path2, after processing of the request, Nginx will try to find a rule for `/to_app`, but it will send /any_path/../to_%61pp#/path2 假设我们有Nginx和Tomcat作为后端。 Tomcat默认情况下设置标头``,因此浏览器无法在iframe中打开它。由于某些原因,必须通过iframe可以访问Tomcat上的Web应用程序()的一部分,因此Nginx配置为删除该部分的标头``。但是,没有可能在

网站

标头修改。有时,反向代理会添加或修改响应头(甚至与安全相关),因为它不能在后端服务器上完成

如前所述,当反向代理根据扑克之星手机版官网中的Host标头将扑克之星手机版官网路由到不同的后端时,这是一种常见的情况。

Therefore, it takes everything (with few exceptions) between a verb and HTTP version (GET !i<@>?lala=#anything HTTP/1.1) and, after applying rules, forwards it to a backend server. However it supports path-based rules and allows it to modify requests and responses.

我们该怎样帮助你?

让我们想象一下情况。有Nuster(基于Haproxy的缓存代理)和网络应用程序。该网络应用程序存在一个自我XSS漏洞(仅在攻击者的帐户中起作用)

当反向代理接收到一个扑克之星手机版官网时,它必须解析它:获取一个动词,一个路径,一个HTTP版本,主机标头以及其他标头和主体。有所不同,例如:

反向代理的各种实现

  1. Routing to endpoint. It means that a reverse proxy receives a request on one path (/app1/), but forwards the request to a completely different one (/any/path/app2/) on a backend. Or it forwards the request to a specific backend depending on a Host header value.
  2. Rewriting path/query. This is similar to the previous one, but usually involves different internal mechanisms (regexp)
  3. 车身改装。反向代理有时也会改变身体。
  4. 第一个示例禁止使用反向代理进行缓存,第二个示例允许。缺少Cache-Control标头通常意味着允许反向代理存储响应。

漏洞评估

  1. MFT作为业务文件传输的Dropbox替代品
  2. 网站对扑克之星手机版官网的处理最少。因此,没有“真正的”解析,URL解码,规范化。它也不支持Absolute-URI。
  3. 从某种意义上讲,这只是变种网络缓存欺骗,但不仅如此。 获奖情况 加密|安全文件传输

如果反向代理具有允许主动缓存的基于路径的规则,则攻击者可以创建属于该规则的路径,但后端服务器会将其解释为完全不同的路径。

浏览器处理

解决方案

保护关键基础架构免受高级网络攻击
查看下一个配置。 Nginx在处理``之后将扑克之星手机版官网转发给

服务器端攻击
阿维拉抛出片段,Apache返回400错误(由于 /console/).

2017年9月

location /console/ {
deny all;
return 403;
}

location / {
proxy_pass http://weblogic;
}

As you can see, `proxy_pass` here is without trailing slash, which means that a request is forwarded unprocessed. Another important thing to bypass the restriction is that Weblogic treats `#` as a usual symbol. Therefore, an attacker can access the administrative interface of Weblogic by sending such a request:

GET /#/../console/ HTTP/1.1

,因此跳过 #规则。然后,它将相同的未处理路径()转发到Weblogic,Weblogic处理该路径,并且在路径归一化之后,我们就剩下了。 /console/ rule. It then forwards the same unprocessed path (/#/../console/) to the Weblogic, the Weblogic processes the path and after path normalization, we are left with/console/.

[电子邮件

当有人限制访问(3.拒绝访问)时,攻击者需要绕过它。
标头修改。在某些情况下,反向代理可能会添加或更改扑克之星手机版官网的标头。对于攻击者来说,这可能是一个很酷的功能,但是很难通过黑匣子方法加以利用。

媒体包
Let’s have a look at similar combinations: Nginx+Weblogic. In this case, Nginx proxies requests only to a certain endpoint of Weblogic (http://weblogic/to_app). So only requests, which come to a path /to_app on Nginx, are forwarded to the same path on Weblogic. In this situation, it may look like Weblogic’s administrative interface (console) or other paths are not accessible for an attacker.

location /to_app {
proxy_pass http://weblogic;
}

In order to misroute requests to other paths, we need to know two things again. Firstly, the same as in the example above – `proxy_pass` is without a trailing slash.
端点安全,电子邮件安全反恶意软件//tools.ietf.org/html/rfc3986#section-3.3, 和 /path/to/app/here;param1=val1可以通过API在网络应用中进行访问。 param1 我认为许多人都知道此功能(尤其是在

Web应用程序/站点漏洞评估和管理 Matrix42 –统一工作区管理 。但是Weblogic对路径参数的处理方式有所不同,因为在处理第一个参数之后,它会处理所有内容 /..;/..;/作为路径参数。这是否意味着此功能对攻击者无用? ; 处理扑克之星手机版官网后,由于其配置,反向代理可以对扑克之星手机版官网执行某些操作。重要的是要注意,在许多情况下,反向代理的规则是基于路径(位置)的。如果路径是
。通过将我们的项目组合在一起,几乎可以得到一个可能存在不一致之处的矩阵。

GET /any_path_on_weblogic;/../to_app HTTP/1.1

它得到 /any_path_on_weblogic;/../to_app it gets /to_app Weblogic在解析过程中会处理所有 /any_path_on_weblogic;/../to_app 作为路径参数,因此Weblogic认为 ; 。如有必要,攻击者可以通过增加攻击量来“更深入” /any_path_on_weblogic阿维拉是一个著名的Web服务器,但作为反向代理也非常流行。 Nginx支持带有任意方案的Absolute-URI,并且其优先级高于Host标头。 Nginx解析,URL解码和规范化扑克之星手机版官网路径。然后,它根据处理的路径应用基于位置的规则。 /../` after `;.

范例1。
重写路径/查询。这类似于上一个,但是通常涉及不同的内部机制()
表示所有以开头的路径 location /to_app (前缀)属于该规则。所以, /to_app (包括特殊符号)位于其下。另外,该prefix()之后的所有内容都将被获取,然后与 /to_app/to_app//to_app_anything (including special symbols) fall under it. Also, everything after this prefix(/to_app) will be taken and then concatenated with value in proxy_pass.
Look at the next config. Nginx, after processing `/to_app_anything`, will forward the request to http://server/any_path/_anything

location /to_app {
proxy_pass http://server/any_path/;
}

再次以Nginx + Tomcat为例。下一条规则旨在强制Nginx缓存来自

GET /to_app../other_path HTTP/1.1

规则,将所有内容()放在前缀之后,并将其与``中的值连接起来,以便转发  /to_app rule, gets everything(../other_path) after the prefix, concatenates it with a value from `proxy_pass`, so it forwards http://server/any_path/../other_path 当反向代理仅将扑克之星手机版官网转发到一个端点时,它可能会造成攻击者无法到达后端的其他端点或无法到达完全不同的后端的幻觉。
为了将扑克之星手机版官网错误地路由到其他路径,我们需要再次了解两件事。首先,与上面的示例相同-``不带斜杠。

2020年3月
如果将这两个功能放在一起,我们将看到我们可以在几乎所有后端上走上一层的任何路径。我们只需要发送:
Host标头中的“必须”代理到后端 example1.com 这是关于Nginx的“错误”。但是,此“错误”只是Nginx工作方式的结果(因此无法修复) example1_backend – 192.168.78.1:9999.

frontend http-in
acl host_example1 hdr(host) -i example1.com
use_backend example1_backend if host_example1
backend example1_backend
server server1 192.168.78.1:9999 maxconn 32

这样的配置是否意味着攻击者无法访问后端服务器的其他虚拟主机?看起来像这样,但是攻击者可以轻松地做到这一点。因为如上所述,Haproxy不支持绝对URI,但是大多数网络服务器都支持。当Haproxy收到绝对URI时,它将未处理的绝对URI转发到后端。因此,仅通过发送下一个扑克之星手机版官网,我们就可以轻松访问后端服务器的其他虚拟主机。

GET http://unsafe-value/path/ HTTP/1.1
Host: example1.com

,因此Apache会看到一个值`http:// GET @evil.com HTTP/1.1根据标准,URL中具有特殊含义的符号必须经过URL编码(),例如双引号()或“大于”符号()。但是实际上,任何符号都可以进行URL编码并在路径部分中发送。许多Web服务器在处理扑克之星手机版官网时执行URL解码,因此它们将以相同的方式处理下一个扑克之星手机版官网。受保护的] protected]反向代理相关攻击的全新外观  反向代理如何处理响应?

这是一个例子。

emt发行-技术发行商,端点安全,SIEM,WAF,防火墙,虚拟化,用于MSSP的SIEM,云解决方案,MSP,补丁管理,漏洞智能,Web漏洞扫描程序,BlackStratus,学院,卡巴斯基实验室,Avira,ESET,AlienVault,Secunia ,Flexera,Parallels,网络监控,Whtasup Gold,IPSWITCH

路径归一化

在客户端攻击中,攻击者需要强迫受害者的浏览器向服务器发送特殊扑克之星手机版官网,这会影响响应。但是浏览器会遵循规范并在发送之前处理路径:^浏览器解析URL(例如,删除片段部分),URL编码所有必要的符号(有一些例外)并对路径进行规范化。因此,要执行此类攻击,我们只能使用“有效”扑克之星手机版官网,该扑克之星手机版官网必须适合三个组件(浏览器,反向代理,后端服务器)之间的不一致。

较早版本的Firefox在规范化之前没有URL解码特殊符号,但现在它的行为与Chrome类似。

  • 不会将路径标准化。 /path/anything/..%2f../ 反向代理的缓存有几个因素可以帮助我们理解攻击。
  • 。研究尚未完成。我将与其他软件一起逐步实现它。推送扑克之星手机版官网非常感谢。
  • 但是看起来Nginx有两个主要行为,每个行为都有其自己有趣的功能: /path/%2e%2e/another_path/.
  • 有信息表明Safari不会对路径进行URL解码,因此我们可以强制其发送这样的路径

C)转发到后端

反向代理的常见任务是从后端的响应中添加,删除或修改标头。在某些情况下,这比修改后端本身要容易得多。有时,它涉及对安全性很重要的标头的修改。因此,作为攻击者,我们可能希望强制反向代理将此类规则应用于错误的响应(来自错误的后端位置),然后将其用于对其他用户的攻击。

Let’s imagine that we have Nginx and Tomcat as a backend. Tomcat, by default, sets header `X-Frame-Options: deny`, so a browser cannot open it in an iframe. For some reason, a part of the web application (/iframe_safe/) on the Tomcat must be accessible through iframe, so Nginx is configured to delete the header `X-Frame-Options` for this part. However, there is no potential for clickjacking attacks on iframe_safe

location /iframe_safe/ {
proxy_pass http://tomcat_server/iframe_safe/;
proxy_hide_header "X-Frame-Options";
}
location / {
proxy_pass http://tomcat_server/;
}

规则,但Tomcat会将其解释为完全不同的位置。这里是: iframe_safe 实际上,此技巧类似于众所周知的别名技巧。但是,这里的想法是显示一个可能滥用反向代理功能的示例。

<iframe src="//nginx_with_tomcat/iframe_safe/..;/any_other_path">

规则。由于Tomcat支持路径参数,因此在路径归一化后,它将得到``。因此,在这种配置下,可以对Tomcat的任何路径进行格式化,从而使攻击者可以对用户执行clickjacking攻击。 iframe_safe rule. Since Tomcat supports path parameters, after path normalization, it will get `/any_other_path`. Therefore, in such a configuration, any path of Tomcat can be iframed, so an attacker can perform clickjacking attacks on users.

没有。让我们看一下这种“魔术”,它可以在这种配置下访问Weblogic上的任何路径。

进攻

因此,它接受动词和HTTP版本()之间的所有内容(几乎没有例外),并在应用规则后将其转发到后端服务器。但是,它支持基于路径的规则,并允许其修改扑克之星手机版官网和响应。 客户端攻击 and 供应商软件AdminStudio –如果反向支持绝对URL,它将如何解析它?绝对URI的优先级是否高于主机标头?:– URL由“ scheme:”组成,浏览器不发送

2017年1月
因此您可以找到自己的方式/技巧(取决于每种特定情况下的后端服务器)。

缓存的想法很简单。在某些情况下,反向代理将来自后端的响应存储在缓存中,然后从缓存中返回相同的响应而无需访问后端。默认情况下,某些反向代理支持缓存,有些需要配置。通常,反向代理将主机标头值与来自扑克之星手机版官网的未处理路径/查询的串联用作缓存的键。

为了确定是否可以缓存响应,大多数反向代理都会从后端的响应中检查Cache-Control和Set-Cookie标头。反向代理根本不使用Set-Cookie存储响应,而是使用Cache-Control,因为它描述了缓存策略,并且需要其他解析。缓存控制标头的格式非常复杂,但是基本上,它具有几个允许缓存与否的标志,并设置了响应可以缓存多长时间。

BlackHat的Orange Tsai的演讲

Cache-Control: no-cache, no-store, must-revalidate
Cache-Control: public, max-age=31536000

如您所见,所有这些步骤都很明显,并且变化不多。尽管如此,实现方面还是存在差异,作为攻击者,我们可以将其用于实现我们的目标。

许多Web服务器,应用程序服务器和框架会自动正确地设置Cache-Control标头。在大多数情况下,如果网络应用在脚本中使用会话,则会设置Cache-Control标头来限制缓存,因此通常程序员无需考虑它。但是,在某些情况下,例如,如果Web应用程序使用其自己的会话机制,则可能会错误地设置Cache-Control标头。

接触
A commonly used feature of a reverse proxy cache is “aggressive caching” (it’s not really an official term, but describes the idea). In some cases (for example, a backend can be too strict about caching and doesn’t allow to cache anything) an administrator, instead of changing the backend, changes rules of a reverse proxy, so it starts caching responses even with Cache-Control header which restricts caching. Usually such rules have some limitations. For example, to cache only responses of certain extensions (.jpg, .css, .js), or from specific paths (/images/).

在研究中,我也一直专注于缓存:我想分析各种缓存实现。结果,我对如何同时改善缓存欺骗和缓存中毒攻击有了一些想法。

Tomcat目录。 /images directory of Tomcat.

location /images {
proxy_cache my_cache;
proxy_pass http://tomcat_server;
proxy_cache_valid 200 302 60m;
proxy_ignore_headers Cache-Control Expires;
}

由于我想分享自己的想法并解释一些东西,因此这篇文章变得非常重要。不过,我不得不跳过一些技巧,您可以在演示文稿中看到它们

<img src="//nginx_with_tomcat.com/images/..;/index.jsp">

然后,受害者的浏览器发送一个扑克之星手机版官网(带有身份验证Cookie)。 Nginx看到 /images,因此将扑克之星手机版官网转发到Tomcat,然后缓存响应(与Cache-Control标头无关)。同样,对于Tomcat,归一化后的路径完全不同– /index.jsp. In this way an attacker can force Nginx to cache any page of Tomcat. To read this cached response, the attacker just needs to access the same path (/images/..;/index.jsp) and Nginx returns the victim’s sensitive data (e.g. csrf token).

)。例如,

反向代理相关攻击的全新外观

。 Nuster配置为缓存来自 /account/attacker/Web应用程序上的目录: /img/ 浏览器无法规范这样的路径。对于Nginx,它属于

nuster cache on
nuster rule img ttl 1d if { path_beg /img/ }

The attacker just needs to create a special URL (/img/..%2faccount/attacker/), so Nuster applies an “aggressive caching” rule, still, the web app returns a response of self XSS (it sees ‘/account/attacker/`). The response with an XSS payload will be cached by Nuster (with the key: Host + /img/..%2faccount/attacker/),因此攻击者将能够滥用此缓存来XSS攻击Web应用程序的其他用户。从自我XSS,我们有了通常的XSS。

2017年四月

我已经展示了每种攻击类型的易受攻击配置的几个示例。但是确切的案例并不是那么重要。我想重新看一下与反向代理相关的攻击。如果我们知道反向代理如何工作,如何处理扑克之星手机版官网以及与后端服务器相比有什么区别,我们(作为攻击者)将能够到达更多的端点或对用户执行更复杂的攻击。

如您所见,``这里不带斜杠,这意味着扑克之星手机版官网未经处理就转发了。绕过此限制的另一重要事项是Weblogic将#视为常规符号。因此,攻击者可以通过发送以下扑克之星手机版官网来访问Weblogic的管理界面:

但是,作为攻击者,我们可以提出属于 这里DLP(防止数据泄漏) 2018年11月让我们看一下Haproxy配置,其中说所有扑克之星手机版官网

软件 //github.com/irsdl/httpninja另外,IE像往常一样具有一些魔力:使用Location标头重定向时,它不会处理路径。

Source://www.acunetix.com/blog/