XSS跨站脚本攻击(Cross-Site Scripting)就是网站将用户输入的内容输出到页面上,在这个过程中可能有恶意代码被浏览器执行,XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。
XSS通常情况可以有两种解释就是它可以是一种攻击方式,或者是一种漏洞。
XSS其实叫CSS,但是由于和另一种网页技术——层叠样式表(Cascading Style Sheets)的缩写一样,为了防止混淆,所以把原本的CSS简称为XSS。
这一漏洞攻击在各种WEB应用安全漏洞中,一直被OWASP(Open Web Application Security Project)组织评为十大应用安全中的其中之一。
XSS一般攻击的是前端(比如盗取其他用户cookie),而不是后端,所以XSS一般需要结合其他漏洞进行挂马。(个人理解)
XSS的原理是由于Web应用程序对用户输入过滤不足,这时候攻击者就可以通过这些不足在网页上面注入一些比如盗取cookie,转账等等的JavaScript脚本恶意代码,当用户浏览这些网页时就会执行其中的恶意代码,从而就完成一个的完整的XSS攻击流程。
跨站脚本,就是用户稀里糊涂地执行了攻击者放在网页上的恶意脚本,归根结底就是服务端过于信任客户端提交的数据。
在这里由于XSS有分类,所以对XSS原理的解释只是一个比较泛的解释,具体的原理还得需要具体的XSS类型去分析,即在下面博文中。
上面说了,XSS只是一个比较泛的概念,具体的攻击漏洞,还得具体分析,一般XSS漏洞有反射型,存储型、DOM型(DOM—based型)。
反射型XSS又叫非持久型XSS,是用户点击到攻击者设置好的恶意网站(一般这种是POST请求才使用)或者是用户访问到攻击者设置好的URL(即可以使用GET请求),在网页返回的内容中出现攻击者设置的XSS脚本代码,并被浏览器解析执行。反射的意思就是XSS攻击脚本被Web服务器反射回来给浏览器解析执行。
在这里我们会发现,反射型XSS由于请求方式不同攻击手法也不同,但原理大同小异,就是都是让客户去触发到这个漏洞点上,返回服务器反射给浏览器并被浏览器解析,这之间服务器他就相当于一个传递者,将恶意代码传递个用户,这一过程看上去就像反射镜反射一样,攻击者将一束光线射给反射镜,反射镜又将这束光反射给用户。
注意:这里是浏览器解析了脚本,而不是服务器
存储型XSS也叫持久性XSS,是攻击者将恶意脚本代码存储到Web服务器中并被解析,客户当访问到这网页时将受到攻击。在这里一定要注意反射型与存储型区别:链接在这里。
这时我们就会发现不管是什么方式请求,
注意:这里是服务器解析了脚本,而不是浏览器
DOM(Document Object Model),是一种文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象,使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式,本质就是一种树状的模型。
DOM型XSS是基于DOM文档对象模型的一种漏洞,所以受客户端浏览器的脚本代码所影响,而不是想前面两种会与服务器交互(不是解析,是交互)。
DOM型XSS由于是取决于输出位置,并不取决于输出环境,因此也可以说DOM型XSS既有可能是反射型的,也有可能是存储型的,就是说它的输出点是在DOM位置上。
这个类型有点抽象,说实话自己在了解到这个类型XSS时也是懵逼的很,看了这篇博文,大概懂了个一二:链接
就是说DOM型XSS只在浏览器上有恶意代码才算。
如果对三种类型的XSS还有不了解或者区分不开的读者可以查看这个链接:链接在此
个人觉得XSS与SQL注入是漏洞安全中两个必不可少的话题,就像倚天剑和屠龙刀一样,其危害可想而知。
以下是说可能涉及到的危害:
攻击流程:
我们来假设一个情景:现在有一个网站,它可能有XSS漏洞,那么攻击流程可以如下:
1、先在文本框或者URL里判断这个输入位是在HTML属性里面还是在属性外面,如果是属性里面,那么我们就需要对其进行闭合猜测,即:>、’>、">等等,并且可以利用未闭合的特点加入事件引发弹窗等现象,如果是在外面,那么进入下一步
2、我们可以使用语句及其变种进行初步测试,如果有结果,那么我们就进入第四步,如果没有结果,那么我们就进入下一步
3、使用特殊的方式方法对XSS防御进行绕过,当绕过成功时进入下一步
4、对网站进行进一步渗透,并结合其他漏洞进行综合渗透
5、整理数据,书写漏洞报告
测试XSS:
检测XSS一般分两种:手工检查、全自动检测
手工检查
一般使用盲打的方式,就是不知道后台代码,靠自己的经验去猜测,或者使用一些比较敏感的符号'<>"/()
反正见到输入框或者是URL参数就是加代码。
全自动检测
检测工具:Appscan、AWVS、BurpSuite。。。
一些常见的脚本代码函数:
<script>alert(/xss/)</script> alert()方法用于显示带有指定消息和确认按钮的警告框
"><script>alert(/xss/)</script> 对页面属性的闭合操作
document.cookie 显示当前页面的cookie
window.location.hostname 返回Web主机的域名
window.location.pathname 返回当前页面的路径和文件名
window.location.port 返回Web主机的端口(80或443)
window.location.protocol 返回所使用的Web协议(http:或https:)
window.location.href 返回当前显示的文档的完整URL
onload 一张页面或一幅图像完成加载
onsubmit 确认按钮被点击触发
onmousemove 鼠标移动到相应位置触发
onerror 在加载文档或图像时发生错误
xss-labs-master靶机攻略
攻略地址:链接在此
防御措施说白了,就是对任何用户都采取不信任。
后语:我们不是网络上面的破坏者,而是网络世界的维护者,我们是白帽子,也是红帽子!