存储型XSS漏洞
跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息的方式诱使管理员浏览,从而获得管理员权限,控制整个网站。
今天要说的是存储型XSS,属于跨站脚本攻击中的一种。存储型XSS,听名字就能猜出来是持久化数据脚本攻击。
由攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据,然后显示在公共显示的固定页面上,那么所有浏览该页面的用户都会被攻击。该类型攻击性非常大,危险也非常大。
测试思路和方法
由于攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据。所以大部分的存储型XSS漏洞都是在表单提交上会发生的。
针对这种特性,我们需要做的就是在程序任何有可能提交表单上进行验证。
1.在对应的表单输入 screenshot点击提交。提交完成后重新刷新页面,页面弹出对话框显示1,则表示存在存储型XSS漏洞。
2. 在对应的表单输入screenshot,点击提交。提交完成后重新刷新页面,页面弹出对话框显示1,则表示存在存储型XSS漏洞。
测试实例解析
举一个例子,平时我们可能遇到这样的情况。打开并登陆到系统填写表单页,截图如下:
接着之前提到的两个验证方法,在对应的表单中输入 screenshot或者screenshot,提交表单。
提交成功后的页面,输入已存入数据库。
再次刷新页面,会出现如下图所示的弹框。
原因分析
为什么会出现上述现象呢?我们来分析一下这两个特殊输入。
screenshot,当嵌入JS脚本中时,前面的/script会与脚本中的script形成闭合,如果脚本不存在script也不会受影响。screenshot就会跳出原来JS脚本的束缚,所以会直接弹框显示。
screenshot,当嵌入JS脚本中时,前面的">会与脚本中的<形成闭合,如果脚本不存在<也不会受影响。screenshot就会跳出原来JS脚本的束缚,所以会直接弹框显示。
解决方法:
在入库时对特殊字符进行 \uXX 编码转义,使用公司已有的方法封装如下:
版权声明:本文出自极测 jingting,51Testing软件测试网原创出品,未经明确的书面许可,任何人或单位不得对本文进行复制、转载或镜像,否则将追究法律责任。