前言
XSS可以说是相当繁杂,但也相当重要。XSS的攻击方式多样,手段更是防不胜防,是DVWA中的重点学习模块。
关于XSS
XSS简介
XSS(Cross Site Scripting),跨站脚本攻击,为了与层叠样式表(Cascading Style Sheets,简称CSS)做出区分,故简称为XSS。XSS和SQL注入有一定的相似性,这两者都是由于后台程序对用户输入的不严格过滤导致的,但是XSS可以不与数据库交互,而是直接对网页代码进行攻击渗透。
XSS原理
黑客将恶意JS代码插入进web中,当用户浏览这个网页时,恶意JS代码被执行,达到黑客的目的。
例如在一个留言板中,我们将<script>alert("Hey,Hacker!")</script>
写入,那么此时页面的html代码中将会把这段话插入进去,那么留言板上的代码就变成了:
1 | <div id=”board” |
这时如果有用户打开这个留言板,那么浏览器解析html,这时我们写入的JS语句就会被执行,用户的网页上就会弹出写着”Hey,Hacker!”的弹窗。
XSS脚本注入点
既然说到XSS与SQL注入是相似的,那么XSS也一定是存在注入点的,下面简单介绍几个常用注入点:
HTML标签之间
<div>
:可以直接写入JS,web会直接执行<title>``<iframe>
等包含htmlEncode功能的标签:先闭合标签,再写入JSHTML标签之内
插入点在value内,type不为hidden:由于web不会执行在value值内的JS代码,因此要使JS从Value中跳出。可以采用闭合标签等多种方法。
插入点在value内,type为hidden:由于标签内容不可显示,这时可以闭合标签或者插入新的type(有两个相同type时第二个失效)。其它情况
属性可执行伪协议:直接输入JavaScript:脚本内容
eval():会直接执行JS语句,因此可以直接输入脚本内容
在JS代码中插入:闭合标签或者属性
XSS的危害
XSS可以窃取用户正在浏览中的cookie,可以劫持流量造成恶意页面跳转。cookie如果被窃取,可能你的验证信息就会被绕过,而页面跳转结合CSRF更会造成极大的危害。
XSS攻击
按照攻击的形式,XSS被分为三类:反射型XSS、储存型XSS以及基于DOM的XSS。
反射型XSS
反射型XSS是把恶意JS脚本通过URL传递给服务器,而服务器若没有进行过滤的话,则会把JS脚本反射给用户使得用户的浏览器执行了恶意JS脚本。例如构建url进行反射型XSS来窃取cookie中的内容:
1 | http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E# |
储存型XSS
储存型XSS的危害是极大的,由于恶意JS脚本可能被存入数据库中或被以其他方式储存进服务器,那么无论是谁只要再次访问该网页,都有可能执行这段恶意JS脚本。
前文有提到的留言板就是储存型XSS的经典例子之一,除此以外还有还有用户评论、聊天私信等。对比与反射型XSS,储存型XSS不需要用户访问特定URL,只要用户访问恶意网页就可以了。
基于DOM的XSS
DOM(Document Object Model),文档对象模型。我们可以通过对象树来认识DOM:
而通过这个对象模型,JS可以获得创建动态HTML的权利。这也为XSS创造了条件。
基于DOM的XSS一般不会与服务器进行交互,这个漏洞是由于前端的JS代码不严谨造成的,读取、执行恶意JS代码只由浏览器完成。
总结
关于XSS的理论学习暂时就这么多了,理论学习是一定要运用到实践上的,接下来就是完成DVWA的三个XSS的实战练习了。