From ab2d9d742665b021813ffb81195c84283ef96eb4 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 15 Jun 2025 15:13:54 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks. --- src/SUMMARY.md | 1 + .../pentesting-web/ruby-tricks.md | 9 +++ src/pentesting-web/clickjacking.md | 14 ++-- .../iframes-in-xss-and-csp.md | 75 +++++++++++++++---- 4 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 src/network-services-pentesting/pentesting-web/ruby-tricks.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ef5322f3e..d902fdb93 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -435,6 +435,7 @@ - [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md) - [Python](network-services-pentesting/pentesting-web/python.md) - [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md) + - [Ruby Tricks](network-services-pentesting/pentesting-web/ruby-tricks.md) - [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]() - [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md) - [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md) diff --git a/src/network-services-pentesting/pentesting-web/ruby-tricks.md b/src/network-services-pentesting/pentesting-web/ruby-tricks.md new file mode 100644 index 000000000..e4c3eae16 --- /dev/null +++ b/src/network-services-pentesting/pentesting-web/ruby-tricks.md @@ -0,0 +1,9 @@ +# Ruby Tricks + +{{#include ../../banners/hacktricks-training.md}} + +## 文件上传到 RCE + +正如在 [这篇文章](https://www.offsec.com/blog/cve-2024-46986/) 中所解释的,将 `.rb` 文件上传到敏感目录,如 `config/initializers/`,可能导致 Ruby on Rails 应用程序中的远程代码执行 (RCE)。 + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md index 145c2267d..59b455de3 100644 --- a/src/pentesting-web/clickjacking.md +++ b/src/pentesting-web/clickjacking.md @@ -8,7 +8,7 @@ ### 预填充表单技巧 -有时可以在加载页面时使用 GET 参数**填充表单字段的值**。攻击者可能会利用这种行为用任意数据填充表单,并发送 clickjacking 有效载荷,以便用户点击提交按钮。 +有时可以在加载页面时**使用 GET 参数填充表单字段的值**。攻击者可能会利用这种行为用任意数据填充表单,并发送 clickjacking 有效载荷,以便用户点击提交按钮。 ### 使用拖放填充表单 @@ -91,12 +91,12 @@ background: #F00; 如果您已识别出一个**需要用户点击**某个元素以**触发**XSS的**XSS攻击**,并且该页面**易受点击劫持**,您可以利用它来欺骗用户点击按钮/链接。\ 示例:\ -您在账户的某些私人细节中发现了一个**自我XSS**(只有您可以设置和读取的细节)。包含设置这些细节的**表单**的页面**易受** **点击劫持**,您可以用GET参数**预填充**该**表单**。\ +您在账户的某些私人细节中发现了**自我XSS**(只有您可以设置和读取的细节)。包含设置这些细节的**表单**的页面**易受** **点击劫持**,您可以用GET参数**预填充**该**表单**。\ 攻击者可以准备一个**点击劫持**攻击,通过**预填充**该页面的**表单**与**XSS有效载荷**,并**欺骗**用户**提交**表单。因此,**当表单被提交**且值被修改时,**用户将执行XSS**。 ### DoubleClickjacking -首先在[这篇文章](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html)中解释,这种技术会要求受害者在特定位置的自定义页面上的一个按钮上双击,并利用mousedown和onclick事件之间的时间差在双击期间加载受害者页面,以便**受害者实际上点击了受害者页面中的一个合法按钮**。 +首先在[这篇文章](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html)中解释,这种技术会要求受害者在特定位置的自定义页面上双击一个按钮,并利用mousedown和onclick事件之间的时间差在双击期间加载受害者页面,以便**受害者实际上点击了受害者页面中的合法按钮**。 一个示例可以在这个视频中看到:[https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18) @@ -119,14 +119,14 @@ background: #F00; 然而,这些框架破坏脚本可能会被规避: - **浏览器的安全设置:** 一些浏览器可能会根据其安全设置或缺乏JavaScript支持来阻止这些脚本。 -- **HTML5 iframe `sandbox` 属性:** 攻击者可以通过设置`sandbox`属性为`allow-forms`或`allow-scripts`值而不包含`allow-top-navigation`来中和框架破坏脚本。这防止了iframe验证它是否是顶层窗口,例如, +- **HTML5 iframe `sandbox` 属性:** 攻击者可以通过设置`allow-forms`或`allow-scripts`值而不带`allow-top-navigation`的`sandbox`属性来中和框架破坏脚本。这会阻止iframe验证它是否是顶层窗口,例如, ```html ``` -`allow-forms` 和 `allow-scripts` 值在禁用顶级导航的同时启用 iframe 内的操作。为了确保目标站点的预期功能,可能需要额外的权限,如 `allow-same-origin` 和 `allow-modals`,具体取决于攻击类型。浏览器控制台消息可以指导允许哪些权限。 +`allow-forms` 和 `allow-scripts` 值允许在 iframe 内进行操作,同时禁用顶级导航。为了确保目标站点的预期功能,可能需要额外的权限,如 `allow-same-origin` 和 `allow-modals`,具体取决于攻击类型。浏览器控制台消息可以指导允许哪些权限。 ### 服务器端防御 @@ -141,7 +141,7 @@ sandbox="allow-forms allow-scripts"> #### 内容安全策略 (CSP) frame-ancestors 指令 -**CSP 中的 `frame-ancestors` 指令** 是建议的 Clickjacking 保护方法: +**CSP 中的 `frame-ancestors` 指令** 是防止 Clickjacking 的建议方法: - `frame-ancestors 'none'` - 类似于 `X-Frame-Options: deny`。 - `frame-ancestors 'self'` - 类似于 `X-Frame-Options: sameorigin`。 @@ -179,7 +179,7 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com; - 弃用:child-src 正在逐步被 frame-src 和 worker-src 取代。 - 回退行为:如果 frame-src 缺失,则使用 child-src 作为框架的回退。如果两者都缺失,则使用 default-src。 -- 严格的源定义:在指令中仅包含受信任的源以防止利用。 +- 严格的源定义:在指令中仅包含可信源以防止利用。 #### JavaScript 框架破坏脚本 diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index 85ecc34b0..ba889b692 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -4,11 +4,11 @@ ## Iframes in XSS -有3种方式来指示iframe页面的内容: +有三种方式来指示一个 iframe 页面内容: -- 通过`src`指示一个URL(该URL可以是跨源或同源) -- 通过`src`使用`data:`协议指示内容 -- 通过`srcdoc`指示内容 +- 通过 `src` 指定一个 URL(该 URL 可以是跨源或同源) +- 通过 `src` 使用 `data:` 协议指示内容 +- 通过 `srcdoc` 指示内容 **访问父变量和子变量** ```html @@ -45,12 +45,12 @@ var secret = "child secret" alert(parent.secret) ``` -如果您通过 HTTP 服务器访问之前的 HTML(如 `python3 -m http.server`),您会注意到所有脚本都会被执行(因为没有 CSP 阻止它)。**父级将无法访问任何 iframe 内部的 `secret` 变量**,**只有 if2 和 if3(被视为同站)可以访问原始窗口中的 secret**。\ +如果您通过 HTTP 服务器(如 `python3 -m http.server`)访问之前的 HTML,您会注意到所有脚本都会被执行(因为没有 CSP 阻止它)。**父级将无法访问任何 iframe 内部的 `secret` 变量**,**只有 if2 和 if3(被视为同源)可以访问原始窗口中的 secret**。\ 请注意 if4 被认为具有 `null` 来源。 ### 带 CSP 的 Iframes -> [!NOTE] +> [!TIP] > 请注意,在以下绕过中,响应的 iframed 页面不包含任何阻止 JS 执行的 CSP 头。 `script-src` 的 `self` 值将不允许使用 `data:` 协议或 `srcdoc` 属性执行 JS 代码。\ @@ -76,12 +76,12 @@ id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"> ``` -注意到**之前的 CSP 仅允许执行内联脚本**。\ +注意,**之前的 CSP 仅允许执行内联脚本**。\ 然而,**只有 `if1` 和 `if2` 脚本将被执行,但只有 `if1` 能够访问父级秘密**。 ![](<../../images/image (372).png>) -因此,如果您可以将 JS 文件上传到服务器并通过 iframe 加载,即使 `script-src 'none'`,也有可能**绕过 CSP**。这也可以**通过滥用同站 JSONP 端点来实现**。 +因此,如果您可以将 JS 文件上传到服务器并通过 iframe 加载,即使 `script-src 'none'`,也有可能**绕过 CSP**。这也**可能通过滥用同站 JSONP 端点来实现**。 您可以通过以下场景进行测试,即使在 `script-src 'none'` 的情况下也会窃取 cookie。只需运行应用程序并使用浏览器访问它: ```python @@ -117,24 +117,71 @@ src='data:text/html, + + +``` + +- 另一个 iframe 实际上已经登录用户(没有 `credentialless` 标志)。 + +然后,从 XSS 中可以访问另一个 iframe,因为它们具有相同的 SOP,并通过执行来窃取 cookie: +```javascript +alert(window.top[1].document.cookie); +``` +### fetchLater 攻击 + +正如[这篇文章](https://blog.slonser.info/posts/make-self-xss-great-again/)中所述,API `fetchLater` 允许配置请求在稍后执行(在一定时间后)。因此,这可以被滥用,例如,在攻击者的会话中登录受害者(使用 Self-XSS),设置一个 `fetchLater` 请求(例如更改当前用户的密码)并从攻击者的会话中注销。然后,受害者在自己的会话中登录,`fetchLater` 请求将被执行,将受害者的密码更改为攻击者设置的密码。 + +这样,即使受害者的 URL 不能在 iframe 中加载(由于 CSP 或其他限制),攻击者仍然可以在受害者的会话中执行请求。 +```javascript +var req = new Request("/change_rights",{method:"POST",body:JSON.stringify({username:"victim", rights: "admin"}),credentials:"include"}) +const minute = 60000 +let arr = [minute, minute * 60, minute * 60 * 24, ...] +for (let timeout of arr) +fetchLater(req,{activateAfter: timeout}) +``` +## Iframes 在 SOP 中 检查以下页面: