XSS一直被OWASP(Open Web Appliaction Secyritu Project,是世界上知名的Web安全与数据库安全研究组织) 组织评为十大安全漏洞中的第二威胁漏洞
HTML的script元素怒标记中间包含js,这使得浏览器知道:当遇到这一标记,不应将此标记内容处理成HTML或XHTML,从这一点开始,对于内容的控制权已经转移给另一个内置的浏览器代理——脚本引擎 处理。
弹处恶意警告框 :
也可以是HTML代码段,不停刷新网页:
嵌入其他网站的链接:
反射型跨站脚本,主要将恶意脚本附加到URL地址的参数中,例如:
http://www.test.com/search.php?key=">
http://www.test.com/logout.asp? out=1&javascript:alert(document.cookie)
反射型XSS恶意代码暴露在URL中,非常容易被发现,可以通过各种编码如十进制、十六进制、ESCAPE等转换解决
白盒测试是指知道程序内部的结构,也就是获得源代码的情况下对软件进行测试
黑盒测试则完全相反
灰盒测试介于两者之间
数据交互(即输入/输出)的地方最容易产生跨站脚本,因此我们着重对网站的输入框、URL参数进行测试。当然、所有来自Cookie、POST表单、HTTP头的内容都可能会产生XSS
在留言页面输入
,点提交页面没有任何迹象,因为用户提交的留言一般要通过后台管理员的审核才会显示
登录后台管理员账号。看到我们输入的XSS被浏览器直接显示出来了,这种情况可能是对这条XSS进行了转义
查看源代码发现XSS代码被嵌入到标签中,然后在浏览器直接显示出来
重新修改XSS代码:
这种XSS攻击的对象是后台管理员,攻击者能利用此种XSS劫持管理员会话而执行任意操作,比如修改密码、备份数据库等
XSS Cheat Sheet
中文文档
英文文档
XSS Cheat Sheet几乎涵盖了目前所有可能触发XSS的测试用例
为了防御XSS,会在WEB应用中设计一个XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击、恶意的HTML或简单的HTML格式错误等
XSS Filter一般是基于黑白名单的安全过滤策略,即把要处理的数据分成白名单和黑名单两大列表,白名单存放的是可信赖、对应用程序不构成威胁的数据列表,黑名单则相反
XSS Filter的绕过
1、 利用<>标记注射Html / js
XSS Filter首当其中要过滤和转义的就是<>
和
如此一来这种形式就不复存在了
2、利用HTML标签属性值执行XSS
很多HTML标记中的属性都支持javascript:[code]
伪协议的形式,这个特殊的协议类型声明了URL的主体是任意的JS代码,由js的解释器运行
利用IMG标记的src属性,如果没有弹出对话框,是因为不是所有Web浏览器都支持Javascript伪协议
并非所有标记的属性值都能产生XSS,只有引用文件的属性值才能触发XSS,可以用href= lowsrc= bgsound= value= action= dynsrc=
要预防属性值的XSS,就要过滤js等关键字
3、回车空格Tab
如果XSS Filter仅仅把敏感的输入字符列入黑名单处理,如对敏感字javascript而言,用户可以利用空格、回车和Tab绕过限制
javas和cript间加上Tab
js语句通常以分号结尾,如果js引擎确定一个语句是完整的,而这一行结尾有换行符,那么可以省略分号,如果同一行中有多个语句,那么语句就必须使用分号来结束。除了在引号中分隔单词或强制结束语句外,额外的空白无论以何种方式添加都无所谓
4、对标签属性值转码
此外,对普通HTML标记的属性值进行过滤,用户还可以通过编码处理来绕过,因为HTML中属性值本身支持ASCII码形式
替换成
对应ASCII码表可以看出,t的ASCII值未116,用"t"表示, 冒号: 则表示为:
还可以把、等字符插入的JavaScript或VBscript的头部,另外Tab符的ASCII码 、换行符的 、回车符的 可以插入到代码的任意地方,末尾都需要加上分号
所以为了防范利用HTML标签属性编码的XSS,最好也过滤& # \ 等字符
5、产生自己的事件
JS和HTML之间的交互是通过事件来实现的,事件就是用户或浏览器自身执行官的某种动作,比如click、mouseover、load等,而响应事件的函数就叫做事件处理函数(或事件侦听器)
测试时间型的跨站,还有大量事件可以运用
6、利用CSS跨站剖析