XSS攻防与绕过
一、XSS利用方式
- 获取用户cookie,实现越权,如果是获取网站管理员的Cookie,叫做提权。应该尽快注销账号,让Session失效
- 钓鱼网站,模拟真实的网站的登录页面,获取用户信息(用户名密码等),再跳转到真实网站
- 执行JS代码,用于DDOS攻击别的目标站点,在A站植入XSS代码,向B站发送请求,当用户量大的时候,实现了DDOS攻击
- 恶意链接让用户点击,或者直接将网页植入到站点<\iframe>标签中
- 当用户点击访问到恶意站点,在恶意网页中,可以执行JS代码,一方面提供正常网站功能,两亿访民啊隐藏者DOS或挖矿代码让用户浏览器执行
二、测试方法
- 反射型:可以使用扫描器,或者burp进行fuzz
- 存储型:可以直接用字典中的payload一个个试,根据弹窗的编号,就知道是哪个。但是容易被发现,所以可以先试探以下特殊符号是否被过滤
- DOM型:主要以阅读JS代码为主,在页面找到输入点的线管DOM节点,在开发者选项中搜索以下,根据搜索结果去看看是否被相关的JS操作,如果有JS的操作,就去看我们的输入操作后输出在那个地方,就按照常规的XSS思路进行构建。
扫描器,要么直接对一个URL地址进行XSS的payload攻击,确认该URL地址在哪些payload上存在XSS,另外一个思路是对整个网站使用爬虫手段先爬取URL地址,然后再批量扫描
三、防御手段
- 做实体字符编码,htmlspecialchars函数可以对
<
>
"
等符号转换成实体编码,最后显示出来还是原来的样子,这样基本上就没有XSS攻击的可能了 - 正则表达式或字符串判断:可以判断是否包含
script
等关键字进行过滤
四、绕过方法
-
绕过过滤
-
前端限制:直接使用卡法这选项修改JS,或者使用burpsuite绕过
-
字符过滤;双写、大小写绕过、注释符绕过、换行符绕过
-
-
绕过编码
- 明确浏览器解析的机制,选择对应的编码
五、其他技巧
-
输出在标签之间的情况:测试<>是否被过滤或者转义,如果没有可以直接
<\img src=1 onerror=alert(1)>
-
输出在
script
内:需要在保证内部JS语法正确前提下,去插入payload。如果输出在字符串内部,测试字符串内否被闭合。 -
如果输出在HTML属性中:首先查看属性是否有双引号包裹,没有则直接添加新的事件属性;又引号就测试能不能闭合
-
输出在JS中,空格被过滤:使用
/**/
代替空格,或者在XSS代码后对其他代码进行注释 -
输出在JS注释中:设法插入%0A,%0D等,让payload逃逸出来
-
输出在JS字符串中:可以利用JS的十六进制、八进制、unicode编码
-
当payload在以下这些标签中时,并不会解析,除非把他们闭合掉
<textarta></textarea> <title></title> <iframe></iframe> <noscript></noscript> <noframes></noframes> <xmp></xmp> <plaintext></plaintext>