从空页面到基于POST的JSON XSS

admin 2024年2月1日19:37:58评论8 views字数 2073阅读6分54秒阅读模式

从空页面到基于POST的JSON XSS

通常我的方法首先是寻找具有 403 或 404 响应代码的子域或具有空主页的子域,因为这些子域总是被其他错误赏金猎人所忽略,并且在其上找到漏洞更容易,并且意味着更有机会不被重复报告 。
另外,在我的方法中,我喜欢使用非预期的方法、标头和有效负载来模糊端点,以检查非标准和预期情况下 Web 应用程序的行为 。
因此,在收集子域后,我将它们传递给 aquatone 工具并打开 HTML 生成的文件浏览器和我注意到一个具有有趣名称的子域,即 webhook.redacted.com,整个页面中只有一个数字,即 0,如下所示

从空页面到基于POST的JSON XSS

子域的普通响应 

有时,当您发现具有特定名称的子域时,您可能会直接想到某种类型的漏洞,例如如果您发现 grafana.redacted.com,您将直接知道您正在处理 grafana 并直接测试其版本是否存在已知漏洞(webhook )名称可能会吸引您搜索 SSRF 漏洞,因为顾名思义,它也处理 URL,正如我之前所说,我喜欢在带有空页面的子域上寻找,所以我决定使用它

从空页面到基于POST的JSON XSS

GET请求的响应 

首先,我将请求方法更改为 POST 而不是 GET,响应中没有任何变化

从空页面到基于POST的JSON XSS

基于POST的空数据响应

然后我添加了虚拟帖子数据 a=4 并且也没有任何改变

从空页面到基于POST的JSON XSS

基于POST的数据响应 

然后我想将post数据添加为json数据,突然发现这个错误

从空页面到基于POST的JSON XSS

由于请求中的 JSON 数据而导致响应中出现错误消息 

我的眼睛因这个错误而闪闪发光,因为我以为我会发现一个 SQLi 漏洞,所以我努力尝试所有有效负载、备忘单、文章以及 ZAP、burp pro、sqlmap、ghauri 等工具,但没有成功利用它但在我的测试过程中,我注意到我在 json 数据中注入的任何数据都会反映在未编码的源代码中,所以我想如果我无法获取 SQLi,让我们测试基于 POST 的 json XSS 
所以我尝试了这个有效负载 <script>alert (1)</script> 但如下面的屏幕截图所示,它转义了结束标记上的斜杠,因此有效负载不起作用

从空页面到基于POST的JSON XSS

Web 应用程序转义了结束标记斜杠

所以我想使用只有打开标签而不需要关闭标签的 HTML 标签来避免关闭标签的转义,所以我使用 <img src=x onerror=alert(1)> 并宾果有效负载反射非编码并触发警报当我在浏览器中显示响应时。但这里有一个非常重要的注意事项,除非响应标头内容类型设置为 text/html,否则不会发生这种情况 

从空页面到基于POST的JSON XSS

JSON 负载反映为非编码并呈现为 HTML 

但众所周知,没有 bug 赏金计划会接受仅在 burp 上显示此内容,因此我们需要制作 HTML poc 并利用它来利用该漏洞,因此查看使用的有效负载,我们需要在表单中发送 json 数据,因为您可以看到该请求使用标头 
内容类型发送:Application/x-www-form-urlencoded
,因此我们需要在表单字段中发送大括号 ({}) 和双引号 (“”) 以及冒号 (:),这样我就有了知道为什么我们不能以变量名称或其值发送这些符号,如下所示

从空页面到基于POST的JSON XSS

第一次尝试有效负载 

在此 POC 中,您需要注意几件事 
1- 我们将整个有效负载注入到具有空值的参数名称中 
2- 我们应该使用 enctype=text/plain,以便浏览器不会对这些特殊字符进行 url 编码 
3 - 我添加了自动提交代码(document.TheForm.submit()),以便受害者打开html页面后自动提交表单,以避免受害者需要执行两个操作(打开页面并提交表单),因为更多受害者需要采取的行动意味着报告的严重性较低,因此在这种情况下,受害者只需访问包含隐形恶意负载的恶意网站

但不幸的是,浏览器在有效负载末尾添加了额外的等号(=),因为它应该在参数名称和参数值之间执行此操作,并且由于该值为空,因此在有效负载末尾添加了等号停止它的工作,如下所示,因为它破坏了 json 有效负载,并且有效负载不再是有效的 json,因此响应返回到就像基于常规帖子一样

从空页面到基于POST的JSON XSS

等号破坏了 JSON 负载 

我还尝试将整个有效负载放入参数值中并使用空名称参数,但浏览器在有效负载的开头添加等号,这也使有效负载成为无效的 json 。在这里我非常失望,因为整个漏洞将因浏览器添加的等号(=)而导致 JSON 语法无效而失败。

但突然我有了一个想法。有效负载中间已经有等号 (=) (<img src=x onerror=alert(document.domain))

为什么我们不省略有效负载中的等号并将其分为两部分,第一个部分是等号之前的部分,并将其放入参数名称中,第二部分是等号之后的部分,并将其放入参数的值中参数并让浏览器输入等号,以便它为我们完成有效负载,如下所示

从空页面到基于POST的JSON XSS

最终有效载荷 

宾果,它就像一个魅力

从空页面到基于POST的JSON XSS

有效负载有效 

要点:-

1-模糊所有内容,即使它显示空白页面。

2-永不放弃并尝试发挥创造力。

3-始终以空的主页子域开始 

原文地址:
https://blog.flawminers.com/index.php/2024/01/30/from-empty-page-to-post-based-json-xss/

原文始发于微信公众号(Ots安全):从空页面到基于POST的JSON XSS

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月1日19:37:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   从空页面到基于POST的JSON XSShttp://cn-sec.com/archives/2453926.html

发表评论

匿名网友 填写信息