漏洞原理
XSS 全称是 Cross Site Scripting 即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。 XSS 攻击大体分为两类,一类是反射型跨站脚本(XSS),又称非持久型,参数型XSS;另一类是存储型 XSS。
实例展示
类型一:反射型 XSS
反射型跨站脚本(XSS),又称非持久型,参数型XSS。这类型的XSS跨站脚本是最常见的,也是使用最广泛的一种,主要用于将恶意脚本附加到URL地址的参数中,例如:
反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接时,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称之为反射型XSS。
案例一:本案例使用开源建站系统 Discuz!进行演示
1、漏洞探测,构造 XSS 代码,对参数进行注入,使用 alert() 函数判断代码是否执行,alert()正常执行将出现弹窗提醒,现将构造代码跟随参数注入,访问:
http://xxx/Discuz7.2/upload/ajax.php?infloat=yes&handlekey=123);alert(/Hacked by qiqi/);//
页面出现弹窗,反射型 XSS 注入成功,证明参数 handlekey 存在 XSS 漏洞。
2、漏洞利用,构造 XSS 代码弹窗得到当前用户的 cookie 信息,访问:
可在浏览器中对比当前页面cookie认证,完全一致:
类型二:存储型 XSS
存储型XSS不需要用户单击特定URL就行执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。
案例二:本案例使用开源建站系统 Discuz!进行演示
1、在http://xxx/Discuz7.2/upload/index.php页面注册新用户,并发帖。
2、将预先构造好的恶意代码贴入帖子中,如下图:
3、帖子成功发布后,任意浏览该帖子的用户(包括管理员)都会中招。
4、得到cookie认证后可在有限时间内利用受害者身份登录系统,进行一些列未授权的操作。
漏洞危害
1、如上边实例所示,XSS 攻击最大的危害在于盗取用户 cookie ,获取其他用户登录权限;
2、如实例所展示的弹窗现象,可对用户进行钓鱼攻击;
3、存储型 XSS 可进行蠕虫式的DDoS攻击,蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据等
解决方案
1、各种扫描工具和注入工具的防御
NGAF特有的WAF策略能够有效防御各种漏洞扫描工具和注入工具对网站进行探测。
2、XSS注入防御
针对XSS探测和注入,WAF策略中能够匹配拦截各类 XSS 探测语句,例如 < 、>、script 等
3、基于代码层的防护
永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号、双引号和尖括号进行转换等。