常见的绕过XSS过滤的方法

xss绕过过滤之方法
很多网站为了避免XSS的攻击,对用户的输入都采取了过滤,最常见的就是对<>转换成<以及>,经过转换以后<>虽然可在正确显示在页面上,但是已经不能构成代码语句了。这个貌似很彻底,因为一旦<>被转换掉,什么就会转换成“<script src=1.js></script>”,不能执行,因此,很多人认为只要用户的输入没有构成<>,就不能闭合前后的标签,其语句当然也不会有害。

但是,万事总有可能,只要有一定的条件,我们就可以构造经过编码后的语句来进行XSS。

1.转义字符

首先要认识一下“\”,这个不是斜杠么。对的,斜杠在JAVASCRIPT有着特殊的用途,它是转义的符号。例如,我们把我们XSS语句转换成16进制,这里是,我用在CHA88那里淘过来的脚本工具来转换,如图:(工具地址:http://tools88.com/safe/xss.php)
在这里插入图片描述
结果如下

\x3C\x73\x63\x72\x69\x70\x74\x3E\x61\x6C\x65\x72\x74\x28\x27\x70\x6F\x72\x75\x69\x6E\x27\x29\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E

这些就是经过编码后的字符,因为前面的斜杠缘故,所以后面的这些字符在JAVASCRIPT中都会被还原。

我们再来看一下测试用的index.asp

<form name=form>

<input type=text name=text1>

<input type=submit name=submit>

</form>

<%

if request(“text1”)<> “” then

a=replace(replace(request(“text1”),"<","<"),">",">")

end if

%>

很简单的内容,接受用户的数据后过滤<>,再用JAVASCRIPT显示出来,直接输入XSS的测试语句看看,被转换掉了吧。再来输入经过16进制转换后的字符,这些字符都可以轻松的逃过过滤,完整进入代码中,经过JAVASCRIPT还原之后,正确解释出来,如图

在这里插入图片描述
而不但是十六进制可以,八进制同样奏效,转换后代码如下:

\74\163\143\162\151\160\164\76\141\154\145\162\164\50\47\160\157\162\165\151\156\47\51\74\57\163\143\162\151\160\164\76

二.UBB标签
UBB标签是目前广泛运用到论坛,留言簿,以及其他网站系统的一种编码标签,类似[img]url[/img]这样的,用户在中间输入地址后即可,在发表的时候系统会自动改成<img src=”url”></img>。这个URL就是用户输入的图片地址,XSS攻击中,可以利用这个特点来达到无需用户输入<>就能执行由用户所输入的代码,我们只要在输入网址的地方输入:

x"/**/οnerrοr="alert(‘poruin’)

那么经过转换后就变成了

<img src=“x”/**/οnerrοr=“alert(‘poruin’)”>

在JS中空格可以用/**/转换,如图:
在这里插入图片描述
三.JS还原函数
JS中的编码还原函数最常用的就是String.fromCharCode了,这个函数用于ascii码的还原,一般来说,这个函数都要配合EVAL来使用才有效果。

在跨站中,String.fromCharCode主要是使到一些已经被列入黑名单的关键字或语句安全通过检测,把关键字或语句转换成为ASCII码,然后再用String.fromCharCode还原,因为大多数的过滤系统都不会把String.fromCharCode加以过滤,例如关键字alert被过滤掉,那就可以这么利用:

<img src=“x”/**/οnerrοr=“eval(String.fromCharCode(97,108,101,114,116,40,39,112,111,114,117,105,110,39,41))”>

执行效果如上图一样,没有关键字同样执行想要执行的代码。

文章到此大致结束了,要知道在XSS中可以利用绕过过滤的技术远不止这些,毕竟有防自然也会有攻,魔高一尺道高一丈,我写这文章时间很短,都是依靠我自己的理解来写的,有不正确的地方欢迎各位指出,也希望能和一些喜欢脚本安全或者是XSS的朋友一起讨论这方面的内容。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值