Untitled
XSS攻击的分类
(1)来自内部的攻击
利用程序自身的漏洞,构造跨站语句
(2)来自外部的攻击
自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。
XSS的分类
1、反射型(非持久化):用户点击链接触发。
(1)原理
攻击者向服务器端注入一段js代码,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。当用户浏览该页面时,嵌入Web里面的Script代码就会被执行。
(2)判断是否存在反射型xss漏洞并利用
① 判断有没有过滤一些特殊的字符
比如对比输出的字符和输出的字符
② 注入代码
假如我输入的是1,提交后,点击查看网页源代码
③ 插入代码
“>< img src=1 onerror=”alert(/xss/)”/> #如果读取图片失败,则用alert显示相关信息
显示了信息,则说明存在xss注入
④ 利用xss漏洞
将刚刚成功注入代码并能触发xss的网址通过电子邮件等方式发送给对方的手中,如果结合xss平台,对方点击了链接,就能得到对方的cookie等信息
2、存储型(持久化)
(1)原理
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码。
(2)payload
< img src=”1” onerror=”alert(/xss/)”/>
注入后重新刷新发现直接回显注入的东西,说明是存储型xss
3、DOM型
(1)原理
文档对象模型(DOM)是一个与平台、编程语言不相干的接口,允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果会成为展示页面的一部分
DOM型xss其实是一种特殊类型的反射型xss,也被称作本地跨站,它是基于DOM文档对象模型的一种漏洞。DOM XSS和反射型XSS、存储型XSS的区别在于DOM XSS代码并不需要服务器参与,出发XSS靠的是浏览器的DOM解析,完全是客户端的事情
客户端的脚本程序可以通过DOM来动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而是从客户端取得DOM中的数据后并在本地执行。
基于DOM的XSS是反射的特例,其中JavaScript隐藏在URL中,并在其呈现时由页面中的JavaScript取出。
(3)payload
< img src=1 onerror=”alert(/xss/)”/>
XSS攻击的途径
第一种:对普通的用户输入,页面原样输出,攻击者通过对JSCODE的伪装,经过某些特定的操作就会跳出一个木马界面,从而取得登录用户的Cookie.
第二种:在代码区内存在有用户输入的内容
第三种:允许用户输入HTML标签的页面,用户可以提交一些自定义的HTML代码。
window.open
在用户点击瞬间,屏蔽掉默认的超链接 转而用弹框页进行取代,进而把xss的代码注入到了window.open的跳转页面去了
window.open (‘page.html’)
最后相应的cookie以及内容弹回
fetch
跨域请求中需要带有cookie时, 可在fetch方法的第二个参数对象中添加credentials属性, 并将值设置为”include”.
fetch(url,{
credentials: ‘include’
});
需要目标服务器可以接受接受跨域发送cookies请求
服务器端需要支持Access-Control-Allow-Credentials策略,并设置Access-Control-Allow-Credentials响应头为”true”, 即可允许跨域请求携带 Cookie。
XMLHttpRequest
XMLHttpRequest发送请求时需要设置withCredentials属性为true,来允许浏览器在自己的域设置cookie值。
后台设置Access-Control-Allow-Credentials,设置后必须写跟Request Headers的Origin相同的地址。