XSS学习

前言

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
2
3
<div id=”board” 
<script>alert("Hey,Hacker!")</script>
</div>

这时如果有用户打开这个留言板,那么浏览器解析html,这时我们写入的JS语句就会被执行,用户的网页上就会弹出写着”Hey,Hacker!”的弹窗。

XSS脚本注入点

既然说到XSS与SQL注入是相似的,那么XSS也一定是存在注入点的,下面简单介绍几个常用注入点:

  1. HTML标签之间
    <div>:可以直接写入JS,web会直接执行
    <title>``<iframe>等包含htmlEncode功能的标签:先闭合标签,再写入JS

  2. HTML标签之内
    插入点在value内,type不为hidden:由于web不会执行在value值内的JS代码,因此要使JS从Value中跳出。可以采用闭合标签等多种方法。
    插入点在value内,type为hidden:由于标签内容不可显示,这时可以闭合标签或者插入新的type(有两个相同type时第二个失效)。

  3. 其它情况
    属性可执行伪协议:直接输入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的实战练习了。