Web篇(6.3) 10. 跨站脚本 - DOM型XSS ❀ FortiWeb 攻防演练
【简介】跨站脚本(Cross-site scripting,简称:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。从而使目标计算机收到危害。
DOM型XSS
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
可能触发DOM型XSS的属性:
- document.referer 属性
- window.name 属性
- location 属性
- innerHTML 属性
- documen.write 属性
安全等级 - Low
将DVWA的安全等级切换到Low。
① 选择【XSS (DOM)】,显示选择语言页面,点击【View Source】,查看源代码。
② 从源代码可以看出,这里代码没有任何的保护性措施!
③ 页面本意是叫我们选择默认的语言,但是对default参数没有进行任何的过滤。
④ 我们可以构造XSS代码,将English替换成 <script>alert('123456')</script>,可以看到script脚本成功执行了,弹出了窗口。
⑤ Firefox火狐浏览器,点击右边主菜单,选择【Web开发者】。
⑥ 选择【查看器】。或者也可以直接按快捷键【Ctrl+Shift+C】。
⑦ 查看当前页面的源代码,可以看到脚本已经插入到代码中,所以执行了。
安全等级 - Medium
将安全等级升级为中级。
① 从源代码可以看到,先检查了default参数是否为空,如果不为空则将default等于获取到的default值。这里还使用了 stripos() 函数检测default值中是否有 <script ,如果有的话,则将 default=English 。
② 我们可以构造XSS代码,将English替换成 ></option></select><img src=1 οnerrοr=alert('hack')> 。
③ 再查看网页源代码,可以看到,语句已经插入到页面中了。
安全等级 - High
将安全等级升级为高级。
① 从源代码可以看到,先判断defalut值是否为空,如果不为空的话,再用switch语句进行匹配,如果匹配成功,则插入case字段的相应值,如果不匹配,则插入的是默认的值。这样的话,我们的语句就没有可能插入到页面中了。
安全等级 - Impossible
将安全等级升级为不可能。
① 从源代码可以看到,代码没有任何东西,注释写的是保护的代码在客户端的里面。
② 我们尝试将English替换成 <script>alert('123456')</script>。
③ 发现页面并没有弹出任何东西,而且语言框内的值是我们输入的参数的经过URL编码后的数据。
④ 再查看网页源代码,发现这里对输入的参数并没有进行URL解码,输入的任何参数都是经过URL编码,然后直接赋值给option标签。所以,就不存在XSS漏洞了。
FortiWeb 防护
FortiWeb可以阻止这一类的攻击。
① 这次我们访问192.168.1.128,也就是经过FortiWeb保护的DVWA,安全选择Low,输入一段注入代码,看看会发生什么。
② 访问被FortiWeb成功的阻止了。
③ 登录FortiWeb,选择菜单【日志和报表】-【攻击】,点击【添加过滤器】。
④ 选择【消息ID】。
⑤ 选择阻止页面上显示的消息ID。
⑥ 显示XSS攻击被FortiWeb阻止了。如果有了FortiWeb,这样大部分因为代码产生的漏洞安全问题,就可以有效的解决了。