XSS漏洞简介:
XSS(跨站脚本攻击,Cross-Site Scripting),允许攻击者在网页注入恶意脚本代码,当其他用户加载包含恶意代码的网站时候,就会触发该漏洞。
该漏洞攻击对象为受害者浏览器。
可能被注入的地方:微博、留言板、聊天室等收集用户输入的地方都可能被注入js代码,只要没有对用户的输入进行严格过滤,就可能被注入js代码。
XSS漏洞危害:
1、盗取各种用户账号;
2、窃取用户cookie资料,冒充用户身份进入网站;
3、劫持用户会话,执行恶意操作(操作用户浏览器);
4、刷流量,执行弹窗广告;
5、传播蠕虫病毒等等。
XSS的一般攻击流程:
首先要找到输入点和输出点(不能只找到输入点,还需要找到输出点,因为有输出点,浏览器才会解析恶意代码脚本)
攻击者将恶意代码注入到服务器中-》用户访问了被注入恶意代码的服务器-》服务器将含有恶意js代码的网页响应到了客户端-》在客户端浏览器中触发恶意js代码。
哪些地方存在输入点:url栏(如果是get传参数,可以在url寻找可能存在漏洞的地方);其次就是输入框。
防御方法:总体是对输入进行过滤,对输出进行编码。
1、对用户提交的数据进行严格过滤;
2、用户输入的内容,在输出到网页之前将其转换为HTML实体形式,比如将<转换为< 以阻止期作为HTML标签被解析;
3、设置HTTP头,限制网页可以加载的资源来源,防止外部恶意脚本的执行;
4、设置cookie为HTTP-only,防止通过js访问,减少被盗取后的风险等等。
类型:
1、反射型XSS:
参数型跨站脚本(一次性的),非持久性。注入恶意js代码在web应用的参数中,如搜索框中的反射型。
漏洞产生的原因:攻击者注入的数据反映在响应中(发送请求然后响应)。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(可以理解为将路径导向具有恶意代码的网站的链接),每次进行XSS漏洞攻击的时候都需要用户点击这个链接,然后服务器返回一个响应包,里面就带着攻击者的eyijs代码,然后浏览器进行解析,就触发了该漏洞。
所以反射型的利用方式,就是诱导用户点击恶意链接。所以不要点击来历不明的链接。
除了常规地使用javascript弹框进行检测,还可以使用HTML事件方式触发。
2、DOM型XSS:
DOM型和反射型一样都是非持久性XSS即一次性,但是DOM型相比反射型XSS来说会更简单些。DOM型XSS的攻击代码不需要服务器解析响应(反射型和持久性都需要。),而是通过浏览器端的DOM解析来触发。攻击者可以通过客户端的js脚本访问浏览器的DOM并修改页面内容,不依赖服务器中的数据,直接从浏览器端获取数据并执行。这种类型的XSS漏洞通常在客户端直接输出DOM内容时候触发,例如使用document.getElementById("x").innerHTML或document.wtite等方法。
对页面的某个东西进行操作时,javascript就需要获得对html文档中所有元素进行访问的入口,这个入口就是dom,所以在dom型的xss漏洞利用中,dom可以看成一个访问html的标准程序接口。
可以使用HTML事件的方式或者使用javascript伪协议进行检测。
总结:作为企业,前两种(反射型和DOM型)漏洞一般都不会刻意去进行管理,而且很多时候给企业提交SRC的时候,都不会回复。
3、存储型XSS:恶意js代码不是某个参数,而是写进数据库或文件等可以永久保存数据的介质中。存储型xss通常发生在留言板等地方。多出现于论坛、博客和留言板中。攻击者在发帖的过程中,将恶意代码写入了帖子中,然后随帖子一起保存在了服务器中,当其他用户浏览这个帖子时,就会执行改恶意脚本。
存储型XSS可能出现的位置:
用户注册、留言板、上传文件的文件名处、管理员可见的报错信息、在线聊天框、客服、问题反馈区、邮件信箱
理论上,见框就插入
存储型XSS作用:获取cookie,内网IP等。
检测方法:存储型不使用弹框地方式进行检测,使用打印控制台日志来进行检测。
比如:<script>console.log(‘aa’);</script>,然后在控制台中查看是否打印出aa,如果打印出来了就说明代码生效了,就存在该漏洞。
XSS练习靶场:xss-labs-master