目录
一、XSS漏洞介绍
1.XSS漏洞原理
2.XSS漏洞的类型
反射型
存储型
DOM型
三者区别
3.漏洞识别
4.攻击方式
5.XSS漏洞危害
6.漏洞防御
二、XSS漏洞的攻击方式--注入脚本代码
1.反射型
2.存储型
3.DOM型
4.XSS盲打
5.XSS漏洞的绕过技术
双写绕过
编码绕过
伪协议绕过
空格绕过
大小写转换绕过
利用IE特性绕过
利用 css特性绕过
注释绕过关键字过滤
+16进制绕过对"<>"的过滤
+unicode绕过对"<>"的过滤
IMG源绕过
6.XSS 的防范措施
一、XSS漏洞介绍
XSS 漏洞(跨站脚本漏洞 (Cross Site Scripting) )XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户。是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript脚本语言,还包括flash等其它脚本语言。
1.XSS漏洞原理
服务器对用户提交的数据过滤不严,导致浏览器把用户的输入当成了脚本代码(js) 并直接返回给客户端执行,从而实现对客户端的攻击目的2.XSS漏洞的类型
XSS漏洞类型有3个:
反射型存储型dom型反射型
反射型XSS是临时性的,指注入的代码不在后端存储,但会在服务器端进行处理然后进行回显存储型
存储型XSS会将恶意代码存储在数据库中,从而 达到一个长期危害的作用。DOM型
DOM型XSS利用的是html dom,不经过后端,只在浏览器处理并执行,也是临时性的。
三者区别
存储型xss和dom型xss是一次性的攻击,而存储型xss是持久型的相对于反射和存储型xss,DOM型xss的攻击数据不经过服务器,难以被流量监控设备 检测出来。3.漏洞识别
存在输入框且输入框未进行特殊字符过滤
4.攻击方式
在系统中寻找存在输入框的地方,输入payload测试,然后选择类型注入想要的脚本代码
特殊情况:
如果有过滤,可通过<a herf="#" οnclick="alert(document.cookie)">等绕过script过滤,可通过javascript:alert(document.cookie)等绕过但双引号过滤。
XSS payload大全:https://github.com/payloadbox/x
5.XSS漏洞危害
窃取用户Cookie后台增删改查文章XSS钓鱼攻击利用XSS漏洞进行传播和修改网页代码XSS蠕虫攻击网站重定向获取键盘记录获取用户信息等结合其他漏洞(结合cstf漏洞进行getshell:例如前段时间爆出的小皮面板rce漏洞)危害程度:存储型>反射型> DOM型
6.漏洞防御
总的原则:输入做过滤,输出做转义
1、对输入内容进行转义or过滤。
2、对输出内容进行转义or编码
3、设置cookie为httponly,使客户端无法通过脚本获得cookie
二、XSS漏洞的攻击方式--注入脚本代码
通过对输入框写入脚本代码来实现XSS漏洞攻击
温馨提示:与post方式的xss漏洞相比,Get类型的更加容易被利用,只需要将带有xss漏洞的URL发送给目标即可
1.反射型
在输入框中输入一些特殊的符号如:;"’<>9999
查看这些特殊字符是否会被过滤,有没有被输出
查看返回页面的源码,CTRL+F在页面内查找我们输入的字符串,查看我们的输入是否会被原封不动的输出
如果在输入较长的字符串后,发现不能输入了,这是在前端进行的安全设置。只需要在该页面打开web开发者工具,找到限制输入长度的语句修改即可。
输入代码<script>alert('xss')</script>,可以发现输入的代码被执行
因为是一次性的,并没有存储到后台的数据库当中所以当我们刷新页面后弹窗消失
2.存储型
和反射性xss形成的原因一样,区别就在于后台会将我们的输入保存到数据库当中,造成长时间的伤害。一般出现在像留言板这样的地方。
和之前的思路一样,在输入框中输入一些特殊字符,点击提交。打开页面源码,看是否对我们的输入进行了处理
和上面一样构造一个出现弹窗的jsp语句,提交后出现了弹窗。进行刷新页面发现弹窗还在,说明我们的输入被存储起来了
3.DOM型
你可以把DOM理解为一个一个访问HTML的标准编程接口。Dom就是纯前端的操作
pikachu关于Dom型关卡,查看页面的源码:
<a href='"+str+"'>what do you see?</a>
还是构造一个弹窗:#' οnclick="alert(666)”>
然后此处就变成了:
<a href='#' οnclick="alert(666)">'>what do you see?</a>
由于Dom型xss为纯前端操作,都是客户端的事,所以无法通过WAF进行防御
4.XSS盲打
xss盲打指的是一种攻击场景。
意思就是说我们的输入并不会在前端进行输出,也就是在后台才会进行输出,换句话说,只有管理员才会看到我们的输入。
例如提交:<script>alert('xni')</script>设置一个弹窗
这就是xss盲打,对攻击者来说只是尝试的输入,并不知道后台是否被输出,只是尝试的输入跨站脚本。管理员被x到,攻击者成功。这种危害比较大,如果在前端输入一段盗取cookie的脚本,管理员一登陆,管理员的cookie就会被获取。攻击者就可以伪装管理员登陆后台,后台的权限就大了。
5.XSS漏洞的绕过技术
绕过技术是指,绕过xss漏洞的防御,完成xss漏洞攻击
双写绕过
代码:<scscriptript>alert("xss")</scscriptript>
编码绕过
编码:<script>eval(atob(base64))</script>
伪协议绕过
代码:<a hrrf="javascript:alert(document.cookie)">xss</a>
空格绕过
代码: <sc ript>alert("xss")</s cript>
大小写转换绕过
代码: <Script>alert("xss")</Script>
利用IE特性绕过
IE中 两个反引号``可以闭合左边双引号 `` οnmοuseοver=alert("xss")
利用 css特性绕过
background-color:#f00;backbround:url("javascript:alert("xss");");
注释绕过关键字过滤
expres/**/sion(if(!window.x){alert(document.domain);window.x=1})
+16进制绕过对"<>"的过滤
代码: \\x3cscript\\x3ealert("xss")\\x3c\script\\x3e
+unicode绕过对"<>"的过滤
代码:\\u3cscript\\u3ealert("xss")\\u3c\script\\u3e
IMG源绕过
源的含义
源由协议,主机名,端口名组成
范例:协议://主机名:端口号/
同源策略
在计算机中,同源策略用于阻止一个非同源的页面恶意代码去访问另外一个非同源页面
只有两个页面属于同一个源才能互相访问。不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,所以a.com下的js脚本采用ajax读取b.com里面的文件数据会报错
IE源特殊处理
1.位于可信域的互信的域名间,不受同源策略限制
2.ie判断同源时不会考虑端口
可是通过document.domain读取或修改源。但是有限制。修改之后的源不能通过其他脚本再次修改
domain属性可以解决因安全策略带来的不同文档的属性共享问题。降域 document.domain同源策略认为域和子域属于不同的域,比如:child1.a.com 域 a.com 是不同源
可以通过设置document.domain='a.com' ,浏览器就会认为它们都是同一源。想要实现以上两个任意页面之间的通信,两个页面必须都设置document.domain='a.com'