Web 应用程序中的 XSS(内容嗅探)漏洞

admin 2022年4月10日00:25:11安全文章评论44 views3615字阅读12分3秒阅读模式

点击上方蓝字“Ots安全”一起玩耍

当 Web 浏览器从 Web 服务器读取响应数据包时,它们会查看响应数据包中的 Content-Type 标头,并相应地读取/解释数据包内容并将其呈现到屏幕上。但是,如果响应数据包中的 Content-Type 标头损坏或根本不包含 Content-Type 标头,则 Web 浏览器软件(尤其是 Internet Explorer)会对响应数据包中的内容应用内容嗅探程序,以便响应数据包可以被正确读取/解释并呈现到屏幕上。通过这种方式,它们确定传入包中内容的 MIME 类型,并根据该信息读取/解释包并在界面中呈现给我们。这样我们就可以正确显示响应包(应用程序页面)。 


损坏或没有 Content-Type 标头会触发 Web 浏览器运行 Content-Sniffing 功能以将响应数据包呈现到屏幕上。因此,通过Content Sniffing对包体区域的数据获取包的Content-Type信息,并据此读取/解释包并呈现在屏幕上。 


Web 浏览器中的内容嗅探功能应旨在为 Web 应用程序提供灵活性,以便在数据包类型信息未包含/忘记或在 Web 应用程序中具有损坏值的情况下,浏览器仍然可以自己检测类型信息并呈现展示。但这也带来了安全风险。 


例如,在用户输入被反射回来的 Web 应用程序页面中,在响应数据包中没有设置/忘记 Content-Type 标头或者它具有损坏的值,这可能导致响应数据包受到 Content Sniffing 的影响浏览器以及因此反映在数据包中的用户输入的类型将被计为数据包类型。通过这种方式,用户可以变成可执行输入,而输入通常应该被认为是反射数据包中的字符串,其中包含用户将输入的有害输入。 


在 XSS (Content-Sniffing) 攻击中,虽然用户作为输入提供的 xss 有效负载通常会被反映为页面上的字符串以被反射回来,但响应数据包没有 Content-Type 信息或已损坏所有权,所以浏览器在包中进行Content-Sniffing,包的类型被指定为用户输入的类型。这被称为xss有效负载在工作状态下对浏览器的反射,作为评估包的结果它的信息并在相应地阅读/解释包后呈现它。通常,如果响应包中包含 Content-Type 信息,则响应包类型不会根据用户输入而改变,因此 XSS 负载不会被评估为字符串并执行。 


XSS(内容嗅探)漏洞发生在具有内容嗅探程序的 Web 浏览器中。Internet Explorer 在这方面领先。


注意:内容嗅探会在浏览器的特定时刻触发。它有一个 http 规范。


XSS(内容嗅探)注意事项

为了保护用户免受这种攻击,应该在响应数据包中添加一个 http 安全头 X-Content-Type-Options。这样,即使响应数据包的 Content-Type 损坏或没有 Content-Type 信息,X-Content-Type-Options 响应头也会指示浏览器不要运行 Content Sniffing,并且不会对数据包进行检测类型信息。包裹类型将被保留为未知,内容将被阻止显示在屏幕上。这样,可以通过利用丢失的 Content-Type 或在将用户输入反射回来的响应包中具有损坏的值来防止输入类型被认为是包类型,并且当输入变为可执行时通常应该保持一个字符串。


结论

当响应包的 Content-Type 头信息损坏或根本没有头信息时,浏览器会运行其称为 Content Sniffing 的功能,并从内容中获取响应包类型信息,然后用获取的类型信息解释数据包并将其呈现在屏幕上。没有在响应包中明确指定Content-Type或者指定不正确的值,在响应包中有用户输入的情况下,可能会导致用户输入被计为响应包的类型,这样,包用户输入类型中的读取/解释可能会在输入可以工作时反映在屏幕上。 


样本

例如,应用程序的一个页面返回一个 json 格式的错误响应,作为给参数的值的结果。当 XSS 有效负载被赋予应用程序的此页面上的参数时,XSS 有效负载作为响应在错误消息中返回。但是由于响应包返回的是json格式的错误信息,所以里面的XSS payload(javascript代码)不起作用。


// XSS payload在应用页面的op参数中输入

Http请求:

GET /webhdfs/v1/?op=LISTSTATUS'"()%26%25<acx><ScRiPt%20>J4Um(9462)</ScRiPt> HTTP/1.1Referer: http://X.X.X.X:5070/Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Encoding: gzip,deflateHost: X.X.X.X:5070User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36Connection: Keep-alive

返回的数据包是 json 格式,它反映了我们发送的 XSS 有效负载,同时它包含 json 内容以通知它导致了错误。


Http 响应:

HTTP/1.1 200 OKCache-Control: no-cacheExpires: Wed, 08 Jan 2020 07:30:25 GMTDate: Wed, 08 Jan 2020 07:30:25 GMTPragma: no-cacheExpires: Wed, 08 Jan 2020 07:30:25 GMTDate: Wed, 08 Jan 2020 07:30:25 GMTPragma: no-cacheContent-Type: application/json                                                    // Paket Json FormattaX-FRAME-OPTIONS: SAMEORIGINServer: ApacheContent-Length: 288
{"RemoteException":{"exception":"IllegalArgumentException","javaClassName":"java.lang.IllegalArgumentException","message":"Invalid value for webhdfs parameter "op": No enum constant org.apache.hadoop.hdfs.web.resources.GetOpParam.Op.LISTSTATUS'"()&%<ACX><SCRIPT >J4UM(9462)</SCRIPT>"}} // XSS Payload'u Barındırıyor

应用程序以 json 格式返回此页面上的错误消息。错误信息中以 json 格式出现的 XSS 代码将无法在用户屏幕上运行,因为由于包格式的原因,它是使用 json 读取来读取的。此 XSS 代码将作为字符串包含在 json 内容中,并在页面上显示错误消息。如果应用服务器的响应报文中没有添加 X-Content-Type-Options 头,则与 Content-Type 不一致的包子内容的 XSS 载荷条目可以触发 Content-Sniffing 功能在浏览器中执行,修正Content-Type,这样就可以根据子内容对包类型信息进行整形,可以进行包的读取/解释。这意味着子内容不是在浏览器屏幕上显示为字符串,而是处于工作状态。 


一个示例场景:可以准备一个会创建和发送这个包的url地址,通过点击它通过各种方法传送给受害者,受害者的cookies可以被窃取,他们在哪个键盘上输入的信息可以被窃取。被收集,...等


资源

  • https://en.wikipedia.org/wiki/Content_sniffing

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options

  • https://www.geeksforgeeks.org/http-headers-x-content-type-options/

  • https://geekflare.com/http-header-implementation/

  • https://www.acunetix.com/vulnerabilities/web/cross-site-scripting-content-sniffing/

  • https://www.denimgroup.com/resources/blog/2019/05/mime-sniffing-in-browsers-and-the-security-implications/

  • https://hackerone.com/reports/363845

Web 应用程序中的 XSS(内容嗅探)漏洞

原文始发于微信公众号(Ots安全):Web 应用程序中的 XSS(内容嗅探)漏洞

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月10日00:25:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Web 应用程序中的 XSS(内容嗅探)漏洞 http://cn-sec.com/archives/738553.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: