0、认识跨站脚本
举一个跨站脚本的简单例子。
假设一个页面将用户输入的参数直接显示到页面之中。(比如有如下代码)
在实际的浏览器中,在param中提交的参数正常会展示到页面之中。比如输入下面的URL:
然后发现浏览器页面的提供会变成这样:
此时如果提交下面的URL:
会发现alert被执行了
1、跨站脚本分类
跨站脚本攻击分为3类,反射型、存储型和DOM Based XSS。
1、反射型xss。浏览器执行一个不可信的脚本,并获得服务器的响应。通常黑客需要引诱用户点击恶意链接来进行触发。
2、存储型xss。比如在服务器的博客文章中有恶意脚本,那么每个访问该博客的浏览器都会执行这段而已代码。
3、修改页面的DOM节点形成的xss。(实际上也是浏览器执行不可信的脚本,但还是单独被列出为一类)
2、XSS Payload
XSS攻击成功之后,攻击者能够对当前浏览器的页面植入恶意脚本,通过恶意脚本,控制用户浏览器。这些用来完成各种具体功能的恶意脚本,被成为XSS Payload。
XSS Payload实际上就是javaScript脚本(还可以是Flash或其他富客户端的脚本)。所以javascript能做到的事情,XSS Payload都能够做到。
2.1 XSS Payload获取Cookie(通过URL的param远程加载一个脚本,脚本中加载一个图片,将cookie放入图片路径)
从开头的例子看到,通过URL的方式能够使一个脚本执行。
通过如下方式去加载一个远程脚本:
然后在evil.js中写入获取Cookie的代码(这段代码本身是加载一个图片,但是通过请求一个图片,将cookie放在请求的URL中):
即使最后该图片路径不存在,服务器也会记录下这次访问的URL,也就是能获取到cookie了。
获取cookie后,使用用户的cookie就可以伪造用户登录,但是很容易被防范。
2.2 强大的XSS Payload
模拟用户的行为:
1、构建form表单
2、通过XMLHttpRequest发送消息
比如通过网络抓包来获取某项行为的URL,然后模拟用户发送该URL
XSS钓鱼:
伪造一个假的登录框或是页面。
识别用户浏览器:
1、读取浏览器的UserAgent(可以伪造)
2、根据不同浏览器各自的独特功能,识别浏览器独有的对象
识别用户安装的软件:
1、activex的classid
2、falsh的system.capabilities对象(软件的专属对象)
ccs访问过的网站颜色不同会造成信息泄漏
获取真实IP:
javascript没有直接接口,需要使用其他软件完成,比如JRE
2.3 XSS攻击平台
Attack API
BeEF
XSS-Proxy
2.4 XSS Worm
2005地一个蠕虫病毒
2007年百度空间蠕虫病毒
2.5 调试javascript
firebug
IE8 Developer Tools
Fiddler
HttpWatch
2.6 XSS 构造技巧
3、XSS防御
HttpOnly:在cookie设置HttpOnly属性,可以让javascript读取不到cookie
输入检查:比如排查有没有像'<'或'>'等特殊字符
输出检查:将变量输出成html时可以使用编码或转义字符的方式来防御XSS攻击,将比如将<转义成&lt