当前位置: 首页 > news >正文

实战有效的Web时序攻击技术剖析

倾听低语:实际有效的Web时序攻击 | PortSwigger研究

James Kettle
研究总监
@albinowax

发布时间:2024年8月7日 18:10 UTC
更新时间:2024年11月18日 08:32 UTC

网站中充满了急于泄露其内部秘密的时序预言机。是时候开始倾听它们了。
在本文中,我将释放新颖的攻击概念,以诱出服务器秘密,包括掩蔽的错误配置、盲数据结构注入、通往禁止区域的隐藏路由以及大量不可见的攻击面。

这不是理论威胁;每种技术都将在不同目标上的多个真实案例研究中得到说明。前所未有的进步使这些攻击既准确又高效;在十秒内,您现在可以可靠地检测到亚毫秒级的差异,无需事先配置或“实验室条件”。换句话说,我将分享您可以实际使用的时序攻击。

为了帮助您,我将为您配备一套经过实战测试的开源工具,支持免提自动利用和自定义攻击脚本。我还将分享一个小型CTF,以帮助您磨练新技能。

想进一步深入?我将通过分享在数千个网站上测试无数概念而 refined 的方法论,帮助您将自己的攻击想法从理论转化为现实。我们忽视这种无处不在且极其强大的侧信道太久了。

本研究论文伴随Black Hat USA和DEF CON的演讲:

您还可以以打印友好的PDF格式阅读此白皮书。

大纲

  • 背景
  • 制作随处可用的时序攻击
  • 回答难题
  • 使时序攻击“本地化”
  • 使时序攻击可行
  • 隐藏的攻击面
  • 发现过载
  • 最难的问题
  • 证明概念
  • 服务器端注入
    • 盲SQL注入
    • 盲JSON注入
    • 盲服务器端参数污染
  • 反向代理错误配置
    • 范围SSRF
    • 防火墙绕过
    • 隐藏目的地
    • 前端规则绕过
    • 前端冒充
  • 研究路线图
  • 防御
  • 要点

背景

Web时序攻击因两件事而臭名昭著:做出大承诺和未能兑现。例子通常是理论性的,即使一种技术被称为“实用”,每个人都知道一旦您尝试在实验室环境之外应用它,它就会停止工作。

这种声誉可能是我们忽略了一个巨大机会的原因。

我首次研究时序攻击的结果坚定地属于“理论”桶。对于我的第二次尝试,我首先回顾了我在野外成功应用的攻击,以及我读到的其他攻击:

从上到下,这些是:

  • 跨站搜索
  • 用户名枚举
  • 潜在竞争条件的探测
  • 实验室验证的攻击
  • 理论攻击,如果它实际工作,那将绝对惊人...

在寻找野外有效的新技术时,我专注于两个类别之间的巨大鸿沟:

时序攻击研究通常专注于单个目标,但这限制了其真实世界价值。我想要可以应用于任意实时目标的技术。为确保我的新攻击概念符合此标准,我在30,000个实时网站的测试平台上验证了它们。基于bbscope和Rapid7的Project Sonar DNS数据库,测试平台是一个20 GB的Burp Suite项目文件,包含每个已知有漏洞赏金计划的网站。

在这项研究之前,我个人利用的最小时间间隙是30,000μs。现在,是200μs。这是通过时序攻击准确性的大幅进步实现的,并实现了多个强大的新技术。

三种关键攻击技术在对各种实时系统提供有价值发现方面脱颖而出:发现隐藏攻击面、服务器端注入漏洞和错误配置的反向代理。在本文中,我将深入探讨每一种。

制作随处可用的时序攻击

所有三种技术现在都在Param Miner中可用,所以,如果您愿意,您可以停止阅读并立即尝试它们。这项研究的真正价值在于理解它不止于此;这些只是可能性的样本。时序攻击几乎可以带您到任何地方,但要掌握这种潜力,我们需要从头开始。

让我们仔细看看现实世界时序攻击生死攸关的关键因素,以及如何克服它们。在本节中,我将展示如何使时序攻击“本地化”、可移植和可行。

回答难题

很容易假设所有Web时序攻击都是漏洞利用,但这是一个错误,因为它限制了您对潜在应用的思考。在其核心,Web时序攻击仅仅是关于回答难题——那些通过观察服务器响应无法回答的问题。

我通过尝试基于时序的密码重置漏洞利用开始了这项研究。它进行得很糟糕,但很好地说明了理论与现实之间的差距。许多网站通过在其数据库中存储秘密令牌并在链接中发送令牌到用户的注册电子邮件地址来实现密码重置。当用户点击链接时,网站将用户提供的令牌与数据库中的令牌进行比较。

在底层,字符串比较通常一次比较一个字符,直到它们完成字符串或遇到不匹配的字符对。这意味着匹配的字符越多,比较所需的时间越长:

在此插图中,我们使用两个HTTP请求来问“数据库是否包含以d7e开头的密码重置令牌?”服务器需要一秒钟来比较每个字符,因此通过比较响应时间,攻击者可以告诉令牌以“d7e”而不是“d7f”开头。

不幸的是,比较每个字符的实际时间大约在5纳秒或0.000000005秒的范围内。祝你好运利用那一点。

噪声与信号

每个时序攻击的成功归结为两个竞争的变量——信号和噪声。信号指的是您想要检测的时序差异的大小,噪声指的是影响响应时序的所有其他因素。如果信号相对于背景噪声太安静,您将听不到它:

对于实际有效的攻击,您需要最大化信号并最小化噪声。本节的其余部分专注于如何做到这一点。

请注意,此方程不包括“测量次数”。您可以尝试通过重复测量来抵消噪声,但这种方法扩展性差。一旦噪声严重超过信号,您将很快需要数十亿次测量,导致攻击耗时如此之长,目标可能在完成之前被停用。

您可以将噪声分为两部分——网络噪声(抖动)和服务器噪声(内部抖动):

网络抖动是延迟的变化——数据包到达目标系统并返回所需的时间。它是远程时序攻击的经典克星。当有人看到针对本地系统的时序攻击演示并说“那在远程系统上永远行不通”时,他们基本上是在说网络抖动将使攻击不可能。五年前,这可能是真的。

使时序攻击“本地化”

在2020年,Timeless Timing Attacks表明您可以使用HTTP/2完全从测量中消除网络抖动。您可以将两个HTTP/2请求放入单个TCP数据包中,确保它们同时到达服务器。然后您可以查看响应到达的顺序,推断哪个在服务器上处理时间更长:

这一单一发现消除了最大的噪声源,并改变了可检测内容的边界。只是有一个小问题。

粘性请求顺序问题

在HTTP/2层,两个请求完全并发,但底层的TLS数据是流,所以一个请求仍然是“第一个”,即一个将在另一个之前完全解密。如果您尝试此技术,您会注意到网站显示出显著偏向先回答第一个请求。这种偏向可能源于多个因素,包括解密第二个请求所需的时间和资源可用性。不幸的是,这可能掩盖您试图检测的延迟:

作者注意到这个问题,并通过添加虚拟参数来减慢第一个请求的解析来处理它,试图重新同步执行。

使时序攻击可移植

实验室环境以比真实目标噪声少而闻名,但还有第二个更微妙的问题。专注于单个目标通常会产生需要大量调整才能应用于其他任何地方的目标特定技术。这使得它们对于任何有截止日期的人来说价值显著降低。

不幸的是,虚拟参数填充是此问题的一个例子——其有效性取决于目标如何实现参数解析,以及系统在那一刻有多少处理容量可用。由于备用处理容量受其他系统影响,参数填充实际上可能最终增加噪声水平。我在一个实验室系统上观察到需要不同数量的参数,相隔十分钟。

我们真正需要的是解决粘性请求顺序问题的方法,不需要每目标配置。单数据包攻击,我去年为竞争条件发现开发,为此提供了一个良好的起点。单数据包攻击 fragmentation 请求以减少“关键数据包”的大小——完成请求并启动执行的数据包。

它通过在前几个数据包中发送大部分请求来工作,然后使用一个微小的最终数据包完成请求并触发执行。在此图中,最终关键数据包用黑色勾勒:

不幸的是,这引入了不同的陷阱——一些服务器一旦获得标头就开始处理HTTP请求,而不等待正文。要修复那一点,我们需要说服我们的OS网络堆栈将标头帧合并到单个数据包中,以便无论服务器开始处理哪个阶段,两个请求都同时处理:

您可能想知道为什么我选择将请求拆分为仅两个关键数据包,而不是每个HTTP标头一个数据包。那确实理想,但不幸的是HTTP/2 RFC禁止交错来自单独请求的标头帧,所以它不太可能工作。

实现这种双数据包同步结果非常容易——只需添加一个额外的ping帧!这种无害的牺牲数据包确保操作系统合并后续的标头帧。

  • 禁用 TCP_NODELAY
  • 发送一个ping帧
  • 对于每个无正文的请求:
    • 发送标头
    • 保留一个空数据帧
  • 对于每个有正文的请求:
    • 发送标头和除最终字节外的正文
    • 保留一个包含最终字节的数据帧
  • 等待100ms
  • 发送一个ping帧
  • 发送最终帧

我们一发现这种改进的技术,就将其集成到Burp Suite的内置单数据包攻击中,所以您可能已经从中受益!我目前正在与开源实现h2spacex的开发人员合作,以将其也纳入其中。

使时序攻击可行

随着网络噪声的出局,我们的下一个目标是服务器噪声。不要低估服务器噪声。它源于众多来源,包括目标服务器上的负载、与之交互的其他系统、在同一物理硬件上运行的其他虚拟系统,以及可能数据中心附近的天气。服务器噪声是我没有对增强单数据包攻击可以检测到什么时间延迟做出任何声称的原因——任何这样的声称都是如此目标特定,以至于实际上毫无意义。

要最小化服务器噪声,采取最短的代码路径 possible,并充分利用性能特性,如缓存、对象重用和连接重用。坚定的攻击者还可能使用DoS技术(如CPDoS和资源消耗)减少来自其他用户的噪声。

要最大化信号,专注于慢代码路径,并通过使用随机输入避免服务器端缓存、尽可能访问慢资源以及乘以工作负载来使其更慢。例如,此请求使用多个具有固定前缀的标头来尝试扩大由服务器寻找以“X-U”开头的标头引起的延迟:

GET / HTTP/1.1  
X-Uaa: a  
X-Ubb: a  
X-Ucc: a  
{256}  

现代Web技术,如ORM和GraphQL,也特别适合延迟扩展技术。记住DoS攻击只是一个非常容易的时序攻击,并适应经典技术,如ReDoS、批处理和递归XML实体。

隐藏的攻击面

漏洞经常潜伏在废弃和被遗忘的功能中,被开发人员和安全测试人员 alike 忽视。因此,漏洞发现旅程通常从检测隐藏参数、cookie或HTTP标头开始。

在其核心,发现这些隐藏输入涉及猜测潜在参数名称并观察它们是否改变响应。不改变响应的参数可能保持未被检测,以及任何相关的漏洞。对于我的第一次批量时序攻击,我决定修复这一点。

方便的是,我是Param Miner的核心开发人员——可能是第一个用于批量参数发现的工具。Param Miner使用“字数”、“状态”和“行数”等属性比较响应。对于这项研究,我简单地将“响应时间”添加为额外属性,增加了重复计数,并开始扫描。

我可以让Param Miner使用单数据包攻击进行这些测量,但这将涉及 significant 重构,并且在研究未经验证的概念时,我采取 every possible 捷径以避免浪费时间,所以我没有麻烦。

相反,我只是测量从请求的最后一个字节到响应的第一个字节的时间,并比较两组30次时序测量的下四分位数,看它们是否 distinct(指示有效参数)或重叠。下四分位数是这种比较的理想选择,因为它反映了噪声最少的测量。

发现过载

在30,000个实时站点的测试平台上运行时间增强的Param Miner产生了大量隐藏参数,包括一些非常奇怪的参数。

一个亮点是一个Web服务器,对包含神秘HTTP标头“commonconfig”的请求响应时间延长5ms,除非标头值是有效的JSON:

标头 响应时间
foo: x HTTP/1.1 200 OK 50ms
commonconfig: x HTTP/1.1 200 OK 55ms
commonconfig: {} HTTP/1.1 200 OK 50ms

另一个发现是在一个拒绝响应任何请求的Web服务器上——它总是重置连接。这种极其防御的行为不足以阻止我的扫描发现它支持某个HTTP标头,因为该标头使其花费 significantly 更长的时间来重置连接!有趣,但不是非常有用。

标头 响应时间
foo: x --连接重置-- 30ms
authorization: x --连接重置-- 50ms

一个频繁的发现 much more 实用:

请求 响应时间
GET /?id=random HTTP/1.1 200 OK 310ms
GET /?foo=random HTTP/1.1 200 OK 22ms

这对响应告诉我们两件有价值的事情。首先,该站点仅将特定参数如“id”包含在缓存键中,因此它高度暴露于基于参数的缓存中毒攻击。第二,我们知道“id”参数被键控,并且这种配置通常是站点范围的。这意味着使用时间分析,Param Miner检测到了一个适用于不同页面的参数!

最难的问题

当我尝试这个概念时,我 anticipated 两个问题。首先,我预计许多技术会完全失败。第二,我怀疑我遇到的任何有效结果都会隐藏在大量误报中。

最大的挑战来自 neither。是时序攻击太强大。它们可以检测到如此之多,以至于 incredibly 容易误解您检测到的内容。它们 incredibly 擅长检测“某物”,但那个某物不一定是您试图检测的。完美地说明了这一点。这种参数检测乍一看像RCE,然后结果是完全不同的东西(但仍然有用)。

此视频显示最初看起来像潜在的远程代码执行漏洞,因为“exec”参数导致可见的响应延迟。这种延迟结果是一个WAF对更可疑请求进行额外处理的指标。然后我们看到当参数重复时延迟叠加,除非请求正文超过某个大小阈值。最终这导致发现完整的WAF绕过。这种绕过发现对我来说 completely 意外,但此后已被其他人发现,并现在在nowafpls工具中实现。它仍然是时间分析如何揭示目标控制流洞察的一个美丽演示。

那是简单的情况之一——有时您可能永远无法完全理解您检测到的内容。轻装携带您的假设,并尽可能从不同角度测试它们。

证明概念

为避免被错误假设误导,我决定专注于提供明确安全影响的特定参数,无需任何耗时的手动调查,并有直接的方式收集额外的确证证据。

通过HTTP标头的IP地址欺骗完美满足了这些要求。这是一个相对常见的错误配置,并直接启用各种漏洞利用,包括速率限制绕过、伪造日志,甚至在某些情况下的访问控制绕过。通过将IP地址放在欺骗的前端标头中,您有效地冒充前端。我们将在后面更深入地探讨前端冒充攻击。

方便的是,如果您将域放在欺骗标头中,易受攻击的服务器通常会执行带内DNS查找来解析它,导致 easily 可检测的延迟。这是一个典型的检测:

标头 时间
Random-header: xyz.example.com 65ms
True-Client-IP: xyz.example.com 70ms
True-Client-IP: xyz.example.com 65ms

第一个响应快速返回,因为它不触发DNS查找。第二个响应触发对xyz.example.com的DNS查找,所以它更慢,第三个响应更快到达,因为DNS响应已被缓存:

我们将在后面重新讨论DNS缓存。总共,扫描IP地址欺骗揭示了:

  • 375个易受攻击的域
  • 其中206个还导致DNS回显
  • 217个 visibly 缓存了结果

这可能让您想知道大约170个没有导致DNS回显的易受攻击域——它们是误报吗?这是一个例子:

标头 时间
Random-header: x.psres.net 170ms
True-Client-IP: x.psres.net 90ms
True-Client-IP: 1.1.1.1 170ms

您认为这里发生了什么?

这是一个线索——在您的登录历史中,网站指定了登录IP地址和位置:

时间 浏览器 IP 位置
5分钟前 Chrome in Windows 1.1.1.1 Cloudflare

我认为这个系统正在将欺骗的IP地址传递到库中,该库在将其传递给第三方地理查找服务之前验证格式。提供无效IP地址如“x.psres.net”导致异常,并阻止慢速IP查找发生:

所以,我们获得了一种新的参数发现技术,证明了时序攻击可以在野外大规模工作,并且还发现了重要的东西:触发错误的输入可以 shortcut 大代码路径,并导致 significantly 更快的响应。换句话说,时序攻击 exceptionally 擅长检测异常。

服务器端注入

触发和发现异常是从SQLi到OS命令注入的服务器端注入漏洞测试的基础部分。这使得时序分析成为服务器端注入检测的完美匹配。

我试图通过将“时间”添加为响应属性到Backslash Powered Scanner来复制我在Param Miner中的成功,但这失败了。没有单数据包攻击,我只能检测主要的时间差异,而这些主要来自WAF而不是真实漏洞。此外,工具的复杂性使其难以适应以克服挑战。

对于我的第二次尝试,我重用了Param Miner的一些代码来构建一个更简单的测试,使用单数据包攻击。我每个探测发出最多50个请求对,并记录每对的响应顺序。如果响应顺序至少80%偏向一个有效负载,我将其报告为有效发现。

完全盲SQLi

第一个发现是一个完全盲SQL注入,用经典的有效负载对检测到:

请求 响应时间
GET /api/alert?mic=' {} 162ms
GET /api/alert?mic='' {} 170ms

不幸的是,当我报告时,结果是一个重复。回想起来,我应该看到这一点——您可以使用众所周知的“||sleep(5)||”有效负载 easily 检测相同的漏洞。高级时序分析根本不需要检测您可以注入sleep语句的漏洞。同样,时序对于查找代码注入并不 great,因为您通常可以通过使用OAST技术更好地找到那些。

对于强大的漏洞,如命令注入、SQLi和代码注入,基于时序的检测只有在您有WAF或过滤阻止经典检测技术时才真正有用。让我们看其他地方。

盲JSON注入

时序在寻找注入底层时发挥作用;允许操作数据结构和格式但停止 short 完全代码执行的漏洞。这包括注入到格式如JSON、XML、CSV以及服务器端查询参数和HTTP标头中。许多这些错误很少被谈论,因为它们很难检测。

它们也很难利用,但有时您可以将时序信息与可见特征结合,以获得对幕后发生的事情的额外洞察。例如,我发现一个目标,其中无效的JSON转义序列使响应返回快200us(0.2ms):

参数 响应时间
key=a"bb "error": { "message": "Invalid Key: a"bb"} 24.3ms
key=a"\bb "error": { "message": "Invalid Key: a"\bb"} 24.1ms

您认为服务器端发生了什么?

响应格式中有一个线索——我们注入的无效语法没有改变响应中的格式。我期望JSON格式化程序在运行无效语法时失败,或至少返回 visibly 不同的输出。

此外,冗长的输入在响应中被编辑:

参数 响应时间
key=aaa…a"bbb "error": { "message": "Invalid Key: ****bbb"} 24.3ms

此特性提供了第二个线索:当我们的无效JSON序列被编辑时,时序差异消失了! together,这强烈表明延迟是由于解析发送给我们的响应的组件发生的。我的最佳猜测是它是某种错误记录系统。我从0.2ms的时间差中弄清楚这一点相当高兴,但没有明确的利用路径,我决定继续前进。

盲服务器端参数污染

我最多产的探测是针对盲服务器端参数污染。这通过比较保留URI字符如?和#与非保留字符如!的响应时间来工作。

在某些情况下,发送编码的#使响应返回更快:

请求 响应时间
/path?objectId=57%23 Can't parse parameter 180ms
/path?objectId=57%21 Can't parse parameter 430ms

这可能是由于片段破坏了服务器端路径并从后端获得快速的静态响应,或应用程序的HTTP客户端 simply 拒绝发送包含原始#的HTTP请求。当然,关键不是假设延迟将如何落地——在其他目标上,编码的#使响应到达更慢。

服务器端参数污染是注入发现中最常见的类型, by a huge margin,所以我认为这是一个有前途的进一步研究领域。有关此攻击类的更多信息,请查看服务器端参数污染和Attacking Secondary Contexts in Web Applications。

错误替身

如我们所见,高精度时序 great 用于检测盲注入错误,但它们并不总是容易利用。在分析这些发现时,我经常获得对服务器端发生的事情的一些理解,但停滞 short 实际利用。此外,时序往往浮现我们不太熟悉利用的较不知名攻击类。

仅基于时序证据收集足够信息进行利用通常棘手且耗时。在常规非盲漏洞上测试每个想法通常涉及单个中继器请求,而对于许多这些,您可能面临30秒的Turbo Intruder攻击。

这里可以帮助的一件事是“错误替身”——目标错误类的非盲变体。Param Miner将报告这些,并且它们 great 用于在 less 挑战性的环境中学习如何解释和利用这些错误。

错误替身形成了这项研究中更广泛、 recurrent 主题的一部分。如果您忽略时序,您将错过,但如果您过于专注于时序,您也将错过。为了成功,使用 every available 信息通道。

反向代理错误配置

这项研究中最大的突破是当我意识到我可以使用时序来检测一种被广泛忽视的SSRF类型。

早在2017年,我研究了利用错误配置的反向代理进行SSRF并 gain 访问内部系统的技术。最常见的漏洞是服务器将请求路由到HTTP Host标头中指定的域。为了检测这些,我会向它们发送一个Host指向我控制的域的请求:

GET / HTTP/1.1  
Host: uniq-token.burpcollaborator.net  

如果目标易受攻击,我会看到我的请求到达我在burpcollaborator.net的站点,由易受攻击的反向代理转发。之后,我会发送内部IP和主机名以掠夺其内部网络。这产生了一些 spectacular 发现,包括意外黑客攻击我的ISP放置以MITM其客户的系统。

范围SSRF

尽管成功,但这种检测技术有一个主要盲点——范围SSRF。

在我发布研究后,Google的某人问我是否在他们的系统中发现了任何漏洞,强烈暗示他们曾经易受攻击。不久之后,Ezequiel Pereira发布了$10k host header,其中他利用了一个属于Google的开放代理,我未能检测到。我的扫描方法失败,因为Google的代理配置为仅将请求路由到他们自己的系统,所以我的服务器从未收到DNS查找。

这是一个非常常见场景的提示,公司允许请求转发到任意子域:

Host标头 完全SSRF 范围SSRF
random.example.com 404 Not Found 404 Not Found
random.notexample.com 404 Not Found 403 Forbidden

我不认为这种类型的SSRF有 established 名称,所以我将称其为范围SSRF。这种限制可以通过内部DNS服务器、简单的主机名验证、阻止出站DNS的防火墙或紧密的侦听器配置来实现。结果总是相同的——您有一个影响接近完全SSRF的错误,但不能使用回显/OAST技术检测。

检测范围SSRF

要检测范围SSRF,我们需要回答“服务器是否尝试连接到指定的主机名?”时序完美适合此。考虑一个在www.example.com的服务器发出以下响应:

Host标头 响应时间
foo.example.com 404 Not Found 25ms
foo.bar.com 403 Forbidden 20ms

这两个响应显示它正在对Host标头进行某种验证,但没有足够的信息来告诉它是否是一个开放代理。如果您依赖响应内容,您将最终得到误报和漏报。

以下请求对是证明问题的原因——更快的第二个响应是DNS缓存的证据:

Host标头 响应时间
abc.example.com 404 Not Found 25ms
abc.example.com 404 Not Found 20ms

一些DNS系统不缓存失败的DNS查找,但我为此找到了一个替代解决方案——发送过长的64八位字节DNS标签,导致DNS客户端拒绝发出查找和更快的响应:

Host标头 响应时间
aaa{62}.example.com 404 Not Found 25ms
aaa{63}.example.com 404 Not Found 20ms

筛选秘密路由

用这些技术扫描揭示了数百个易受攻击的反向代理,暴露了通往数万个域的替代路由——我 desperately 需要自动化。

当您找到一个开放反向代理时,第一步是尝试使用它访问 every possible 目的地。我编写代码自动编译目标子域列表,使用三个主要来源:

  • 硬编码的通用子域单词列表
  • 来自Rapid7的Project Sonar 'fdns'文件的已知子域列表。为了快速解析此58 GB文件以获取特定目标的子域,我使用'rev'反转每一行,然后按字母顺序排序,以便兄弟域彼此相邻。然后我运行老式unix 'look'实用程序进行二进制搜索。这比grep减少了99.999%的搜索时间。
  • 在线子域服务columbus.elmasy.com, mostly 从证书透明度日志编译

我让Param Miner尝试访问每个主机两次——一次直接,一次通过代理——并报告任何两次访问尝试触发 significantly 不同响应的主机。在比较响应时,我专注于响应状态代码、标头名称和Location标头,因为这些是最高信号区域。这产生了许多发现, fall into 四个 broad 类别。

在Host标头中直接猜测主机名通常被称为“vhost暴力破解”,但反向代理利用 often 看起来 completely 不同,所以理解区别很重要。虚拟主机暴力破解仅提供对同一服务器上其他网站的访问。同时,反向代理将路由请求到不同系统,启用独特攻击,如前端规则绕过、前端冒充和漏洞利用链接机会。让我们深入探讨。

防火墙绕过

最简单的漏洞利用是您可以从外部看到目标但无法直接访问它。

在一个公司,sonarqube.redacted.com解析到一个公共IP地址,但尝试访问它触发来自防火墙的连接重置。我的探测已识别app.redacted.com作为反向代理,并使用它,我能够绕过防火墙并访问内部SonarQube实例。

入口点 Host标头 结果
sonarqube.redacted.com sonarqube.redacted.com --重置--
app.redacted.com sonarqube.redacted.com 200 OK

防火墙绕过 - 不可见路由变体

有一个常见的变体,内部系统没有方便的公共DNS记录让您知道它存在:

有大量预生产、暂存和开发服务器暴露给任何应用此技术的人。如果您幸运,它们将启用调试或配置测试凭据,使它们成为软目标。这些系统甚至可能有真实目标数据,或从生产重用的密钥。

我发现的最有趣的目标是仍在积极开发的预启动系统。特别是,我发现了一个管理控制台, apparently-公共访问在一个非常酷的美国政府系统上,我很沮丧不能提供任何细节。我报告了问题,系统几个月后“上线”,但管理控制台无处可见。

前端规则绕过

一些目标 publicly 可访问,但位于前端服务器后面,强制执行 inconvenient 安全规则,阻止攻击或限制对有价值端点的访问。处理这些的经典方法是通过直接与后端交谈,但这通常由于防火墙而 impossible。

反向代理提供了一个引人注目的替代方案——绕过障碍:

在一个目标上,使用通过反向代理的替代路由将此:
变成此:

前端冒充攻击

最 spectacular 和 surprising 漏洞利用发生在前端和后端之间存在信任关系时。 common knowledge 您可以使用X-Forwarded-For等标头欺骗您的IP地址。 less appreciated 的是这是更广泛和更强大错误类的一部分。这种攻击类型没有 established 名称,所以我将称其为前端冒充攻击。

前端系统通常
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

相关文章:

实战有效的Web时序攻击技术剖析

本文深入探讨了Web时序攻击的实际应用,包括参数发现、服务器端注入和反向代理配置错误检测,通过真实案例展示了高精度时序分析技术在安全测试中的突破性进展。倾听低语:实际有效的Web时序攻击 | PortSwigger研究 James Kettle 研究总监 @albinowax 发布时间:2024年8月7日 1…...

22222222 - idle

//为什么要攀登?因为山就在那里。 #include<bits/stdc++.h> #define mrx 0x7f7f7f7f7f7f7f7f //#define int long long using namespace std; inline int read(){int num=0,flag=1;char ch=getchar();while(ch<0||ch>9){if(ch==-) flag=-1;ch=getchar();}while(ch…...

表格如何设置多人在线编辑?坚果云实时编辑,告别版本冲突!

还在为Excel表格多人协作的版本混乱、数据冲突而烦恼吗?本文深入对比坚果云、在线Office等三大解决方案,并提供坚果云实战教程。教你如何利用其强大的实时同步、版本管理和权限控制功能,彻底告别协作难题,实现高效、安全的团队文件管理。告别表格协作难题:三大高效解决方案…...

白嫖党狂喜!爆肝一下午搞定 URL 转 HTML 幻灯片神器,ISlide 9900 资源点从此是路人

原文:白嫖党狂喜!爆肝一下午搞定 URL 转 HTML 幻灯片神器,ISlide 9900 资源点从此是路人家人们谁懂啊!之前分享的 ISlide 插件做 PPT 一次要耗 9900 个资源点【从 url 到 PPT 一键生成:Coze 工作流,颠覆你的内容创作方式!】,作为资深白嫖党看着资源点的大量消耗实在心疼…...

继承

1.概述 子类和父类的区分需要根据实际情况,不能随便使用 2.子类只能继承一个父类,(单继承),但是可以多级继承 所有类都简介或直接继承Object类(java虚拟机自动生成) 3继承的内容 成员变量 继承的private内容可以被继承但是不能直接使用,需要用get()方法 继承中成员变量的访问特…...

我们究竟在用钱交换什么?

钱,藏着哪些我们没说透的用途?"穷人用健康换钱,富人用钱买健康",而最残忍的是,后者永远买不完 这个世界上,钱不是万能的,但有钱的确能解决99%的问题,包括给我们带来自尊和底气!中国有句老话:和气生财,我认为,和气不一定生财,但有钱确实能为家庭带来一…...

jupyterLab如何使用

好的,JupyterLab 是一个非常强大的交互式开发环境(IDE)。下面我将从安装、启动、核心功能到高级技巧,为你提供一个完整的入门指南。一、安装 JupyterLab 首先,你需要安装 JupyterLab。强烈建议在虚拟环境中安装,以避免包冲突。 1. 使用 pip 安装(最常用) # 1. 创建并激…...

HyperWorks许可监控

在当今竞争激烈的工程设计和仿真领域,资源的高效利用至关重要。HyperWorks作为一款业界领先的工程仿真软件,其许可监控功能为用户提供了强大的资源管理和优化工具。本文将向您介绍HyperWorks许可监控的重要性以及如何利用它确保您的资源得到充分利用。 什么是HyperWorks许可监…...

C++拷贝构造函数详解:从浅拷贝到深拷贝

什么是拷贝构造函数? 拷贝构造函数是C++中的一种特殊构造函数,用于创建一个新对象作为现有对象的副本。当我们使用一个对象来初始化同类型的另一个对象时,拷贝构造函数就会被调用。 基本语法 class MyClass { public:// 拷贝构造函数MyClass(const MyClass& other) {// …...

K8S探针

https://blog.csdn.net/weixin_28820113/article/details/148380309 HTTP探测实战(最常用) 向容器发送 HTTP 请求,若返回状态码为 200-399,则表示检查成功[root@master ~/probe]# cat readiness.yaml kind: Pod apiVersion: v1 metadata:name: nginxlabels:app: nginx spec…...

模拟赛

波波牛的惩罚 我们先处理出每个数可能影响的数,可以用链式前向星或 vector 我们维护一个队列,在最开始的时候放入最小值。 每次取出一个数,然后遍历所有可以影响的数,并把影响成功的数放进队列。 在最后判一下是否相同即可。 复杂度 \(O(n)\)。点击展开代码 #include<bi…...

bug1

9.16 修复报错字体大小bug 补充日志 TeXmacs/progs/debug/debug-widgets.scm 修改build-message 为以下 (define (build-message m)(let* ((k (tm->stree (tm-ref m 0)))(s (utf8->cork (tm->stree (tm-ref m 1))))(t (tm->stree (tm-ref m 2))))(cond ((string-e…...

C#第十二天 025

父类如果只有有参构造器,子类会默认去调用父类的无参构造器,如果子类要有无参构造器需要这样 子类构造器():base(参数)你的理解​​完全正确​​!当父类​​只有有参构造器​​时,子类必须​​显式调用父类的有参构造器​​,否则会编译错误。 类成员的访问级别不能超…...

选择语句的机器级表示

无条件转移指令--jmp 格式: jmp <地址> #pc无条件跳转到<地址> <地址>可以由常数直接给出:jmp 5 <地址>可以来自于寄存器:jmp eax <地址>可以来自于主存 :jmp [999] <地址>可以用“标号”锚定:jmp NEXT 100 mov eax,7 104 mov ebx,6 …...

pip常用命令

好的,这是 Python 包管理工具 pip 的常用命令大全,涵盖了从安装、升级、查询到问题排查的所有核心操作。一、核心命令:安装与卸载命令 描述 示例pip install <package_name> 安装最新版本的包 pip install requestspip install <package_name>==<version>…...

Nginx auth_request 模块使用

Nginx auth_request 模块使用笔记 📌 模块概述 nginx-auth-request-module(官方名:http_auth_request_module)用于在请求处理前向外部服务进行认证验证。 🔧 安装与启用 # 编译时添加模块 ./configure --add-module=/path/to/nginx-auth-request-module# 检查是否已安装…...

用nssm将minio和srs注册成服务

首先,要注意一个关键问题,不要在nssm中直接调用batNSSM 与 Bat 文件的问题:当NSSM启动一个批处理文件(.bat)时,它实际启动的是cmd.exe进程,而批处理中的命令(如minio.exe)则是其子进程。NSSM会监视cmd.exe的状态。一旦批处理中的命令执行完毕,cmd.exe进程就会退出,N…...

Mac上的Markdown学习

Markdown学习 标题 一个#+空格表示一级标题 两个#+空格表示二级标题 ……同理,几个#+空格表示几级标题 字体 粗体 Hello World 前后两个*表示粗体 斜体 Hello World 前后一个*表示斜体 斜体加粗 Hello World 前后三个*表示斜体加粗 删除线 Hello world 前后两个英文字符~表示删…...

ubuntu 18.04安装mysql8.4.5

环境Os:ubuntu 18.04 desktop桌面版mysql:8.4.5 glibc2.17 查看操作系统信息root@db:/# ldd --version ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is…...

Radxa E20C 安装 OpenWrt

背景 今天浏览 Radxa E20C 官方文档中无意中发现设备可以安装 OpenWrt,如下图:Radxa E20C 官方文档安装 OpenWrt参考链接: E20C->上手指南->安装系统->安装系统到EMMC->Windows主机创建目录 01-DriverAssistant v5.0, 下载 DriverAssistant v5.0 ,并解压和安装…...

第三篇:配置浏览器

111111车到山前必有路,学到苦海甘甜来。只有知识和阅历对的起自己的年龄,美好的生活才不会欺骗自己!...

第二篇:playwright初步解析

以下是一个完整的测试用例,模拟用户登录功能: 脚本示例:from playwright.sync_api import sync_playwrightdef test_login(): with sync_playwright() as p: # 启动浏览器 browser = p.chromium.launch(headless=True) page = browser.new_page()# 打开…...

高性能计算-TensorCore-hgemm

1. TensorCore 简介:硬件层面支持半精度浮点矩阵乘法,与昇腾NPU的 cube 核类似,最小只能计算规定尺寸的矩阵乘法。 wmma API 封装在 nvcuda 命名空间2. naive :一个block 1 个warp,wmmaTile 16*16点击查看代码 //naive 一个block 一个warp,一个线程处理一个数据 template …...

《ESP32-S3使用指南—IDF版 V1.6》第三十八章 SPIFFS实验

第三十八章 SPIFFS实验 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/…...

技术交流社区基础防诈指南

技术交流社区基础防诈指南技术交流社区基础防诈指南 若已确认被骗或发现违法内容,请立即通过以下渠道举报:公安部网络违法犯罪举报网站:12321.cn (网络不良信息) 国家反诈中心:拨打 110 或通过官方APP举报 (注意:报警时务必索要《受案回执》) 中央网信办违法和不良信息举报…...

神秘题

Trick排列置换题,考虑转化乘环上移动问题。题目 精灵之环 假设知道排列 \(p\)。 那么把这个排列 \(p\) 的环连出来,环上点的编号是排列的下标,点的值是编号对应的值。 就比如排列 4 1 2 3 的环为: val: 4 1 2 3 4 id : 1->2->3->4->1...可以发现把这些环上…...

技术群高级防骗指南

技术群高级防骗指南技术群高级防骗指南 怎么骗的 怎么防 被骗会怎么样 怎么骗的 1.资源储备与身份伪装: 1.盗盗取大量高等级账号并使用,给人友好可信的虚假印象2.养 ​ 骗子可能会花时间养这些盗来的号, 参与正常讨论,发一些专业的言论, 或者爆出自己是某某名牌大学来的 / 某…...

集训游记

前言 关于我 2025-9-16 开始写游击这件事情,其实已经考了 10 多次了,感觉前几次还好,后面被削弱了/kk,肯定是感冒debuff的问题,目前是能碾压ysh和lh的部分时候可以干掉xch,别的没咋关注.exe 2025-9-16 上午考试,比赛题目居然叫做 fish、oblivious、array、digit...

SQL Server 中的 STUFF 函数与FOR XML PATH详解 - 实践

SQL Server 中的 STUFF 函数与FOR XML PATH详解 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mono…...

2025/9/16 总结

A 用时:2h 预期:0pts 实际:0pts 考试是没有想到可以考虑 \(p_k\) 的置换环,思考许久没有思路。 然后打表找构造方法没有找出来心态就炸了,导致后面基本没有写暴力,直接垫底了。 总结:对于这种排列问题,可以考虑置换处理。考试心态不要炸,即使不会做也要打暴力。B 用时…...

Linux备份数据

linux备份常用技术一、备份数据库 1、准备一份备份命令sh文件,比如将其存放在/opt/db_bak中,命名为bak_mysql.sh#!/bin/bash # MySQL备份配置 MYSQL_USER="root" MYSQL_PASSWORD="root" MYSQL_HOST="10.10.10.10" MYSQL_PORT="3306"…...

np.argmax

argmax 是 NumPy 和许多其他科学计算库(如 PyTorch、TensorFlow)中的一个非常常用的函数,它的作用是返回数组中最大值的索引。 简单来说,argmax 告诉你最大值在哪里,而不是最大值是多少。 argmax 的基本用法 np.argmax(a, axis=None, out=None)a: 你要查找最大值索引的数组…...

TQ322数字PIR使用笔记

TQ322 数字PIR特性: 双元单通数字输出热释电红外传感器我使用中断读取的方式即时获取数字PIR传感器内最新的数据具体时序如下: 单片机IO 模拟时序程序如下: (代码中NOP数量根据单片机主频和型号自行调整)/*-------------------------------------------------* 函数名:D…...

使用Apache做web服务器时无法断点续传的怎么办?

Apache 作为 Web 服务器时,如果无法实现 断点续传 功能,通常是因为配置问题或文件系统的限制。断点续传是指用户在中断下载后,可以从上次中断的地方继续下载,而不是重新开始。以下是可能的原因分析和解决方法。1. 什么是断点续传?断点续传(HTTP Range 请求):由客户端发…...

Rust使用rbatis

toml rbs = { version = "4.6"} rbatis = { version = "4.6"} #drivers rbdc-mysql = { version = "4.6" } # 其他依赖 serde = { version = "1", features = ["derive"] } serde_json = "1.0" tokio = { version…...

2025ICPC网络赛第一场(A,B,C,D,G,I,M)

A. Who Can Win https://qoj.ac/contest/2513/problem/14301 思路 按题意模拟,统计第 \(239min\) 时成绩最好的队伍,记为冠军队伍,从 \(240min\) 开始到比赛结束的所有队伍都假设提交通过,实时计算成绩,一旦超过 \(239min\) 前的成绩最好队伍同样记作冠军。 细节: 1.输出…...

Google Maps

Google Maps...

【TES600G】基于JFM7K325T FPGA+FT-M6678 DSP的全国产化信号处理平台

​ 产品概述 TES600G是一款基于FPGA+DSP协同处理架构的通用高性能实时信号处理平台,该平台采用1片国防科大的银河飞腾多核浮点/定点DSP FT-M6678作为主处理单元,采用1片复旦微的Kintex-7系列FPGA JFM7K325T16作为协处理单元,具有1个FMC子卡接口,具有4路SFP+万兆光纤接口,…...

KMS激活Windows系统(win10)

在开始菜单上右键,选择 Windows PowerShell(管理员),依次输入以下命令即可激活成功 slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 slmgr /skms kms.03k.org slmgr /ato 1、安装产品密钥,不同的操作系统激活码不一样,网上搜索下有很多,这些激活码不能在线直接激活,但可以通过…...

基于python3的http文件服务器

前言跨环境或者跨跳板机传输文件很麻烦,比如从windows系统跨跳板机传输文件到linux系统,这时候scp就不适用了。 比较简单的方式是,从windows系统开一个http文件服务,然后从linux系统直接使用http链接下载。 如果是自己的环境,直接使用python3 -m http.server --bind 0.0.0…...

大阪府

大阪府名称大阪城 心斋桥 道顿崛 海游馆 通天阁 四天王寺 环球影城 万博纪念公园 中之岛公园 天保山摩天轮...

sql server2008大批量插入数据

谨慎使用update 最好对应字段 直接使用insertDECLARE @pageIndex INTDECLARE @pageSize INTDECLARE @TotalpageIndex INTdeclare @rows as int SET @pageIndex = 1SET @pageSize = 10000set @TotalpageIndex=((select top 1 ID from [NewWeBusiness_PJM].[dbo].[Scale] order …...

【Office 2010】经典办公套件Office 2010——保姆级详细图文下载安装教程 - 详解

【Office 2010】经典办公套件Office 2010——保姆级详细图文下载安装教程 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…...

Eth-Trunk实验

...

HCIP—Eth-Trunk

...

一个还不错的,简单的,前端vue2后台框架

https://gitee.com/e4glet/vue-cli4-framwork相信坚持的力量,日复一日的习惯....

P4099 [HEOI2013] SAO

题意:给定一棵有 \(n\) 个点(\(n \le 1000\))的树,每条边 \((u, v)\) 有参数 \(c\) 表明 \(u\) 和 \(v\) 谁必须排在前面,求满足所有边条件的排列种数。思路:采用容斥原理解决。先以 \(1\) 为根,将所有 \(c = 1\) 的边看作无限制,求方案数,再通过容斥调整。可在树形DP…...

Linux chronyd 时间同步服务器,命令

Linux chronyd 时间同步服务器,命令chronyd 是 Linux 系统中常用的时间同步服务工具,以下是其常用命令:启动 / 停止 / 重启服务:# 启动服务 sudo systemctl start chronyd # 停止服务 sudo systemctl stop chronyd # 重启服务 sudo systemctl restart chronyd # 查看服务状…...

2025暑假集训总结lh

暑假进行了一个月的集训,也刷了不少题,参加了几场萌新赛。让我看出来我目前最大的问题:基础不太牢固。 以前学习c语言,从来没有看过具体的课程,从来都是用到什么就搜什么来学习,导致没有具体的框架在脑子里。 不少题,大致思路我能看出来,也大概知道要用哪些板子,但是一…...

ET框架的 阻止 ddos 设计,软路由

https://et-framework.cn/d/17ET7 软路由 ET7分支已经添加软路由功能~早期分享 最近在做防攻击设计,今天终于完成并且实现了,这里分享给大家,特别是搞棋牌的项目,还有小公司没法通过法律手段来防止别人攻击。特别有用处。因为高防实在太贵,用不起。 设计思路如下:需要有很…...