子域的普通响应
有时,当您发现具有特定名称的子域时,您可能会直接想到某种类型的漏洞,例如如果您发现 grafana.redacted.com,您将直接知道您正在处理 grafana 并直接测试其版本是否存在已知漏洞(webhook )名称可能会吸引您搜索 SSRF 漏洞,因为顾名思义,它也处理 URL,正如我之前所说,我喜欢在带有空页面的子域上寻找,所以我决定使用它
GET请求的响应
首先,我将请求方法更改为 POST 而不是 GET,响应中没有任何变化
基于POST的空数据响应
然后我添加了虚拟帖子数据 a=4 并且也没有任何改变
基于POST的数据响应
然后我想将post数据添加为json数据,突然发现这个错误
由于请求中的 JSON 数据而导致响应中出现错误消息
我的眼睛因这个错误而闪闪发光,因为我以为我会发现一个 SQLi 漏洞,所以我努力尝试所有有效负载、备忘单、文章以及 ZAP、burp pro、sqlmap、ghauri 等工具,但没有成功利用它但在我的测试过程中,我注意到我在 json 数据中注入的任何数据都会反映在未编码的源代码中,所以我想如果我无法获取 SQLi,让我们测试基于 POST 的 json XSS
所以我尝试了这个有效负载 <script>alert (1)</script> 但如下面的屏幕截图所示,它转义了结束标记上的斜杠,因此有效负载不起作用
Web 应用程序转义了结束标记斜杠
所以我想使用只有打开标签而不需要关闭标签的 HTML 标签来避免关闭标签的转义,所以我使用 <img src=x onerror=alert(1)> 并宾果有效负载反射非编码并触发警报当我在浏览器中显示响应时。但这里有一个非常重要的注意事项,除非响应标头内容类型设置为 text/html,否则不会发生这种情况
JSON 负载反映为非编码并呈现为 HTML
但众所周知,没有 bug 赏金计划会接受仅在 burp 上显示此内容,因此我们需要制作 HTML poc 并利用它来利用该漏洞,因此查看使用的有效负载,我们需要在表单中发送 json 数据,因为您可以看到该请求使用标头
内容类型发送:Application/x-www-form-urlencoded
,因此我们需要在表单字段中发送大括号 ({}) 和双引号 (“”) 以及冒号 (:),这样我就有了知道为什么我们不能以变量名称或其值发送这些符号,如下所示
第一次尝试有效负载
在此 POC 中,您需要注意几件事
1- 我们将整个有效负载注入到具有空值的参数名称中
2- 我们应该使用 enctype=text/plain,以便浏览器不会对这些特殊字符进行 url 编码
3 - 我添加了自动提交代码(document.TheForm.submit()),以便受害者打开html页面后自动提交表单,以避免受害者需要执行两个操作(打开页面并提交表单),因为更多受害者需要采取的行动意味着报告的严重性较低,因此在这种情况下,受害者只需访问包含隐形恶意负载的恶意网站
但不幸的是,浏览器在有效负载末尾添加了额外的等号(=),因为它应该在参数名称和参数值之间执行此操作,并且由于该值为空,因此在有效负载末尾添加了等号停止它的工作,如下所示,因为它破坏了 json 有效负载,并且有效负载不再是有效的 json,因此响应返回到就像基于常规帖子一样
等号破坏了 JSON 负载
我还尝试将整个有效负载放入参数值中并使用空名称参数,但浏览器在有效负载的开头添加等号,这也使有效负载成为无效的 json 。在这里我非常失望,因为整个漏洞将因浏览器添加的等号(=)而导致 JSON 语法无效而失败。
但突然我有了一个想法。有效负载中间已经有等号 (=) (<img src=x onerror=alert(document.domain))
为什么我们不省略有效负载中的等号并将其分为两部分,第一个部分是等号之前的部分,并将其放入参数名称中,第二部分是等号之后的部分,并将其放入参数的值中参数并让浏览器输入等号,以便它为我们完成有效负载,如下所示
最终有效载荷
宾果,它就像一个魅力
有效负载有效
要点:-
1-模糊所有内容,即使它显示空白页面。
2-永不放弃并尝试发挥创造力。
3-始终以空的主页子域开始
原文地址:
https://blog.flawminers.com/index.php/2024/01/30/from-empty-page-to-post-based-json-xss/
原文始发于微信公众号(Ots安全):从空页面到基于POST的JSON XSS
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论