一、xss漏洞介绍
XSS 攻击:跨站脚本攻击 (Cross Site Scripting),为不和层叠样式表 (Cascading Style Sheets, CSS) 的缩写混淆。故将跨站脚本攻击缩写为 XSS。
二、xss漏洞的危害
XSS 是一种经常出现在 web 应用中的计算机安全漏洞,这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
攻击者可以使用户在浏览器中执行其预定义的恶意脚本,其导致的危害可想而知,如劫持用户会话,盗取管理员cookie、插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫,甚至破坏网站、修改路由器配置信息等。
三、xss漏洞分类
1.反射型xss:
反射性xss,就是要用户去点击,点了我才执行响应的命令。这种类型的 XSS 攻击是最常见的。明显特征就是把恶意脚本提交到 URL 地址的传参或者在表单或者输入框。该种类型危害较小,反射性 XSS 只执行一次,且需要用户触发。
2.存储型xss:
顾名思义就是持久性的 XSS,服务端已经接收了,并且存入数据库,当用户访问这个页面时,这段 XSS 代码会自己触发,不需要有客户端去手动触发操作。该种类型危害较大,存储性xss只要用户点击一次就触发一次。
3.dom型xss:
简单理解 DOM XSS 就是出现在 javascript 代码中的 xss 漏洞,不需要服务端交互,只发生在客户端传输数据的时候。
四、xss常用payload
1.这里转载一篇过滤速查表https://www.freebuf.com/articles/web/153055.html
https://422926799.github.io/posts/6bcf9b8f.html
五、xss实战(靶场环境)
ps:这里用的是dvwa靶场,等级分别为low(无任何过滤),中级(过滤script标签),高级(用正则过滤script)
推荐靶场:
http://xcao.vip/test/xss1.php?data=
https://xss-quiz.int21h.jp/
http://test.ctf8.com
1.反射性xss实战
1.1low级别:随便输入数据,然后返回显示正常,然后我们插入payload:中级payload:高级payload:<svg/onload = alert(1);>
3.dom型xss
六、xss防御
1.HttpOnly
HttpOnly最早是由微软提出,并在IE 6中实现的,至今已成为一个标准。浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie。严格来说,HttpOnly并非为了对抗XSS–HttpOnly解决的是XSS后的Cookie劫持。
2.输入检查
常见的Web漏洞如XSS、SQL Injection等,都要求攻击者构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所以输入检查就有存在的必要了。在XSS的防御上,输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如<、>、’、“等,如果发现存在特殊字符,者将这些特殊字符过滤或者编码。
3.html 实体
当需要往 HTML 标签之间插入不可信数据的时候,首先要做的就是对不可信数据进行 HTML Entity 编码,在 html 中有些字符对于 HTML 来说是具有特殊意义的,所以这些特殊字符不允许在文本中直接使用,需要使用实体字符。 html 实体的存在是导致 XSS 漏洞的主要愿意之一,因此我们需要将实体转化为相应的实体编号。
4.JavaScript编码
这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(如onerror, onload等)。在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码,并且只把这些数据放到使用引号包围起来的值部分(data value)之中,除了上面的那些转义之外,还要附加上下面的转义:
\ 转成 \ / 转成 / ; 转成 ;(全角;)